Nokia wk34 delivery RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 13 Sep 2010 17:13:53 +0100
branchRCL_3
changeset 69 4455192101e4
parent 65 8e6fa1719340
Nokia wk34 delivery
browserplugins/browseraudiovideoplugin/group/BLD.INF
browserplugins/browseraudiovideoplugin/group/bld.inf
browserplugins/browseraudiovideoplugin/loc/BrowserAudioVideoPlugin.loc
browserplugins/browseraudiovideoplugin/loc/browseraudiovideoplugin.loc
browserplugins/browsergpsplugin/group/BLD.INF
browserplugins/browsergpsplugin/group/bld.inf
browserplugins/browsersysteminfoplugin/group/BLD.INF
browserplugins/browsersysteminfoplugin/group/bld.inf
browserui/browser/loc/BrowserHp.loc
browserui/browser/loc/Feeds.loc
browserui/browser/loc/WmlBrowser.loc
browserui/browser/loc/browserhp.loc
browserui/browser/loc/feeds.loc
browserui/browser/loc/wmlbrowser.loc
browserui/videoservices/loc/VideoServices.loc
browserui/videoservices/loc/videoservices.loc
pushmtm/Group/Bld.inf
pushmtm/Group/PushMtmCliSrv.mmp
pushmtm/Group/PushMtmIcons.mk
pushmtm/Group/PushMtmUi.mmp
pushmtm/Group/PushMtmUtil.mmp
pushmtm/Group/PushViewer.mmp
pushmtm/Plugins/Data/10008D3E.rss
pushmtm/Plugins/Group/Bld.inf
pushmtm/Plugins/Group/PushContentHandlerClean.mk
pushmtm/Plugins/Group/PushMtmPushContentHandler.mmp
pushmtm/Plugins/Group/PushMtmWhiteListAdapter.mmp
pushmtm/Plugins/PushContentHandler/101F854C.rss
pushmtm/Plugins/PushContentHandler/CCOContentHandler.cpp
pushmtm/Plugins/PushContentHandler/CCOContentHandler.h
pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp
pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.h
pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp
pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h
pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.cpp
pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.h
pushmtm/Plugins/PushContentHandler/CSIContentHandler.cpp
pushmtm/Plugins/PushContentHandler/CSIContentHandler.h
pushmtm/Plugins/PushContentHandler/CSIContentHandler.inl
pushmtm/Plugins/PushContentHandler/CSLContentHandler.cpp
pushmtm/Plugins/PushContentHandler/CSLContentHandler.h
pushmtm/Plugins/PushContentHandler/CSLContentHandler.inl
pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.cpp
pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.h
pushmtm/Plugins/PushContentHandler/PushContentHandlerDef.hrh
pushmtm/Plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp
pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.cpp
pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.h
pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.cpp
pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.h
pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp
pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.h
pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp
pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.h
pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.cpp
pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.h
pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.cpp
pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.h
pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.inl
pushmtm/Plugins/PushContentHandler/StringResourceReader.cpp
pushmtm/Plugins/PushContentHandler/StringResourceReader.h
pushmtm/Plugins/PushContentHandler/si_dict.c
pushmtm/Plugins/PushContentHandler/si_dict.h
pushmtm/Plugins/PushContentHandler/sl_dict.c
pushmtm/Plugins/PushContentHandler/sl_dict.h
pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapter.h
pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterDef.h
pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterItem.h
pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h
pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterPanic.h
pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterUids.h
pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp
pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp
pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp
pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp
pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp
pushmtm/group/PushMtmCliSrv.mmp
pushmtm/group/PushMtmIcons.mk
pushmtm/group/PushMtmUi.mmp
pushmtm/group/PushMtmUtil.mmp
pushmtm/group/PushViewer.mmp
pushmtm/group/bld.inf
pushmtm/loc/PushMtmUi.loc
pushmtm/loc/PushViewer.loc
pushmtm/loc/pushmtmui.loc
pushmtm/loc/pushviewer.loc
pushmtm/plugins/Data/10008D3E.rss
pushmtm/plugins/PushContentHandler/101F854C.rss
pushmtm/plugins/PushContentHandler/CCOContentHandler.cpp
pushmtm/plugins/PushContentHandler/CCOContentHandler.h
pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp
pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.h
pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp
pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h
pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.cpp
pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.h
pushmtm/plugins/PushContentHandler/CSIContentHandler.cpp
pushmtm/plugins/PushContentHandler/CSIContentHandler.h
pushmtm/plugins/PushContentHandler/CSIContentHandler.inl
pushmtm/plugins/PushContentHandler/CSLContentHandler.cpp
pushmtm/plugins/PushContentHandler/CSLContentHandler.h
pushmtm/plugins/PushContentHandler/CSLContentHandler.inl
pushmtm/plugins/PushContentHandler/CUnknownContentHandler.cpp
pushmtm/plugins/PushContentHandler/CUnknownContentHandler.h
pushmtm/plugins/PushContentHandler/PushContentHandlerDef.hrh
pushmtm/plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp
pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.cpp
pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.h
pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.cpp
pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.h
pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp
pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.h
pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp
pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.h
pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.cpp
pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.h
pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.cpp
pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.h
pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.inl
pushmtm/plugins/PushContentHandler/StringResourceReader.cpp
pushmtm/plugins/PushContentHandler/StringResourceReader.h
pushmtm/plugins/PushContentHandler/si_dict.c
pushmtm/plugins/PushContentHandler/si_dict.h
pushmtm/plugins/PushContentHandler/sl_dict.c
pushmtm/plugins/PushContentHandler/sl_dict.h
pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapter.h
pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterDef.h
pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterItem.h
pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h
pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterPanic.h
pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterUids.h
pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp
pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp
pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp
pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp
pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp
pushmtm/plugins/group/PushContentHandlerClean.mk
pushmtm/plugins/group/PushMtmPushContentHandler.mmp
pushmtm/plugins/group/PushMtmWhiteListAdapter.mmp
pushmtm/plugins/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 <platform_paths.hrh>
-#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-// export localization files
-../loc/browseraudiovideoplugin.loc  APP_LAYER_LOC_EXPORT_PATH(browseraudiovideoplugin.loc)
-../rom/BrowserAudioVideoPlugin.iby	CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPlugin.iby)
-../rom/BrowserAudioVideoPluginResources.iby	LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPluginResources.iby)
-
-#ifdef __SERIES60_32__
-
-PRJ_MMPFILES
-gnumakefile BrowserAudioVideoPluginIcon.mk
-
-BrowserAudioVideoPluginEcom.mmp    // Plugin mmp file
-
-#else
-
-PRJ_EXTENSIONS
-START EXTENSION s60/mifconv
-OPTION TARGETFILE BrowserAudioVideoPlugin_aif.mif
-OPTION HEADERFILE BrowserAudioVideoPlugin.mbg
-OPTION SOURCEFILE iconlist.txt
-END
-
-PRJ_MMPFILES
-
-BrowserAudioVideoPluginEcom.mmp    // Plugin mmp file
-
-#endif
-
-//  End of File  
-
-		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/group/bld.inf	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project build file for BrowserAudioVideoPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+// export localization files
+../loc/browseraudiovideoplugin.loc  APP_LAYER_LOC_EXPORT_PATH(browseraudiovideoplugin.loc)
+../rom/BrowserAudioVideoPlugin.iby	CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPlugin.iby)
+../rom/BrowserAudioVideoPluginResources.iby	LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(BrowserAudioVideoPluginResources.iby)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+gnumakefile BrowserAudioVideoPluginIcon.mk
+
+BrowserAudioVideoPluginEcom.mmp    // Plugin mmp file
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE BrowserAudioVideoPlugin_aif.mif
+OPTION HEADERFILE BrowserAudioVideoPlugin.mbg
+OPTION SOURCEFILE iconlist.txt
+END
+
+PRJ_MMPFILES
+
+BrowserAudioVideoPluginEcom.mmp    // Plugin mmp file
+
+#endif
+
+//  End of File  
+
+		
--- a/browserplugins/browseraudiovideoplugin/loc/BrowserAudioVideoPlugin.loc	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  This is a localisation file for BAVP
-*
-*/
-
-
-// LOCALISATION STRINGS
-
-//d:Invalid clip information note.
-//d:Shown when media could not be opened.
-//w:
-//l:popup_note_window
-//r:2.8
-//
-#define qtn_mp_note_invalid_clip 					"Invalid Clip. Operation canceled."
-
-//d:Menu item for Video option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_video						"Video"
-
-
-//d:Menu item for Video play option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_play						"Play"
-
-//d:Menu item for Video stop option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_stop						"Stop"
-
-//d:Menu item for Video pause option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_pause						"Pause"
-
-//d:Menu item for Video fullscreen option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_fullscreen					"FullScreen"
-
-//d:Menu item for Video volume change option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_volume_down				"Volume Down"
-
-//d:Menu item for Video volume change option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-#define qtn_video_plugin_volume_up					"Volume Up"
-
-//d:Menu item for Video Fast Forward option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_fast_forward				"Fast Forward"
-
-//d:Menu item for Video Rewind option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//	
-#define qtn_video_plugin_rewind						"Rewind"
-
-//d:Menu item for Video Skip Forward option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_skip_forward				"Skip Forward"
-
-//d:Menu item for Video Skip Backward option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_skip_backward				"Skip Backward"
-
-//d:Menu item for Video volume mute option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_mute					    "Mute"
-
-//d:Menu item for Video Full Screen option menu text
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_video_plugin_full_screen				"Full Screen"
-
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browseraudiovideoplugin/loc/browseraudiovideoplugin.loc	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is a localisation file for BAVP
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d:Invalid clip information note.
+//d:Shown when media could not be opened.
+//w:
+//l:popup_note_window
+//r:2.8
+//
+#define qtn_mp_note_invalid_clip 					"Invalid Clip. Operation canceled."
+
+//d:Menu item for Video option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_video						"Video"
+
+
+//d:Menu item for Video play option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_play						"Play"
+
+//d:Menu item for Video stop option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_stop						"Stop"
+
+//d:Menu item for Video pause option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_pause						"Pause"
+
+//d:Menu item for Video fullscreen option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_fullscreen					"FullScreen"
+
+//d:Menu item for Video volume change option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_volume_down				"Volume Down"
+
+//d:Menu item for Video volume change option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+#define qtn_video_plugin_volume_up					"Volume Up"
+
+//d:Menu item for Video Fast Forward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_fast_forward				"Fast Forward"
+
+//d:Menu item for Video Rewind option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//	
+#define qtn_video_plugin_rewind						"Rewind"
+
+//d:Menu item for Video Skip Forward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_skip_forward				"Skip Forward"
+
+//d:Menu item for Video Skip Backward option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_skip_backward				"Skip Backward"
+
+//d:Menu item for Video volume mute option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_mute					    "Mute"
+
+//d:Menu item for Video Full Screen option menu text
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.2
+//
+#define qtn_video_plugin_full_screen				"Full Screen"
+
+// End of File
--- a/browserplugins/browsergpsplugin/group/BLD.INF	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Project build file for BrowserLocationPlugin
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-../rom/BrowserGpsPlugin.iby	CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserGpsPlugin.iby)
-
-PRJ_MMPFILES
-GpsPluginEcom.mmp    // Plugin mmp file
-
-//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsergpsplugin/group/bld.inf	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project build file for BrowserLocationPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/BrowserGpsPlugin.iby	CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserGpsPlugin.iby)
+
+PRJ_MMPFILES
+GpsPluginEcom.mmp    // Plugin mmp file
+
+//  End of File
--- a/browserplugins/browsersysteminfoplugin/group/BLD.INF	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Project build file for BrowserSystemPlugin
-*
-*/
-
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-../rom/BrowserSystemInfoPlugin.iby	CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserSystemInfoPlugin.iby)
-
-PRJ_MMPFILES
-SystemInfoPluginEcom.mmp    // Plugin mmp file
-
-//  End of File  
-
-		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserplugins/browsersysteminfoplugin/group/bld.inf	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project build file for BrowserSystemPlugin
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../rom/BrowserSystemInfoPlugin.iby	CORE_APP_LAYER_IBY_EXPORT_PATH(BrowserSystemInfoPlugin.iby)
+
+PRJ_MMPFILES
+SystemInfoPluginEcom.mmp    // Plugin mmp file
+
+//  End of File  
+
+		
--- a/browserui/browser/loc/BrowserHp.loc	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-//d: Local home page title
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_title				"Web Browser for S60"
-
-
-
-//d: Local home search web
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_search_web				"Web"
-
-//d: Local home search images
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_search_images				"Images"
-
-
-
-
-//d: Local home my top links
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_my_top				"My Top Links"
-
-
-//d: Local home Shortcut Keys
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_shortcut_keys				"Shortcut Keys"
-
-
-//d: Local home alt text selection key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_selection_key				"Selection key"
-
-
-//d: Local home selection key label
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_selection_key_label			"Open link, or start entering text in a form input field" 
-
-
-//d: Local home label c key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_c_key_label				"If more than one window is open, closes the current window"
-
-
-
-//d: Local home label 1 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_1_key_label				"Show bookmarks"
-
-
-//d: Local home label 2 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_2_key_label				"Text search in current page"
-
-
-
-//d: Local home label 3 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_3_key_label				"Back one page"
-
-
-//d: Local home label 5 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_5_key_label				"List windows"
-
-
-//d: Local home label 8 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_8_key_label				"Show Page Overview"
-
-
-
-//d: Local home label 9 key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_9_key_label				"Go to address"
-
-
-
-//d: Local home label star key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_star_key_label				"Zoom images out"
-
-//d: Local home label hash key
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_hash_key_label				"Zoom images in"
-
-//d: Local home shortcut keys note
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_note				"Note"
-
-//d: Local home shortcut keys unavailable
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_shortcut_unavailable				"Shortcut keys not available while entering text"
-
-//d: Local home browser forum title
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_browser_forum				"Browser Forum"
-
-//d: Local home join discussion label 1
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_join_discussion_1			"Join the discussion at"
-
-//d: Local home join discussion label 2
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_join_discussion_2			"the S60 user community forum!"
-
-//d: Local home unused key label
-//l: none
-//w:
-//r: 3.1
-#define qtn_lhp_unused_key_label			"Not used" 
-
--- a/browserui/browser/loc/Feeds.loc	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,552 +0,0 @@
-/*
-* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Localized strings.
-*
-*/
-
-
-//  APPLICATION INFORMATION
-
-/*  Application related                                                 */
-/* -------------------------------------------------------------------- */
-//d:application name
-//l:list_single_large_graphic_pane_t1
-//w:
-//r:3.0
-#define qtn_apps_feeds_list      "Web Feeds"
-//d:application name
-//l:cell_app_pane_t1
-//w:
-//r:3.0
-#define qtn_apps_feeds_grid      "Web Feeds"
-
-
-/*  Options Menu                                                        */
-/* -------------------------------------------------------------------- */
-//d: Menu text to update the selected feed.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_feeds_update "Update"
-
-//d: Menu text to update all feed.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_feeds_update_all "Update All"
-
-//d: Menu text for the manage sub-menu
-//l:list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-#define qtn_feeds_manage "Manage"
-
-//d: Menu text to open the associated web page in the browser.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_feeds_open_full_story "Open Full Story"
-
-
-/*  Manage Sub-Menu                                                     */
-/* -------------------------------------------------------------------- */
-//d: Menu text to create a new feed.
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_new_feed "Add feed"
-
-//d: Menu text to edit the current feed.
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_edit "Edit feed"
-
-/*  Info Sub-Menu                                                       */
-/* -------------------------------------------------------------------- */
-//d: Menu text to view the about info.
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_about "About"
-
-
-/*  Folder View                                                         */
-/* -------------------------------------------------------------------- */
-//d: The title of the folder-view when the top-level folder is showing.
-//l:title_pane_t2/opt9
-//w:
-//r:3.0
-#define qtn_feeds_folder_view_title "Web Feeds"
-
-/* -------------------------------------------------------------------- */
-//d: The text displayed in the folder view when there are no feeds or folders.
-//l:main_list_empty_pane
-//w:
-//r:3.1
-#define qtn_feeds_no_feeds "No Web Feeds"
-
-/*  Feeds View                                                          */
-/* -------------------------------------------------------------------- */
-//d: The text string at the end of a feed that's associated with the
-//d: item's full story -- the browser is launched when this text is selected.
-//l:None
-//w:
-//r:3.0
-#define qtn_feeds_feeds_view_see_full_story "See full story"
-
-/* -------------------------------------------------------------------- */
-//d: The default title of enclosures.  The title is used to display the
-//d: the enclosure in content area of the Feeds View.
-//l:None
-//w:
-//r:3.1
-#define qtn_feeds_feeds_view_enclosure "Podcast"
-
-
-// -----------------------------------------------------------------
-// Touch Toolbar Button strings
-// -----------------------------------------------------------------
-
-//---------------------------------
-// Feeds Folder View Toolbar Strings
-//---------------------------------
-// Update Selected Feed
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_folder_update_selected_tt            "Update Selected Feed"
-
-// Update All Feed
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_folder_update_all_tt                 "Update All Feeds"
-
-// Open into article listing view
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_folder_open_tt                       "Open into article listing view"
-
-
-//---------------------------------
-// Feeds Topic View Toolbar Strings
-//---------------------------------
-// Update Feed
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_topic_update_tt                      "Update Feed"
-
-// Back to Page
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_topic_back_to_page_tt                "Back to Page"
-
-// Open into detail view
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_topic_open_tt                        "Open into detail view"
-
-//---------------------------------
-// Feeds Feed View Toolbar Strings
-//---------------------------------
-// Previous Article
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_feed_previous_article_tt             "Previous Article"
-
-// Show Full Story
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_feed_show_full_story_tt              "Show Full Story"
-
-// Next Article
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_feeds_feed_next_article_tt                 "Next Article"
-
-
-/*  Wait Dialog                                                         */
-/* -------------------------------------------------------------------- */
-//d: Information text when a feed is updating.
-//l:popup_note_wait_window
-//w:
-//r:3.0
-#define qtn_feeds_updating_wait_dialog_text "Updating"
-
-//d: Information text when a feed is opening.
-//l:popup_note_wait_window
-//w:
-//r:5.0
-#define qtn_feeds_opening_wait_dialog_text "Opening"
-/* -------------------------------------------------------------------- */
-//d: Information text when all feeds are updating.
-//l:popup_note_wait_window
-//w:
-//r:3.1
-#define qtn_feeds_updating_all_wait_dialog "Updating all feeds"
-
-
-/*  Delete Dialog                                                       */
-/* -------------------------------------------------------------------- */
-//d: Information text when the user chooses to delete a feed.
-//d: The text follows this form, "Delete %U?", where %U is
-//d: the name of the feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_delete_dialog_text "Delete %U?"
-
-//d: Information text when the user chooses to delete multiple feeds.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_delete_multiple_dialog_text "Delete selected feeds?"
-
-
-/*  Edit/Add Feed/Folder Dialog                                             */
-/* -------------------------------------------------------------------- */
-//d: Header test for the feed's name.
-//l:list_double_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_name_dialog_text "Title"
-
-//d: Header test for the feed's url.
-//l:list_double_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_url_dialog_text "Address"
-
-//d: Text displayed in the New feed dialog.
-//l:list_single_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_new_feed_item "New feed"
-
-//d:Header text for Automatic updating of web feeds
-//l:list_setting_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_autoupdating_text "Automatic updating"
-
-//d: Selectable text for the Automatic updating setting
-//d: If Off is selected, automatic updating does not occur
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_autoupdating_off "Off"
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 15 minutes
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_15min "Every 15 minutes"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every hour
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_hourly "Every hour"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 4 hours
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_4hours "Every 4 hours"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done daily
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_daily "Every day"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done weekly
-//l: list_set_graphic_pane_t1
-//w:
-//r:7.1
-//
-#define qtn_feeds_val_updating_interval_weekly "Every week"
-
-
-//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
-//d: noting that turning the feature on may cost them money
-//l: popup_note_window
-//w:
-//r:7.1
-//
-#define qtn_feeds_new_feed_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
-
-
-/* Import/Export Feed Strings                                           */
-/* -------------------------------------------------------------------- */
-
-
-
-//d: Menu text to import selected or marked feeds from a file
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 3.2
-#define qtn_options_import_feeds    "Import Feeds"
-
-//d: Popup waiting note when searching for feed files
-//d: stored on the phone
-//l: popup_note_wait_window
-//w:
-//r: 3.2
-#define qtn_wait_searching_for_feeds    "Searching for feeds..."
-
-//d: When the search for feeds has completed, a header
-//d: over the list of results
-//l: heading_pane_t1
-//w:
-//r: 3.2
-#define qtn_popup_title_feeds_files_found    "Feeds Files Found:"
-
-//d: When the search for feeds has completed, if no
-//d: feeds are found on the device, this error is shown
-//l: popup_note_window/opt1
-//w:
-//r: 3.2
-#define qtn_feeds_no_feeds_found_on_device    "No feeds found on device"
-
-//d: A wait screen for when the phone is importing a feed file
-//l: popup_note_wait_window
-//w:
-//r: 3.2
-#define qtn_wait_importing_feeds    "Importing Feeds..."
-
-//d: Menu text to export selected or marked feeds to a file
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 3.2
-#define qtn_options_export_feeds    "Send"
-
-//d: When exporting some feeds to a file, header on a popup
-//d: asking the user to name the file
-//l: popup_query_data_window/opt1
-//w:
-//r: 3.2
-#define qtn_feeds_name_exported_file    "Name the file to be sent:"
-
-//d: When exporting some feeds to a file, if the
-//l: popup_note_window
-//w:
-//r: 3.2
-#define qtn_feeds_export_opml_title_needed  "You must enter a name for the file."
-
-//d: Wait window as feeds are exported into a file
-//l: popup_note_wait_window
-//w:
-//r: 3.2
-#define qtn_wait_processing "Processing..."
-
-//d: Confirmation to import feeds from an OPML file
-//d: that has been downloaded or received from another application
-//d: The %U referes to the filename of the OPML file
-//l: popup_note_window
-//w:
-//r: 3.2
-#define qtn_feeds_query_import_now  "Import feeds from %U now?"
-
-
-/*  Error Strings                                                       */
-/* -------------------------------------------------------------------- */
-//d: Information text for the error dialog.  Displayed when the user
-//d: doesn't include a title when editing or adding a feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_title_needed "Title needed"
-
-//d: Information text for the error dialog.  Displayed when the user
-//d: doesn't include a url when editing or adding a feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_address_needed "Address needed"
-
-//d: Information text for the error dialog.  Displayed when the user
-//d: enters a single quote character anywhere in the feed title.
-//l:popup_note_window
-//w:
-//r:7.0
-#define qtn_feeds_title_single_quote_not_allowed "Single quote character (’) is not allowed in the title"
-
-//d: Information text for the error dialog.  Displayed when the user
-//d: tries to add the same feed a second time.
-//d: %U is the name of the feed.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_duplicate_feed_error_dialog_text "%U already subscribed"
-
-//d: Information text for the error dialog.  Displayed when the user
-//d: tries to add/edit a feed that has a non-unique title.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_duplicate_title_error_dialog_text "Title must be unique"
-
-//d: Information text for the error dialog.  Displayed when a requested
-//d: feed is malformed(corrupted/empty).
-//l:popup_note_window
-//w:
-//r:5.0
-#define qtn_feeds_malformed_dialog_text "Feed cannot be processed"
-
-//d: Information text for the main pane.  Displayed when a requested
-//d: feed couldn't be fetched from the network.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_network_error_main_pane_text "Couldn't update feed"
-
-//d: Information text for the main pane.  Displayed when a requested
-//d: feed is malformed.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_malformed_main_pane_text "Can't process feed"
-
-//d: Information text for the main pane.  Displayed when a requested
-//d: feed is in an unsupported format.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_unsupported_main_pane_text "Feed format is not supported"
-
-//d: Information text for the main pane.  Displayed when a requested
-//d: feed has invalid URL.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_invalid_url_main_pane_text "Invalid web address"
-
-//d: Information text for the main pane.  Displayed when a requested
-//d: feed fails for some other reason.
-//l:list_double_graphic_pane_t2
-//w:
-//r:5.0
-#define qtn_feeds_general_error_main_pane_text "An unkown error occurred"
-
-//d: Information text for the error dialog.  Displayed when a requested
-//d: feed fails for some other reason.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_general_error_dialog_text "An unkown error occurred"
-
-//d: Information text for the error dialog. Displayed when an OPML file
-//d: somehow gets deleted after it is found and displayed in the list, and the 
-#define qtn_feeds_malformed_dialog_text "Can't process feed"
-
-//d: Information text for the error dialog.  Displayed when a requested
-//d: feed is in an unsupported format.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_unsupported_dialog_text "Feed format is not supported"
-//d: user then tries to select and import it.
-//l:popup_note_window
-//w:
-//r:7.1
-#define qtn_feeds_file_not_found_dialog_text "File Not Found"
-
-/*  Misc Strings                                                        */
-/* -------------------------------------------------------------------- */
-//d: Text displayed in the Topic-View when an item's name isn't available.
-//l:list_single_heading_pane_t1
-//w:
-//r:3.0
-#define qtn_feeds_unnamed_item "Unnamed item"
-
-
-/*  Strings copied from wmlbrowser.loc                                  */
-/* -------------------------------------------------------------------- */
-//d:DO element menu item
-//l:list_single_popup_submenu_pane_t1
-//
-#define text_wml_option_back      "Back"
-
-//d:Menu item in Bookmarks View: activate highlighted bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmlbm_load_bm         "Activate"
-
-// WmlBrowser Settings/Session listbox items
-
-//d:Browser settings session list item texts
-//l:heading_pane_t1
-//
-#define qtn_wmls_session_info             "Session info"
-
-//d:Format title text in session view.
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_ap              "Access point name:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_bearer_type           "Bearer type:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_max_speed            "Max. connection speed:"
-
-//d:Text in About Product information note's heading
-//l:heading_pane_t1
-#define qtn_browsers_title_about "Name and Version"
-
-//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
-//l:popup_info_list_pane_t1
-#define qtn_browsers_about_version_label "Version: %0U (%1U)"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_browser_set_bearer_hscsd            "HSCSD"
-
-//d: Information text for the error dialog.  Displayed when a requested
-//d: feed couldn't be fetched from the network.
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_feeds_network_error_dialog_text "Couldn't update feed"
-
-
--- a/browserui/browser/loc/WmlBrowser.loc	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3229 +0,0 @@
-/*
-* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     This is a localisation file.
-*     A .loc file is the one and only place where the logical strings
-*     to be localised are defined.
-*
-*
-*/
-
-
-
-//  LOCALISATION STRINGS
-
-//d:Information note text
-//l:popup_note_window
-//
-#define qtn_wml_informationnote_unable_to_retrieve    "Unable to retrieve"
-
-//d:Move - cancel softkey, Softkey used when moving the bookmark to folder
-//l:control_pane_t1/opt7
-//
-#define text_softkey_move            "Move"
-
-//d:application name
-//l:list_single_large_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_apps_browserng_list      "BrowserNG"
-
-//d: application name
-//l: cell_app_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_apps_browserng_grid      "BrowserNG"
-
-
-//d:Confirmation query text on exiting Browser
-//l:popup_note_window
-//
-#define text_wml_exit_confirm     "Quit browsing?"
-
-// strings for main menu for multipurpose browser display
-
-//d:Open selected deck
-//d:Open focused anchor node.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_open       "Open"
-
-
-//d:Menu item for DO elements' parent menu text
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_list_history      "History"
-
-
-//d:Menu item for DO elements' parent menu text
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_srv_opts     "Service options"
-
-//d:Menu item to get access to the bookmarks
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_wml_faves        "Bookmarks"
-
-//d:Menu item to
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browser_list_close        "Close browser"
-
-//d: main menu item to rotate the display orientation
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_rotate_display   "Rotate display"
-
-
-//d:Menu access to navigation submenu
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wml_list_navigation     "Navigation functions"
-
-
-//d:Menu item to change connection
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_change_connection "Change connection"
-
-//d:Menu item brings up input field for custom URL address
-//d:Menu item in bookmark favorites view
-//l:list_single_pane_t1_cp2
-//
-#define text_wml_option_goto      "Go to address"
-
-//d:Text in middle soft key (goto address function)
-//l:control_pane_t3/opt7
-//w:
-//r:3.2
-#define qtn_browser_msk_goto    "Go to"
-
-//d:Menu item to create a bookmark
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-//
-#define qtn_wmlbm_fav_saveas_bm       "Add bookmark"
-
-//d:SubMenu item to create a bookmark
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:5.0 & 3.2.3
-//
-#define qtn_wmlbm_fav_saveas_bm_sm       "Add bookmark"
-
-//d:Menu item to show the zoom slider
-//l:list_single_pane_t1_cp2
-//r:5.0
-//
-#define qtn_wml_list_zoom_slider_show       "Show Zoom Slider"
-
-//d:Menu item to hide the zoom slider
-//l:list_single_pane_t1_cp2
-//r:5.0
-//
-#define qtn_wml_list_zoom_slider_hide       "Hide Zoom Slider"
-
-//d:Menu item to reload currently showed card
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_reload       "Reload"
-
-//d:Menu item the user can get different kind of information
-//d:about service in use
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wml_option_infoview     "Info"
-
-//d:Menu item to terminate network connection
-//d:about service in use
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_dconn        "Disconnect"
-
-//d:Menu item to load and show unloaded image
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_fetch_img      "Show Images"
-
-//d:Menu item to entirely clear the cache
-//l:list_single_popup_submenu_pane_t1
-//
-#define text_wml_option_empty_cache   "Clear cache"
-
-//d:Menu item to save current card
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_save_pgs     "Save"
-
-//d:Menu item to view/change browsing settings
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmls_browser_opt_sett   "Preferences"
-
-//d:Browser main menu
-//l:list_single_pane_t1_cp2
-//
-#define text_wml_option_help      "Help"
-
-//d:Browser main menu
-//l: list_single_pane_t1_cp2/opt3
-//
-#define qtn_browser_options_help     "Help"
-
-//d:Options menu item to open Downloads List.
-//l:list_single_pane_t1_cp2
-//w:
-//
-#define qtn_browser_list_downloads "Downloads"
-
-//d:Browser main menu
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_view_images    "View Images"
-
-//d:Menu access to tools submenu
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_browser_list_folder_tools       "Tools"
-
-//d:Strings for page info submenu
-//l:list_single_popup_submenu_pane_t1
-#define qtn_browser_list_page_info  "Page info"
-
-//d:Strings for Info submenu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_opt_smenu_session   "Session"
-
-//d:Strings for Info submenu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_opt_smenu_security    "Security"
-
-//d:open new page query
-//l:popup_note_window
-//
-#define qtn_wml_query_dwnl         "Downloading ongoing. Cancel previous downloading?"
-
-//d:External app started browser with an invalid bookmark id
-//l:popup_note_window
-//
-#define qtn_wml_bookmark_not_found                           "Bookmark does not exist!"
-
-//d:Information note text
-//l:popup_note_window
-//
-#define text_wml_cache_emptied_note   "Cache cleared"
-
-//d:Text to display if the current access point is invalid while editing bookmark
-//l:list_single_heading_pane_t1
-#define qtn_wmlbm_text_ap_invalid             "Invalid"
-
-
-//d:Error note message: Invalid accesspoint is defined in a bookmark
-//l:popup_note_window
-#define qtn_wml_info_invalid_ap   "Invalid access point. Edit bookmark."
-
-//d:Error note message: Invalid accesspoint is defined in a saved deck
-//l:popup_note_window
-#define qtn_wml_confquery_invalid_ap  "Invalid access point. Use default?"
-
-//d:Command text associated to a softkey in the control pane.
-//d:Go to root level (folder).
-//l:control_pane_t1/opt7
-//
-#define text_softkey_root_level         "Root level"
-
-// Authentication Dialog
-
-//d:label for bookmark name query
-//l:popup_query_data_window
-#define qtn_wml_query_bookmark_title          "Enter bookmark name"
-//d:label for saved deck name query
-//l:popup_query_data_window
-#define qtn_wml_query_savedpage_title          "Enter name for saved page"
-
-//d:title of bookmark favorites view
-//l:title_pane_t2/opt9
-//
-#define text_wml_option_bookmarks   "Bookmarks"
-
-
-//d:Empty list text in Bookmarks View (displayed if no bookmarks exist)
-//l:main_list_empty_pane
-//
-#define text_wml_no_bookmarks     "No bookmarks"
-
-//d:Prompt for renaming a saved deck in Saved Decks View.
-//l:popup_query_data_window
-//
-#define qtn_wml_prmpt_edit_name         "Edit name:"
-
-//d:Information note text in Bookmarks View: could not move items due to name collision
-//d:Information note text in Saved Decks View: could not move items due to name collision
-//l:popup_note_window
-//
-#define qtn_fldr_names_in_use_rename    "Some of the names are already in use. Please rename those items"
-
-//d:Menu item in Bookmarks View: create new bookmark
-//l:list_single_pane_t1_cp2
-//
-#define text_wmlbm_option_enter_new     "Add bookmark"
-
-//d:Menu item in Bookmarks View: activate highlighted bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmlbm_load_bm         "Activate"
-
-//d:Menu item in Bookmarks View: edit highlighted bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmlbm_edit_bm         "Edit bookmark"
-
-
-//d:Menu item in Bookmarks View: set prefered bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_list_set_as_preferred         "Set as preferred"
-
-//d:Menu item in Bookmarks View: set un prefered bookmark
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_list_unset_from_preferred         "Unset from preferred"
-
-//d:Menu access to bookmark management submenu (Bookmarks view)
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wmlbm_manage_bm         "Edit"
-
-//d:Bookmark Edit Form title editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_bmtitle        "Title"
-
-//d:Bookmark Edit Form URL editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_bmadrs         "Address"
-
-//d:Bookmark Edit Form Access Point selector label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_wapap          "Access point"
-
-//d:Name for "Default" Access Point
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmlbm_default_wapap         "Default"
-
-//d:Text to display if there are no Access Points
-//l:list_single_heading_pane_t1
-//
-#define qtn_wmlbm_text_ap_none          "None"
-
-//d:Bookmark Edit Form user name editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_username       "User name"
-
-//d:Bookmark Edit Form password editor label.
-//l:list_double_heading_pane_t1
-//
-#define qtn_wmlbm_flabel_passwd         "Password"
-
-//d:Error note message: attempt to select AP when no such exist.
-//l:popup_note_window
-//
-#define qtn_wmlbm_info_no_valid_ap      "No valid access point available. Please add one to preferences."
-
-//d:Error note message: database is inaccessible.
-//l:popup_note_window
-//
-#define qtn_wmlbm_err_db_inaccessible    "Cannot access\ndatabase.\nTry again later."
-
-//d:Info note message: bookmark was saved.
-//l:popup_note_window
-//
-#define text_wml_bm_saved               "Bookmark saved"
-
-//d:Error note message: bookmark was not saved.
-//l:popup_note_window
-//
-#define qtn_wmlbm_bm_not_saved          "Bookmark not saved"
-
-//d:Default name for new bookmark.
-//l:list_single_heading_pane_t1
-//
-#define qtn_wmlbm_default_bm_title      "New bookmark"
-
-//d:Left softkey: (accept typing and activate typed URL address)
-//l:control_pane_t1/opt7
-//
-#define qtn_wml_softk_go                "Go to"
-
-//d:Confirmation query prompt if no URL specified for a bookmark.
-//l:popup_note_window
-//
-#define qtn_wmlbm_query_address         "Address needed.\nAdd an address?"
-
-//d:Information note text in Bookmarks View: name is conflicting with existing name.
-//d:Information note text in Saved Decks View: name is conflicting with existing name.
-//l:popup_note_window
-//
-#define qtn_wmlbm_name_already_used     "Name already in use"
-
-//Saved Pages.
-
-//d:Confirmation query text in Bookmarks View
-//d:Confirmation query text in Saved Decks View
-//l:popup_note_window
-//
-#define qtn_wml_quest_overwrite         "Page already exists\Overwrite?"
-
-//d:Menu item in Saved Decks View
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_list_refresh        "Refresh"
-
-//d:Menu access to saved page management submenu (Saved Pages view)
-//l:list_single_pane_t1_cp2/opt3
-//
-#define qtn_wml_list_manage_sp         "Manage saved pages"
-
-//d:Title for Saved Decks View
-//l:title_pane_t2/opt9
-//
-#define qtn_wml_title_svd_pgs           "Saved pages"
-
-//d:Empty list text for Saved Decks View: displayed if there are no saved pages.
-//l:main_list_empty_pane
-//
-#define qtn_wml_no_svd_pgs              "No saved pages"
-
-//d:Information note text in Saved Decks View: page saved
-//l:popup_note_window
-//
-#define qtn_wml_conf_pages_saved        "Page saved"
-
-//d:Information note text in Saved Decks View
-//l:popup_note_window
-//
-#define qtn_wml_conf_pages_refreshed        "Page refreshed"
-
-//d: Wait note while refreshing a saved deck
-//l: popup_note_wait_window
-//
-#define qtn_wml_page_refreshing "Refreshing page"
-
-//d:Menu item in Bookmarks View: go back to Browser View
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_wml_list_ret_page           "Back to page"
-
-//
-//  Settings texts
-//
-
-
-//d:Browser page info title text
-//l:heading_pane_t1
-#define qtn_browser_query_current_page  "Current page"
-
-
-//d: Browser page info item text
-//l:popup_info_list_pane_t1
-#define qtn_browser_query_current_page_url  "URL"
-
-
-// WmlBrowser Settings/Session listbox items
-
-//d:Browser settings session list item texts
-//l:heading_pane_t1
-//
-#define qtn_wmls_session_info             "Session info"
-
-//d:Format title text in session view.
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_ap              "Access point name:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_bearer_type           "Bearer type:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmls_ses_view_max_speed            "Max. connection speed:"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_set_bearer_data_call          "Data call"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_set_bearer_packet_data        "Packet data"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_browser_set_bearer_hscsd            "HSCSD"
-
-//d:Browser settings session list item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_set_auto_detect             "Auto detect"
-
-//d:Browser security item texts
-//l:heading_pane_t1
-//
-#define qtn_wmlsec_security_info        "Security info"
-
-//d:Browser security item texts
-//l:heading_pane_t1
-//
-#define qtn_wmlsec_cert_details       "Certificate details"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_serialno     "Serial number:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_contype       "Connection:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_issuer              "Issuer:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_cert_owner      "Owner:\n%U"
-
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_valid_from      "Valid from:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_valid_to      "Valid to:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_fingerprint     "Fingerprint:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_server        "Server authentication:\n%U"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_con_secur     "Secure"
-
-//d:Browser security item texts
-//l:popup_info_list_pane_t1
-//
-#define qtn_wmlsec_ses_info_con_unsec     "Unsecure"
-
-//d: A list box item referring to settings categorised as Page
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_general       "General"
-
-//d: A list box item referring to settings categorised as General
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_page      "Page"
-
-//d: A list box item referring to settings categorised as Privacy
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_privacy       "Privacy"
-
-//d: When the General Settings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_general  "General Settings"
-
-//d: When the PageSettings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_page     "Page settings"
-
-//d: When the Privacy Settings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_privacy      "Privacy settings"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_local_set_default_ap       "Default access point"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:2.8
-//
-#define qtn_browsers_sett_autoload_objects        "Autoload images and objects"
-
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_wmls_local_set_pageoverview        "Mini map"
-
-//d: Selectable text for the Page Overview setting
-//d: Page Overview is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_pageoverview_on "On"
-
-//d: Selectable text for the Page Overview setting
-//d: Page Overview is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_pageoverview_off "Off"
-
-//d:Browser settings main list item texts
-//d:Back list is the History list
-//l:list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_back_list        "Back list"
-
-//d: Selectable text for the Back list setting
-//d: If On is selected, back list is shown when SK2 Back
-//d: is pressed in page view.
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_back_list_on "On"
-
-//d: Selectable text for the Back list setting
-//d: If Off is selected, back list is not shown when SK2 Back
-//d: is pressed in page view.
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_back_list_off "Off"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_auto_refresh        "Automatic page refresh"
-
-//d: Selectable text for the Automatic page refresh setting
-//d: Automatic page refresh is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_auto_refresh_on "On"
-
-//d: Selectable text for the Automatic page refresh setting
-//d: Automatic page refresh is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browsers_sett_val_auto_refresh_off "Off"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_all_small        "Smallest"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_smaller          "Small"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_normal           "Normal"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-
-#define qtn_xhtml_settings_larger           "Large"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_xhtml_settings_all_large        "Largest"
-
-//d: Browser character encoding in browser settings: ISO 8859-2
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_2 "ISO 8859-2"
-
-//d: Browser character encoding in browser settings: ISO 8859-4
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_4 "ISO 8859-4"
-
-//d: Browser character encoding in browser settings: ISO 8859-5
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_5 "ISO 8859-5"
-
-//d: Browser character encoding in browser settings: ISO 8859-7
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_7 "ISO 8859-7"
-
-//d: Browser character encoding in browser settings: ISO 8859-9
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_charenc_iso_8859_9 "ISO 8859-9"
-
-
-//d: Browser default character encoding in browser settings: ISO 8859-6 (Arabic)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_88596 "Arabic (ISO)"
-
-
-//d: Browser default character encoding in browser settings: Windows-1256 (Arabic)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1256 "Arabic (Windows)"
-
-
-//d: Browser default character encoding in browser settings: ISO 8859-8 (Hebrew)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_88598 "Hebrew (ISO-Visual)"
-
-
-//d: Browser default character encoding in browser settings: ISO 8859-8-i (Hebrew)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_88598_i "Hebrew (ISO-Logical)"
-
-//d: Browser default character encoding in browser settings: Windows-1255 (Hebrew)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1255 "Hebrew (Windows)"
-
-//d: Browser default character encoding in browser settings: Windows-1250
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1250 "Windows-1250"
-
-//d: Browser default character encoding in browser settings: Windows-1251
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1251 "Windows-1251"
-
-//d: Browser default character encoding in browser settings: Windows-1253
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1253 "Windows-1253"
-
-//d: Browser default character encoding in browser settings: Windows-1254
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1254 "Windows-1254"
-
-//d: Browser default character encoding in browser settings: Windows-1257
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1257 "Windows-1257"
-
-//d: Browser default character encoding in browser settings: Windows-1258
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_1258 "Windows-1258"
-
-//d: Browser default character encoding in browser settings: Automatic
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_automatic "Automatic"
-
-//d: Browser default character encoding in browser settings: Tis-620
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_tis_620 "Thai"
-
-
-//d: Browser default character encoding in browser settings: Windows-874
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_windows_874 "Thai (Windows-874)"
-
-
-//d: Browser default character encoding in browser settings: Shift_JIS
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_shift_jis "shift_jis"
-
-//d: Browser default character encoding in browser settings: euc-jp
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_euc_jp "euc-jp"
-
-//d: Browser default character encoding in browser settings: iso-2022-jp
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iso_2022_jp "iso-2022-jp"
-
-//d: Browser default character encoding in browser settings: Ucs-2
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_ucs_2 "Unicode (ucs-2)"
-
-//d: Browser default character encoding in browser settings: KOI8-R
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_shift_koi8_r "KOI8-R"
-
-//d: Browser default character encoding in browser settings: KOI8-U
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_shift_koi8_u "KOI8-U"
-
-//d: Browser default character encoding in browser settings: ISCII
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_iscii "ISCII"
-
-//d: Browser default character encoding in browser settings: Korean (Euc-Kr)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_euc_kr "Korean (Euc-Kr)"
-
-//d: Browser default character encoding in browser settings: Korean (KSC5601)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_defenc_ksc_5601 "Korean (KSC5601)"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_save_receipt           "Save receipt"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_set_wallet_auto           "Automatic eWallet use"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_cookie_allow          "Allow"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_sett_cookie_reject         "Reject"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wtai_dtmf_alcon          "Always confirm"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wtai_dtmf_one            "Confirm once"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_save_to_notepad          "To notepad"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_save_not               "Never"
-
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wall_auto_on           "On"
-
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_wall_auto_off           "Off"
-
-
-// Settings Menu texts
-
-//d:Browser settings main menu
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wmls_local_set_opt_change   "Change"
-
-//d:Invalid certificate indicator dialog's message body
-//l:popup_query_wml_sign_window_2
-//
-// #define qtn_wmlsec_invalid_cert         "Server could not be authenticated\nReason:\n%U"
-
-//d:Certificate error: Server certificate not valid yet
-//l:popup_query_wml_sign_window_2
-//
-// #define text_wml_certificate_sc_not_val "Server certificate not valid yet"
-
-//d:Authentication of the WML card failed.
-//l:popup_note_window
-#define text_wml_auth_fail_retry_query  "Authorisation failed. Try again?"
-
-//d:if the secured connection established.
-//l:popup_note_window
-#define qtn_wmlsec_conn_secured         "Connection secured to %U"
-
-//d:when anonymous connection established to server
-//l:popup_note_window
-#define qtn_wmlsec_conn_sec_unk_serv    "Connection secured to unknown server"
-
-//d:Confirmation note text about the closure of the active connection
-//l:popup_note_window
-//
-#define qtn_ics_cnote_disconn_from_service        "Connection to service is closed"
-
-//d:Browser settings font size
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_pref_fontsize  "Font size"
-
-//d:Browser settings cookies
-//l:list_setting_pane_t1
-//
-#define qtn_wmls_sett_cookies       "Cookies"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_image_on "On"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_image_off    "Off"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_expand_on    "On"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//
-#define qtn_wmls_local_var_expand_off   "Off"
-
-//d:Confirmation query shown if the Search Menu item is selected, and the Search Web Setting value is empty
-//d: Accepting this query opens the search page setting for editing
-//l: popup_note_window
-#define qtn_browser_query_search_url  "Search page address is missing. Define now?"
-
-//d: Prompt dialog  shown to enter a url for the Search Page setting
-//l: popup_query_data_window
-#define qtn_wml_prompt_search_url  "Search page address"
-
-//d: Browser default character encoding in browser settings
-//l: list_setting_pane_t1
-//
-#define qtn_brow_sett_defenc "Default encoding"
-
-// Text used by Progress bar
-
-//d: Percent mark ("%") to be used in the progress bar to indicate the percentage of the data loaded at the moment.
-//d: %N is replaced by the actual percentage number.
-//l: none
-#define qtn_wml_unit_percent      "%N %"
-
-
-//d: Size of data in kilo bytes
-//d: text used by progress bar
-//l: none
-#define qtn_wml_unit_kb     "%N kB"
-
-//d: Size of data in mega bytes
-//d: text used by progress bar
-//l: none
-#define qtn_wml_unit_mb     "%U MB"
-
-//d: Browser default character encoding in browser settings: ISO 8859-1 (Latin 1)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_latin1 "Latin"
-
-//d: Browser default character encoding in browser settings: GB 2312 (Simplified Chinese)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_gb2312 "Simplified Chinese"
-
-//d: Browser default character encoding in browser settings: Big5 (Traditional Chinese)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_big5 "Traditional Chinese"
-
-//d: Browser default character encoding in browser settings: UTF-8 (Unicode)
-//l: list_set_graphic_pane_t1
-//
-#define qtn_brow_sett_defenc_utf8 "Unicode (UTF-8)"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_full_screen        "Full screen"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_full_screen_normal "Normal"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_full_screen_full_screen "Full screen"
-
-//d:Browser settings to display softkeys
-//l:list_setting_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_softkeys        "Display softkeys"
-
-//d: Selectable text for the softkey setting
-//d: Will display the softkeys if on
-//l: set_value_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_softkeys_on "On"
-
-//d: Selectable text for the softkey setting
-//d: Will not display the softkeys if off
-//l: set_value_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_softkeys_off "Off"
-
-//d:Browser settings main list item texts
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_search        "Search page address"
-
-//d:Browser settings main list item texts
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_url_suffix        "URL Suffix"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_media_volume       "Media volume"
-
-//d:Browser settings selectable item texts volume muted
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_muted  "Muted"
-
-//d:Browser settings selectable item texts volume level 1
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_1  "Level 1"
-
-//d:Browser settings selectable item texts volume level 2
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_2  "Level 2"
-
-//d:Browser settings selectable item texts volume level 3
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_3  "Level 3"
-
-//d:Browser settings selectable item texts volume level 4
-//l:list_set_graphic_pane_t1
-//
-#define qtn_browsers_sett_volume_4  "Level 4"
-
-//d: Setting for showing or hiding security related warnings
-//l: list_setting_pane_t1
-#define qtn_browser_sett_security  "Security notifications"
-
-//d: Show security related warnings
-//l: list_set_graphic_pane_t1
-#define qtn_browser_sett_item_show_all "Show"
-
-//d: Hide security related warnings
-//l: list_set_graphic_pane_t1
-#define qtn_browser_sett_item_hide_all "Hide"
-
-//d: Setting for open downloading files progressively
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_open_loading  "Open while loading"
-
-//d: Automatically open downloaded files progressively
-//l: list_set_graphic_pane_t1
-#define qtn_brow_sett_open_downloads_yes          "Yes"
-//
-#define qtn_browser_list_check_for_updates          "Update Browser"
-
-//d:Browser main menu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_browser_version         "Browser Version"
-
-//d:Browser main menu
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_browser_help    "Browser Help"
-//
-#define qtn_brow_sett_product_update_manual "Manual"
-#define qtn_brow_sett_product_update_auto "Automatic"
-
-//d: Not automatically open downloaded files progressively
-//l: list_set_graphic_pane_t1
-#define qtn_brow_sett_open_downloads_no "No"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
- //
-#define qtn_wmls_local_set_imei_notif   "IMEI notification"
-
-//d:Enables IMEI sending
-//d:Browser settings selectable item text
-//l:list_set_graphic_pane_t1
-#define qtn_wmls_local_set_imei_notif_enabled   "Enabled"
-
-
-//d:Disables IMEI sending
-//d:Browser settings selectable item text
-//l:list_set_graphic_pane_t1
-#define qtn_wmls_local_set_imei_notif_disabled  "Disabled"
-
-
-//d: Boomark folder "Download applications"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_applications  "Download applications"
-
-//d: Boomark folder "Download images"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_images        "Download images"
-
-//d: Boomark folder "Download tones"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_tones         "Download tones"
-
-//d: Boomark folder "Download videos"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_videos        "Download videos"
-
-//d: Boomark folder "Download skins"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_skins         "Download skins"
-
-//d: Boomark folder "Download Music"
-//l: list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_download_music         "Download music"
-
-//d: Boomark folder title "Download applications"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_applications  "Download applications"
-
-//d: Boomark folder title "Download images"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_images        "Download images"
-
-//d: Boomark folder title "Download tones"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_tones         "Download tones"
-
-//d: Boomark folder title "Download videos"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_videos        "Download videos"
-
-//d: Boomark folder title "Download skins"
-//l: title_pane_t2/opt9
-//
-#define qtn_browserbm_folder_title_download_skins         "Download skins"
-
-//d: Boomark folder title "Download music"
-//l: title_pane_t2/opt9
-//w:
-//r:3.0
-//
-#define qtn_browserbm_folder_title_download_music         "Download music"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_adaptive_bookmarks     "Recent URLs"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_adaptive_bookmarks_on    "On"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_adaptive_bookmarks_hide_folder    "Hide folder"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_adaptive_bookmarks_off    "Off"
-
-
-//d:Empty list text for Recent URLs Folder: displayed if there are no Recent URLs.
-//l:main_list_empty_pane
-//
-#define qtn_browserbm_no_adaptive_bookmarks              "No recent URLs"
-
-//d:Text for Recent URLs Folder in Bookmarks view.
-//l:list_single_graphic_pane_t1
-//
-#define qtn_browserbm_folder_adaptive_bookmarks              "Recent URLs"
-
-//d: Title of Recent URLs view
-//l: title_pane_t2/opt9
-//w:
-//r:3.2
-//
-#define qtn_browserbm_title_adaptive_bookmarks                "Recent URLs"
-
-//d: Confirmation query shown before deleting all  Recent URLs.
-//l:popup_note_window
-//
-#define qtn_browserbm_query_delete_adap_bookmarks              "Delete all recent URLs?"
-
-//d: Options menu item for copying Recent URLs to Bookmarks Folder.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_options_copy_to_bookmarks              "Copy to bookmarks"
-
-//d: Options submenu item for copying Recent URLs to Bookmarks Folder.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browserbm_options_copy_to_bookmarks_sm            "Copy to bookmarks"
-//d: Options menu item for deleting all Recent URLs.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_browserbm_options_clear_adaptive_bookmarks              "Clear Recent URLs"
-
-//d: Confirmation note shown when 1 Adaptive Bookmark has been copied to root level of Bookmarks View.
-//l:popup_note_window
-//
-#define qtn_browserbm_note_adaptive_bookmark_copied              "Copied to bookmarks"
-
-//d: Confirmation note shown when more than one Recent URLs (%N is the number of Recent URLs) has been copied to root level of Bookmarks View.
-//l:popup_note_window
-//
-#define qtn_browserbm_note_adaptive_bookmarks_copied              "%N items copied to bookmarks"
-
-//d: Options menu item for restarting the browser
-//l:list_single_pane_t1_cp2
-//
-#define qtn_wml_opt_restart              "Restart"
-
-//d:Exit confirmation in browser settings
-//l:list_setting_pane_t1
-//
-#define qtn_wml_setting_exit_confirm      "Exit confirmation"
-
-//d:Selectable item texts for Exit confirmation setting
-//d:Activate the exit confirmation prompt.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_exit_on    "On"
-
-//d:Selectable item texts for Exit confirmation setting
-//d:Deactivate the exit confirmation prompt.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_exit_off    "Off"
-
-//d:Send referrer heading in browser settings
-//l:list_setting_pane_t1
-#define qtn_wml_setting_referrer    "Send referrer heading"
-
-//d:Selectable item texts for Send referrer setting.
-//d:Activate the sending of the referrer header.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_refer_on    "On"
-
-//d:Selectable item texts for Send referrer setting.
-//d:Deactivate the sending of the referrer header.
-//l:list_set_graphic_pane_t1
-#define qtn_wml_setting_refer_off   "Off"
-
-//d: This is a setting item which controls
-//d: whether external style sheets are fetched
-//l: list_setting_pane_t1
-#define qtn_browsers_sett_external_css          "Rendering quality"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_scripting        "Java/Ecma Script"
-
-//d: Enables Java and ECMA scripts to be executed in browser
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_scripting_enable        "Enable"
-
-//d: Disables Java and ECMA scripts to be executed in browser
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_scripting_disable        "Disable"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//r: 3.2
-//
-#define qtn_browsers_sett_scriptlog        "Javascript notifications"
-
-//d: Disables Java and ECMA script logging output in browser
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_disable        "No notification"
-
-//d: Enables Java and ECMA script log to be output to a log file
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_to_file        "Log to file"
-
-//d: Enables Java and ECMA script log to be output to GUI console
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_to_console        "Pop-up notes"
-
-//d: Enables Java and ECMA script log to be output to both GUI console and file
-//l:list_set_graphic_pane_t1
-//r: 3.2
-#define qtn_browsers_sett_scriptlog_to_console_file        "Log to file and as pop-up notes"
-
-
-//d:Menu item to clear all window(s) page script logging
-//l: list_single_popup_submenu_pane_t1
-//r: 3.2
-//
-#define qtn_browser_list_clear_scriptlog   "Clear Javascript Log"
-
-//d: Browser Privacy main menu
-//l: list_single_pane_t1_cp2/opt3
-// will contain 5 submenu options
-#define qtn_browser_list_privacy             "Privacy"
-
-
-//d:Menu item to clear all privacy related data (cache, cookies, history, form & password data)
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_privacy_clear_all   "Clear all privacy data"
-
-
-//d:Menu item to clear all the stored cookies
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_delete_cookies   "Clear cookies"
-
-//d:Menu item to clear all window(s) page load history data
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_clear_history   "Clear history"
-
-
-//d:Menu item to clear all form and password data
-//l: list_single_popup_submenu_pane_t1
-//
-#define qtn_browser_list_privacy_clear_form_data   "Clear form data"
-
-
-//d:Information note text after clearing history
-//l: popup_note_window
-//
-#define qtn_browser_note_history_cleared    "History and recent URLs cleared"
-
-
-//d:Information note text after clearing form data
-//l: popup_note_window
-//
-#define qtn_browser_note_form_and_passwd_data_cleared  "Form and password data cleared"
-
-
-//d:Information note text after deleting cookies
-//l:popup_note_window
-//
-#define qtn_browser_note_cookies_deleted   "Cookies deleted"
-
-//d:Information note text after clearing all privacy data
-//l: popup_note_window
-//
-#define qtn_browser_note_clear_all_privacy_done   "All privacy data cleared"
-
-
-//d:Menu item in Preferences->Options->Info menu
-//l:list_single_pane_t1_cp2
-#define qtn_wml_opt_about_product "Name and version"
-//d:Text in About Product information note's heading
-//l:heading_pane_t1
-#define qtn_browsers_title_about "Name and Version"
-
-//d:Menu item in Preferences->Options->Info menu
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_wml_opt_about_product_oss "About product"
-
-//d:Text in About Product information note's heading
-//l:heading_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_about_oss "About product"
-
-//d:Text in About Product information note, shown in the first line
-//l:popup_info_list_pane_t1
-#define qtn_browsers_browser_name "Series 60 Mobile Browser"
-
-//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
-//l: heading_pane_t1
-#define qtn_browsers_about_version_label           "Version: %0U (%1U)"
-
-//d:Browser main menu
-//l:heading_pane_t1
-#define qtn_browser_query_browser_version         "Browser Version"
-
-//d:Text in About Product information note, the list of installed plugins comes after this
-//l:popup_info_list_pane_t1
-#define qtn_browsers_plugins_label "Plug-Ins:"
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-#define qtn_browsers_sett_homepage   "Home page"
-
-//d:Browser settings main list item texts for OSS browser
-//l:list_setting_pane_t1
-//w:
-//r: 3.0
-//
-#define qtn_browsers_sett_startpage   "Startpage"
-
-//d:Browser settings selectable item texts access point home page
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_ap_home_page  "Access point home page"
-
-//d:Browser settings selectable item texts user-defined home page
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_own_home_page  "New address"
-
-//d:Browser settings selectable item texts for selecting bookmark view
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_homepage_bookmarks  "Bookmarks"
-
-//d:Browser submenu item for Set as Home page
-//l:list_single_pane_t1_cp2
-#define qtn_browserbm_list_set_as_home_page  "Set as Home Page"
-
-//d:Browser submenu item for Set as Home page
-//l:list_single_popup_submenu_pane_t1
-#define qtn_browserbm_list_set_as_home_page_sm  "Set as Home Page"
-
-//d:Browser menu item for Home page launch
-//l:list_single_popup_submenu_pane_t1
-#define qtn_browser_list_home  "Home"
-
-//d: Prompt dialog  shown to enter a url for the Home Page setting
-//l: popup_query_data_window
-#define qtn_wml_prompt_homepage_url  "New address"
-
-//d: Confirmation query shown before setting new home page
-//l:popup_note_window
-#define qtn_browserbm_query_set_as_home_page    "Do you want to use this bookmark as home page?"
-
-//d:Browser settings selectable item texts user-defined home page
-//l:list_set_graphic_pane_t1
-#define qtn_browsers_sett_use_current_home_page  "Use current page"
-
-
-//d:Text in upload progress note.
-//l:popup_note_window
-#define qtn_browser_upload_progressnote_uploaded "Uploaded:\n%0U / %1U "
-
-//d:Unit in upload progress note.
-//l:popup_note_window
-#define qtn_browser_upload_progressnote_unit_kbyte "kB"
-
-//d:Unit in upload progress note.
-//l:popup_note_window
-#define qtn_browser_upload_progressnote_unit_mb "MB"
-
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_wml_settings_access_point_user_defined "User defined"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_wml_settings_access_point_always_ask "Always ask"
-
-//d:Browser settings selectable item texts
-//l:list_set_graphic_pane_t1
-#define qtn_wml_settings_access_point_ask_when_needed "Ask when needed"
-
-//d:Browser gotopane default text
-//l:query_popup_data_pane_t1/opt4
-#define qtn_browser_goto_text_enter_address  "Enter address"
-
-//d:Download already in progress info note.
-//l:popup_note_window
-//w:
-//r:2.8
-//
-#define qtn_browser_note_object_downloading "Downloading"
-
-//=============================================================================
-// OSS Browser Support
-//=============================================================================
-
-// ==========================================================
-// Finding
-// ==========================================================
-//d: Browser Find main menu
-//l: list_single_popup_menu_pane_1
-//w:
-//r:3.0
-//
-// #define qtn_options_find                  "Find item"
-
-//d: Menu item for searching for a keyword
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_find_keyword               "Keyword"
-
-//d: Menu item for searching for a keyword
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_browser_find_keyword_mm               "Find Keyword"
-
-//d: Menu item for searching the next matching string in the page
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.0
-//
-#define qtn_browser_find_keyword_search_for_next               "Search for next"
-
-//d: Menu item for searching the previous matching string in the page
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.0
-//
-#define qtn_browser_find_keyword_search_for_previous              "Search for previous"
-
-//d: Tooltip shown when there were no matches of the search
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_keyword_find_no_matches               "No matches"
-
-//d:  Tooltip shownwhen the search has reached the end of the page
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_keyword_find_wraparound              "Wraparound"
-
-//d:  Tooltip shownwhen the search has reached the starting point
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_keyword_find_all_content_searched              "All the content searched"
-
-// ==========================================================
-// Zooming
-// ==========================================================
-
-//d: Browser zooming main menu
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-//
-#define qtn_wml_option_zoom                             "Zoom"
-
-//d: Options menu list item for the new Zoom Mode. Options>View>Zoom
-//l: list_single_popup_submenu_pane_t1
-//r: Browser 7.x
-//
-#define qtn_browser_list_zoom_mode                      "Zoom"
-
-//d: When zoom level of images change, new level is shown in title pane
-//l: navi_navi_text_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_zoom_level                           "Zoom level: %U%"
-
-//d: Zoom levels displayed as zoom menu subitems
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_image_zoom_level                           "%U%"
-
-
-//d: When zoom level of text change, new level is shown in title pane
-//l: navi_navi_text_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_text_size                           "Text size: %U%"
-
-//d: When zoom level of text changes, new level is shown in tooltip
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_text_size_tooltip                    "Text size: %U%"
-
-//d: When zoom level of images change, new level is shown in tooltip
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_zoom_level_tooltip                   "Zoom level: %U%"
-
-//d: Tooltip that displays when the maximum zoom level has been reached
-//l: popup_preview_text_window/opt3
-//r: 3.2.3, 5.0+, browser 7.x
-//
-#define qtn_browser_zoom_level_tooltip_maximum           "Maximum zoom level"
-
-//d: Tooltip that displays when the minimum zoom level has been reached
-//l: popup_preview_text_window/opt3
-//r: 3.2.3, 5.0+, browser 7.x
-//
-#define qtn_browser_zoom_level_tooltip_minimum           "Minimum zoom level"
-
-//=============================================================================
-// Multiple Windows Support
-//=============================================================================
-
-
-//d: menu item. Selecting this will open the current url link
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_list_open_link_main                      "Open link"
-
-
-//d: Submenu item. Selecting this will open the current url link in
-//d: a new window
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_list_open_in_new_window                 "Open link in new window"
-
-//d: Download main menu, contains download page menuitems.
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.1
-//
-#define  qtn_browserbm_options_submenu_download             "Download"
-
-//d: Selecting this will open the current url link.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browserbm_options_download_page                 "Download page"
-
-//d: Selecting this will open the current url link in a new window.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browserbm_options_download_in_new_window        "Download page in new window"
-
-//d: Menu access to pop-ups submenu
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_list_windows "Windows"
-
-//d: Opens a selection dialog which will allow the
-//d: the user to switch between all open windows.
-//d: Only shown if more than one window is opened.
-//l: list_single_popup_submenu_pane_t1
-//r:3.0
-//
-#define qtn_browser_list_switch_window "Windows"
-
-//d: Closes the current window.
-//l: list_single_pane_t1_cp2
-//r:3.0
-//
-#define qtn_browser_list_close_window "Close"
-
-//d: Submenu item. Selecting this item allows pop-up windows to be opened from
-//d: the current webpage's domain. This applies to non-user initiated pop-ups.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_browser_list_windows_allow "Allow pop-ups"
-
-//d: Submenu item. Selecting this item blocks pop-up windows being opened from
-//d: the current webpage's domain. This applies to non-user initiated pop-ups.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define  qtn_browser_list_windows_block "Block pop-ups"
-
-//d: The header for an option list dialog. The list contains
-//d: all open windows, selection will make that window active.
-//l: heading_pane_t1
-//r:3.0
-//
-#define qtn_browser_query_switch_window_header "Switch to:"
-
-//d: A confirmation dialog responding to a user
-//d: request to close the current window
-//l: popup_note_window
-//r:3.0
-//
-#define qtn_browser_query_close_window "Close current window?"
-
-//d: A pop-up note to indicate to the user that the maximum number
-//d: of popup windows allowed has been reached, no more may be opened
-//l: popup_note_window
-//w:
-//r:3.0
-//
-#define qtn_browser_note_pop_up_max_reached "Cannot open pop-up, maximum number reached."
-
-//d: An information note, indicating that a new window is being opened
-//d: will be added to the whitelist
-//l: popup_preview_text_window/opt3
-//r:3.0
-//
-#define qtn_browser_note_pop_up_window_opened "Opening new window"
-
-//-----------------------------------------------------------------------------
-// Settings for Multiple Windows
-//
-//d: Browser setting for enabling popup blocking
-//l: list_setting_pane_t1
-//w:
-//r:3.0
-//
-#define  qtn_brow_sett_pop_up_blocking "Pop-up blocking"
-
-//d: Selectable text for the Popup blocking setting
-//d: Popup blocking is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_brow_sett_pop_up_blocking_on "Enabled"
-
-//d: Selectable text for the Popup blocking setting
-//d: Popup blocking is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_brow_sett_pop_up_blocking_off "Disabled"
-
-// ==========================================================
-// Subscribe to
-// ==========================================================
-
-//d: Browser Subscribe to main menu
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_list_subscribe_to  "Subscribe to feeds"
-
-//-----------------------------------------------------------------------------
-// Popup dialog - stored preference data
-//
-
-//d: Tooltip note notifying the user that pop-ups have been disabled
-//d: and indicating to the user that they must use the options menu
-//d: to allow pop-ups for the current page
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.0
-//
-#define qtn_browser_multiple_windows_tooltip "Pop-up window was blocked. Pop-ups can be enabled from Options"
-
-//d:Text for RSS Folder in Bookmarks view.
-//l:list_single_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_apps_feeds_list              "Web feeds"
-
-//----------------------------------------------------------------------------
-// Show Miniature
-//
-
-//d:Menu item to show Thumbnail view of the currently visited page.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_list_miniature_show_mini    "Page overview"
-
-//--------------------------------------------------------------------------------
-// Smart Text recognition
-//
-
-//d:Browser setting for smart link detection
-//l:list_setting_pane_t1
-//
-#define qtn_browsers_sett_smartlink        "Smart text recognition"
-
-//d: Enables automatic detection of phone numbers and email addresses when scrolling
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_brow_sett_smartlink_on        "On"
-
-//d: Disables Jutomatic detection of phone numbers and email addresses when scrolling
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_brow_sett_smartlink_off       "Off"
-
-
-//----------------------------------------------------------------------------
-// Page overview
-//
-
-//d:Tooltip when the Page Overview is switched on by Shortcut key 7.
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.0
-//
-#define qtn_browser_tooltip_page_overview_on    "Mini map on"
-
-//d:Tooltip when the Page Overview is switched off by Shortcut key 7.
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.0
-//
-#define qtn_browser_tooltip_page_overview_off   "Mini map off"
-
-//-----------------------------------------------------------------------------
-// Form Data Saving
-//
-
-//d: Browser setting for Form data saving
-//l: list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_form_data_saving  "Form data saving"
-
-//d: Selectable text for the Form data saving setting
-//d: Saving passwords is enabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_brow_sett_form_data_saving_on   "Form and password data"
-
-//d: Selectable text for the Form data saving setting
-//d: Saving passwords is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_brow_sett_form_data_saving_off  "Off"
-
-//d: Selectable text for the Form data saving setting
-//d: Saving passwords is disabled if this is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_brow_sett_form_data_saving_only     "Form data only"
-
-//d:Clear history and Recent URLs query string
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_privacy_query_clear_history     "Clear history and recent URLs?"
-
-
-//d:Delete Form Data and Password query string
-//l:popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_form_data_delete_all        "Clear form and password data?"
-
-//d:Delete all privacy data query string
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_privacy_delete_all      "Clear all privacy data?"
-
-
-//d:Delete Form Password Data query string
-//l:popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_form_data_delete_password       "Clear password data?"
-//----------------------------------------------------------------------------
-// Window selection
-//
-
-//d:Menu item to selects the focused window.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_list_select_window          "Select"
-
-//d:Menu item to close all windows except the current one.
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.1
-//
-#define qtn_browser_list_close_all_but_this     "Close all but this window"
-
-//----------------------------------------------------------------------------
-// Web feeds settings
-//
-
-//d: A list box item referring to settings categorised as Web Feeds
-//d: When selected a settings list is displayed containing those settings
-//l: list_single_large_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_fldr_feeds     "Web feeds"
-
-//d: When the Web feeds Settings are opened, this should be displayed in the title pane
-//l: title_pane_t2/opt9
-//w:
-//r:3.1
-//
-#define qtn_browsers_title_feeds    "Web feeds settings"
-
-//d:Browser settings main list item texts for Automatic updating of web feeds
-//l:list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_autoupdating      "Automatic updating"
-
-//d: Selectable text for the Automatic updating setting
-//d: If Off is selected, automatic updating does not occur
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_autoupdating_off "Off"
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 15 minutes
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_15min "Every 15 minutes"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every hour
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_hourly "Every hour"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done every 4 hours
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_4hours "Every 4 hours"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done daily
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_daily "Every day"
-
-
-//d: Selectable text for the Automatic updating setting
-//d: Autoupdating is done weekly
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_feeds_updating_interval_weekly "Every week"
-
-//d:Browser settings main list item texts for Automatic updating of web feeds
-//l:list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_autoupdating_ap       "Update via access point"
-
-//d:Browser settings main list item texts for Automatic updating of web feeds while roaming
-//l: list_setting_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_autoupdating_roaming              "Update while roaming"
-
-//d: Selectable text for the Automatic update setting while roaming
-//d: If On is selected, automatic update happens even if the user is roaming
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_val_autoupdating_roaming_on       "On"
-
-//d: Selectable text for the Automatic update setting while roaming
-//d: If Off is selected, automatic update does not occur while roaming
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_browsers_sett_val_autoupdating_roaming_off      "Off"
-
-//d:Browser settings main list item texts
-//l:popup_note_window
-//
-
-#define qtn_browsers_sett_dataquery_autoupdate_ap "The access point has to be defined to enable automatic updating."
-
-//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
-//d: noting that turning the feature on may cost them money
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browsers_sett_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
-//d: Query user to close existing WML page when activating a link to a WML page
-//d: from another window.  Only one WML page can be opened at once.
-//l: popup_note_window
-//w:
-//r:3.1
-//
-#define qtn_browser_multiple_windows_wml  "WML page in another window needs to be closed to proceed, close it?"
-
-//----------------------------------------------------------------------------
-// ToolBar Strings
-//
-//d: view sub menu item to show the toolbar
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_list_toolbar           "Toolbar"
-//d: Tooltip that is showns when the toolbar is activated via the Options menu
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_tooltip_toolbar  "Click an empty area of the page to show the toolbar"
-
-
-//d:Browser settings main list item texts
-//l:list_setting_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_objects           "Load content"
-
-
-//d: Selectable text for the Load Content setting
-//d: Only text is loaded if this option is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_text              "Text only"
-
-
-//d: Selectable text for the Load Content setting
-//d: Images are loaded if this option is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_images_no_flash            "Images no flash"
-
-
-//d: Selectable text for the Load Content setting
-//d: All content is loaded if this option is selected
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.1
-//
-#define qtn_browser_sett_autoload_all               "All"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an anchor
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_list_show_address           "Show address"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_save_image_to_gallery       "Save to gallery"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_list_open_to_viewer         "Open to viewer"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on a phone number
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_options_call                        "Call"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on a phone number
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_create_sms                  "Create text message"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on a phone number or e-mail
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_options_contacts                    "Add to contacts"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an e-mail
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_create_email                 "Create e-mail message"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_load_image                  "Load image"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_load_all_images             "Load all images"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_enable_autoload_images      "Enable images"
-
-//d: Label for stylus activated popup.
-//d: Popup is shown when user taps on an image placeholder
-//l: list_single_pane_t1_cp2
-//r: 3.2
-//
-#define qtn_browser_enable_autoload_all         "Enable images and flash"
-
-
-
-//d: Confirmation query shown before setting new home page
-//l:popup_note_window
-#define qtn_browser_query_set_as_home_page         "Set as home page?"
-
-
-
-// -----------------------------------------------------------------
-// Toolbar related strings
-// -----------------------------------------------------------------
-
-//d: Tooltip that is showns when the toolbar is activated via the Options menu
-//l: popup_preview_text_window/opt3
-//w:
-//r:3.1
-//
-#define qtn_browser_tooltip_toolbar  "Click an empty area of the page to show the toolbar"
-
-
-
-// -----------------------------------------------------------------
-// Toolbar Button Command Settings Labels
-// -----------------------------------------------------------------
-
-//d: Toolbar Button 1 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button1         "Button 1"
-
-//d: Toolbar Button 2 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button2         "Button 2"
-
-//d: Toolbar Button 3 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button3         "Button 3"
-
-//d: Toolbar Button 4 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button4         "Button 4"
-
-//d: Toolbar Button 5 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button5         "Button 5"
-
-//d: Toolbar Button 6 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button6         "Button 6"
-
-//d: Toolbar Button 7 Command
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_toolbar_button7         "Button 7"
-
-
-// -----------------------------------------------------------------
-// Toolbar Button Command Values
-// -----------------------------------------------------------------
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_show_keymap             "Display key map"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_go_to_web_address       "Go to web address"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_list_bookmarks          "Bookmarks"             //(toolbar only)
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_save_as_bookmark        "Save as bookmark"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_recent_urls             "Recent URLs"           //(toolbar only)
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_find_keyword            "Find keyword"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_reload                  "Reload"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_miniature_show          "Page overview"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_previous_page           "Back one page"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_go_to_hompage           "Go to homepage"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_zoom_in                 "Zoom in"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_zoom_out                "Zoom out"
-
-//d: Preferences for Zoom Mode: Options>Preferences>Shortcut keys><N>Key > Zoom Mode
-//l: list_set_graphic_pane_t1
-//r: Browser 7.x
-//
-#define qtn_browser_setting_zoom_mode               "Zoom Mode"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_settings                "Settings"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_rotate_screen           "Rotate screen"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_subscribe_to_feeds      "Subscribe to feeds"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_manage_bookmarks        "Manage bookmarks"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_visual_history          "History"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_view_images             "View images"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_save_page               "Save page"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_send                    "Send"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_switch_window           "Switch window"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_show_toolbar            "Display toolbar"       // (keymap only)
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_show_help               "Help"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_none                    "None"
-
-//d: Toolbar button command Display Shortcut Keymap
-//l: list_set_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_full_screen             "Full screen"
-
-// -----------------------------------------------------------------
-// Toolbar Error Message
-// -----------------------------------------------------------------
-
-//d: Pop Up note if all toolbar buttons are set to "None"
-//l: popup_note_window
-//r: 5.0
-#define qtn_browser_setting_toolbar_save_dialog     "You must assign a function to at least one of the toolbar buttons!"
-
-
-// -----------------------------------------------------------------
-// Toolbar On/Off Setting Values
-// -----------------------------------------------------------------
-
-//d:Setting for Enabling or Disabling the Toolbar
-//l: list_setting_pane_t1
-//r: 5.0
-#define qtn_browser_setting_toolbar_on_off          "Toolbar On/Off"
-
-//d: Selectable text for the Toolbar On/Off setting
-//l: set_value_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_toolbar_on              "On"
-
-//d: Selectable text for the Toolbar On/Off setting
-//l: set_value_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_toolbar_off             "Off"
-
-
-// -----------------------------------------------------------------
-// Toolbar Settings group label and title strings
-// -----------------------------------------------------------------
-//d: Toolbar Settings group label
-//l:list_single_graphic_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_group_toolbar           "Toolbar"
-
-//Toolbar Settings Group Title Pane
-//l: title_pane_t2/opt9
-//r:5.0
-//
-#define qtn_browser_setting_group_title_toolbar     "Toolbar settings"
-
-
-// -----------------------------------------------------------------
-// ShortCut Keys Settings group label and title strings
-// -----------------------------------------------------------------
-
-//Shortcut Keys Settings group label
-//l:list_single_graphic_pane_t1
-//r:5.0
-//
-#define qtn_browser_setting_group_shortcuts         "Shortcut keys"
-
-//Shortcut Keys Settings Group Title Pane
-//l: title_pane_t2/opt9
-//r:5.0
-//
-#define qtn_browser_setting_group_title_shortcuts   "Shortcut key settings"
-
-
-// Shortcut Keys labels for settings
-
-//d: Shortcut key setting label for key "1"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key1          "1 Key"
-
-//d: Shortcut key setting label for key "2"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key2          "2 Key"
-
-//d: Shortcut key setting label for key "3"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key3          "3 Key"
-
-//d: Shortcut key setting label for key "4"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key4          "4 Key"
-
-//d: Shortcut key setting label for key "5"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key5          "5 Key"
-
-//d: Shortcut key setting label for key "6"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key6          "6 Key"
-
-//d: Shortcut key setting label for key "7"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key7          "7 Key"
-
-//d: Shortcut key setting label for key "8"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key8          "8 Key"
-
-//d: Shortcut key setting label for key "9"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key9          "9 Key"
-
-//d: Shortcut key setting label for key "0"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_key0          "0 Key"
-
-//d: Shortcut key setting label for key "*"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_starkey       "* Key"
-
-//d: Shortcut key setting label for key "#"
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browser_setting_shortcuts_hashkey       "# Key"
-
-//d:List of feeds to choose from .
-//l:heading_pane_t1
-//r:5.0
-//
-#define qtn_browser_subscribe_list      "Subscribe to"
-
-//d: Options menu item for displaying the shortcut keymap in a browser submenu
-//l: list_single_popup_submenu_pane_t1
-//r: 3.2.3, 5.0+
-#define qtn_browser_list_show_shortcut_keymap         "Show Shortcut Keymap"
-
-//d: Options menu list item for displaying the shortcut keymap in the top level browser menu
-//l: list_single_pane_t1_cp2
-//r: 3.2.3, 5.0+, browser 7.x
-#define qtn_browser_list_main_show_shortcuts          "Show shortcuts"
-
-//d:Command text associated to a softkey in the control pane.
-//d:Configure Keymap functionality.
-//l:control_pane_t1/opt7
-//
-#define text_softkey_configure "Configure"
-
-// -----------------------------------------------------------------
-// ShortCut Keymap text strings
-// -----------------------------------------------------------------
-
-//d: Shortcut key function Display Keymap
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_show_keymap             "Show Keymap"
-
-//d: Shortcut key function Go To Web Address
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_go_to_web_address       "Go to Web Address"
-
-//d: Shortcut key function Save as bookmark
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_save_as_bookmark        "Save as Bookmark"
-
-//d: Shortcut key function Find Keyword
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_find_keyword            "Find Keyword"
-
-//d: Shortcut key function Reload
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_reload                  "Reload"
-
-//d: Shortcut key function Page Overview
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_miniature_show          "Page Overview"
-
-//d: Shortcut key function Back One Page
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_previous_page           "Back One Page"
-
-//d: Shortcut key function Go to Homepage
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_go_to_homepage          "Go to Homepage"
-
-//d: Shortcut key function Zoom In
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_zoom_in                 "Zoom In"
-
-//d: Shortcut key function Zoom Out
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_zoom_out                "Zoom Out"
-
-//d: Shortcut key function Zoom Mode
-//l: cell_scut_pane
-//r: Browser 7.x
-//
-#define qtn_browser_keymap_text_zoom_mode               "Zoom Mode"
-
-//d: Shortcut key function Settings
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_settings                "Settings"
-
-//d: Shortcut key function Rotate Screen
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_rotate_screen           "Rotate Screen"
-
-//d: Shortcut key function Subscribe To Feeds
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_subscribe_to_feeds      "Subscribe To Feeds"
-
-//d: Shortcut key function Manage Bookmarks
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_manage_bookmarks        "Manage Bookmarks"
-
-//d: Shortcut key function History
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_visual_history          "History"
-
-//d: Shortcut key function View Images
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_view_images             "View Images"
-
-//d: Shortcut key function Save Page
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_save_page               "Save Page"
-
-//d: Shortcut key function Switch Window
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_switch_window           "Switch Window"
-
-//d: Shortcut key function Display Toolbar
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_show_toolbar            "Display Toolbar"
-
-//d: Shortcut key function Help
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_show_help               "Help"
-
-//d: Shortcut key function None
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_none                    "None"
-
-//d: Shortcut key function Full Screen
-//l: cell_scut_pane
-//r: 5.0
-//
-#define qtn_browser_keymap_text_full_screen             "Full Screen"
-
-// -----------------------------------------------------------------
-// Touch Toolbar Button strings
-// -----------------------------------------------------------------
-
-//---------------------------------
-// Main Toolbar Strings
-//---------------------------------
-// Goto Address Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_gotoaddress_tt           "Goto Address"
-
-// Show Zoom Slider Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_zoomshow_tt              "Show Zoom Slider"
-
-// Hide Zoom Slider Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_zoomhide_tt              "Hide Zoom Slider"
-
-//---------------------------------
-// Extended Toolbar Strings
-//---------------------------------
-//d:Extended Toolbar Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_tt                   "Expand toolbar"
-
-//d:Bookmarks Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_bm                   "Bookmarks"
-
-//d:Bookmarks Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_bm_tt                "Bookmarks"
-
-//d:Home Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_home                 "Home"
-
-//d:Home Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_home_tt              "Home"
-
-//d:Settings Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_settings             "Settings"
-
-//d:Settings Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_settings_tt          "Settings"
-
-
-//d:Save Bookmark Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_save_bookmark       "Save Bookmark"
-
-//d:Save Bookmark Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_save_bookmark_tt    "Save Bookmark"
-
-
-//d:Find Keyword Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_find_keyword         "Find Keyword"
-
-//d:Find Keyword Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_find_keyword_tt      "Find Keyword"
-
-//d:Find Next Keyword Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_findnext_tt              "Find Next"
-
-//d:Find Previous Keyword Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_findprevious_tt          "Find Previous"
-
-//d:Navigate Back in History Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_history_back_tt                  "Back"
-
-//d:Navigate Forward in History Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_history_forward_tt              "Forward"
-
-//d:Subscribe Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_subscribe_list       "Subscribe"
-
-//d:Subscribe Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_subscribe_list_tt    "Subscribe"
-
-//d:Reload Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_reload               "Reload"
-
-//d:Reload Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_reload_tt            "Reload"
-
-//d:Page Overview Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_miniature_show       "Show Miniature"
-
-//d:Page Overview Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_miniature_show_tt    "Show Miniature"
-
-//d:Help Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_help                 "Help"
-
-//d:Help Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_help_tt              "Help"
-
-//d:Goto Address Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_gotoaddress          "Goto Address"
-
-//d:Show Zoom Slider Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_zoomshow             "Show Zoom Slider"
-
-//d:Full Screen Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_full_screen          "Full Screen"
-
-//d:Full Screen Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_full_screen_tt       "Full Screen"
-
-//d:Send Url Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_send_url          "Send Url"
-
-//d:Send Url Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_send_url_tt       "Send Url"
-//d:Rotate Display Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_rotate               "Rotate Display"
-
-//d:Rotate Display Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_rotate_tt            "Rotate Display"
-
-//d:View Feeds Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_view_feeds           "View Feeds"
-
-//d:View Feeds Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_view_feeds_tt        "View Feeds"
-
-//d:Switch Window Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_ext_tb_switch_win           "Switch Window"
-
-//d:Switch Window Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_ext_tb_switch_win_tt        "Switch Window"
-
-
-//---------------------------------
-// Bookmark Toolbar Strings
-//---------------------------------
-//d:Add Bookmark Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_tb_add_bookmark     "Add Bookmark"
-
-//d:Delete Button Label
-//l:cell_tb_ext_pane_t1/opt1
-//r:5.0
-//
-#define qtn_browser_tb_del_bookmark     "Delete"
-
-// Add Bookmark Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_add_bookmark_tt     "Add Bookmark"
-
-// Delete Button Tooltip
-//l:popup_preview_text_window_t1
-//r:5.0
-//
-#define qtn_browser_tb_del_bookmark_tt     "Delete"
-
-// -----------------------------------------------------------------
-// Option menu sub-options
-// -----------------------------------------------------------------
-
-//d: "Go to" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_goto                    "Go to"
-
-//d: "Page Actions" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_pageactions             "Page actions"
-
-//d: "Bookmark Actions" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_bmactions               "Bookmark actions"
-
-//d: "Feeds Actions" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_feedsactions            "Feeds actions"
-
-//d: "Edit" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_edit                    "Edit"
-
-//d: "Mark/Unmark" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_markunmark              "Mark/Unmark"
-
-//d: "View" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_view                    "View"
-
-//d: "Clear" submenu access
-//l: list_single_pane_t1_cp2/opt3
-//w:
-//r: 5.0
-//
-#define qtn_browser_options_clear                   "Clear"
-
-// -----------------------------------------------------------------
-// Go to sub-options
-// -----------------------------------------------------------------
-//d: "Web feeds" menu item
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_browser_list_web_feeds                  "Web feeds"
-
-//d: "New web page" menu item
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_browser_list_new_web_page               "New web page"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_next            "Next Toolbar"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_back            "Back"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_forward         "Forward"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_pageoverview    "Page Overview"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_reload          "Reload"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_findkeyword     "Find Keyword"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_home            "Home"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_subscribe       "subscribe"
-
-//d: Tooltip for toolbar button
-//l: popup_preview_text_window/opt3
-//w:
-//r: 3.2
-#define qtn_browser_toolbar_tooltip_go              "Go"
-
-//d: List of feeds to choose from .
-//l: heading_pane_t1
-//
-#define qtn_browser_toolbar_subscribe_header      "Select to subscribe"
-
-//d: Confirmation query shown before setting new home page
-//l:popup_note_window
-//
-#define qtn_browser_query_set_as_home_page         "Set as home page?"
-
-// -----------------------------------------------------------------
-// View sub-options
-// -----------------------------------------------------------------
-//d: Full Screen menu item
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_browser_list_full_screen_enter          "Full Screen"
-
-// -----------------------------------------------------------------
-// Search strings
-// -----------------------------------------------------------------
-//d: Left softkey: (accept typing and activate search application)
-//l: control_pane_t1/opt7
-//r: 5.0
-//
-#define qtn_is_softkey_search           "Search"
-//d: Search second level options menu text
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_is_list_search			   				"Search"
-//d: Tooltip for go to/search icon
-//l: popup_preview_text_window_t1
-//r: 5.0
-//
-#define qtn_is_tooltip_goto_search "Go to web page or search"
-//d: settings view menu item
-//l: list_setting_pane_t1
-//r: 5.0
-//
-#define qtn_browsers_sett_web_search_provider "Web search provider"
-//d: setting text when it is not defined
-//l: set_value_pane_t1
-//r: 5.0
-//
-#define qtn_is_label_not_selected "Not selected"
-//d: search editor default text
-//l: query_popup_data_pane_t1/opt4
-//r: 5.0
-//
-#define qtn_is_web_search "Web search"
-// -----------------------------------------------------------------
-// Service strings
-// -----------------------------------------------------------------
-//d: Here and now bookmark list item
-//l: list_single_graphic_pane_t1
-//r: 5.0
-//
-#define qtn_is_recommendations "Here and Now"
-
-//d: Confirmation to install add-on browser
-//l: popup_note_window
-//r: 7.2
-#define qtn_install_addon_browser  "A new browser is available.  Would you like to install it?"
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/browserhp.loc	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+//d: Local home page title
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_title				"Web Browser for S60"
+
+
+
+//d: Local home search web
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_search_web				"Web"
+
+//d: Local home search images
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_search_images				"Images"
+
+
+
+
+//d: Local home my top links
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_my_top				"My Top Links"
+
+
+//d: Local home Shortcut Keys
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_shortcut_keys				"Shortcut Keys"
+
+
+//d: Local home alt text selection key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_selection_key				"Selection key"
+
+
+//d: Local home selection key label
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_selection_key_label			"Open link, or start entering text in a form input field" 
+
+
+//d: Local home label c key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_c_key_label				"If more than one window is open, closes the current window"
+
+
+
+//d: Local home label 1 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_1_key_label				"Show bookmarks"
+
+
+//d: Local home label 2 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_2_key_label				"Text search in current page"
+
+
+
+//d: Local home label 3 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_3_key_label				"Back one page"
+
+
+//d: Local home label 5 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_5_key_label				"List windows"
+
+
+//d: Local home label 8 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_8_key_label				"Show Page Overview"
+
+
+
+//d: Local home label 9 key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_9_key_label				"Go to address"
+
+
+
+//d: Local home label star key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_star_key_label				"Zoom images out"
+
+//d: Local home label hash key
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_hash_key_label				"Zoom images in"
+
+//d: Local home shortcut keys note
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_note				"Note"
+
+//d: Local home shortcut keys unavailable
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_shortcut_unavailable				"Shortcut keys not available while entering text"
+
+//d: Local home browser forum title
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_browser_forum				"Browser Forum"
+
+//d: Local home join discussion label 1
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_join_discussion_1			"Join the discussion at"
+
+//d: Local home join discussion label 2
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_join_discussion_2			"the S60 user community forum!"
+
+//d: Local home unused key label
+//l: none
+//w:
+//r: 3.1
+#define qtn_lhp_unused_key_label			"Not used" 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/feeds.loc	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,552 @@
+/*
+* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Localized strings.
+*
+*/
+
+
+//  APPLICATION INFORMATION
+
+/*  Application related                                                 */
+/* -------------------------------------------------------------------- */
+//d:application name
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.0
+#define qtn_apps_feeds_list      "Web Feeds"
+//d:application name
+//l:cell_app_pane_t1
+//w:
+//r:3.0
+#define qtn_apps_feeds_grid      "Web Feeds"
+
+
+/*  Options Menu                                                        */
+/* -------------------------------------------------------------------- */
+//d: Menu text to update the selected feed.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_update "Update"
+
+//d: Menu text to update all feed.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_update_all "Update All"
+
+//d: Menu text for the manage sub-menu
+//l:list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+#define qtn_feeds_manage "Manage"
+
+//d: Menu text to open the associated web page in the browser.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+#define qtn_feeds_open_full_story "Open Full Story"
+
+
+/*  Manage Sub-Menu                                                     */
+/* -------------------------------------------------------------------- */
+//d: Menu text to create a new feed.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_new_feed "Add feed"
+
+//d: Menu text to edit the current feed.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_edit "Edit feed"
+
+/*  Info Sub-Menu                                                       */
+/* -------------------------------------------------------------------- */
+//d: Menu text to view the about info.
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_about "About"
+
+
+/*  Folder View                                                         */
+/* -------------------------------------------------------------------- */
+//d: The title of the folder-view when the top-level folder is showing.
+//l:title_pane_t2/opt9
+//w:
+//r:3.0
+#define qtn_feeds_folder_view_title "Web Feeds"
+
+/* -------------------------------------------------------------------- */
+//d: The text displayed in the folder view when there are no feeds or folders.
+//l:main_list_empty_pane
+//w:
+//r:3.1
+#define qtn_feeds_no_feeds "No Web Feeds"
+
+/*  Feeds View                                                          */
+/* -------------------------------------------------------------------- */
+//d: The text string at the end of a feed that's associated with the
+//d: item's full story -- the browser is launched when this text is selected.
+//l:None
+//w:
+//r:3.0
+#define qtn_feeds_feeds_view_see_full_story "See full story"
+
+/* -------------------------------------------------------------------- */
+//d: The default title of enclosures.  The title is used to display the
+//d: the enclosure in content area of the Feeds View.
+//l:None
+//w:
+//r:3.1
+#define qtn_feeds_feeds_view_enclosure "Podcast"
+
+
+// -----------------------------------------------------------------
+// Touch Toolbar Button strings
+// -----------------------------------------------------------------
+
+//---------------------------------
+// Feeds Folder View Toolbar Strings
+//---------------------------------
+// Update Selected Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_update_selected_tt            "Update Selected Feed"
+
+// Update All Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_update_all_tt                 "Update All Feeds"
+
+// Open into article listing view
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_folder_open_tt                       "Open into article listing view"
+
+
+//---------------------------------
+// Feeds Topic View Toolbar Strings
+//---------------------------------
+// Update Feed
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_update_tt                      "Update Feed"
+
+// Back to Page
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_back_to_page_tt                "Back to Page"
+
+// Open into detail view
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_topic_open_tt                        "Open into detail view"
+
+//---------------------------------
+// Feeds Feed View Toolbar Strings
+//---------------------------------
+// Previous Article
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_previous_article_tt             "Previous Article"
+
+// Show Full Story
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_show_full_story_tt              "Show Full Story"
+
+// Next Article
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_feeds_feed_next_article_tt                 "Next Article"
+
+
+/*  Wait Dialog                                                         */
+/* -------------------------------------------------------------------- */
+//d: Information text when a feed is updating.
+//l:popup_note_wait_window
+//w:
+//r:3.0
+#define qtn_feeds_updating_wait_dialog_text "Updating"
+
+//d: Information text when a feed is opening.
+//l:popup_note_wait_window
+//w:
+//r:5.0
+#define qtn_feeds_opening_wait_dialog_text "Opening"
+/* -------------------------------------------------------------------- */
+//d: Information text when all feeds are updating.
+//l:popup_note_wait_window
+//w:
+//r:3.1
+#define qtn_feeds_updating_all_wait_dialog "Updating all feeds"
+
+
+/*  Delete Dialog                                                       */
+/* -------------------------------------------------------------------- */
+//d: Information text when the user chooses to delete a feed.
+//d: The text follows this form, "Delete %U?", where %U is
+//d: the name of the feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_delete_dialog_text "Delete %U?"
+
+//d: Information text when the user chooses to delete multiple feeds.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_delete_multiple_dialog_text "Delete selected feeds?"
+
+
+/*  Edit/Add Feed/Folder Dialog                                             */
+/* -------------------------------------------------------------------- */
+//d: Header test for the feed's name.
+//l:list_double_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_name_dialog_text "Title"
+
+//d: Header test for the feed's url.
+//l:list_double_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_url_dialog_text "Address"
+
+//d: Text displayed in the New feed dialog.
+//l:list_single_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_new_feed_item "New feed"
+
+//d:Header text for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_autoupdating_text "Automatic updating"
+
+//d: Selectable text for the Automatic updating setting
+//d: If Off is selected, automatic updating does not occur
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_autoupdating_off "Off"
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 15 minutes
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_15min "Every 15 minutes"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every hour
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_hourly "Every hour"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 4 hours
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_4hours "Every 4 hours"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done daily
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_daily "Every day"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done weekly
+//l: list_set_graphic_pane_t1
+//w:
+//r:7.1
+//
+#define qtn_feeds_val_updating_interval_weekly "Every week"
+
+
+//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
+//d: noting that turning the feature on may cost them money
+//l: popup_note_window
+//w:
+//r:7.1
+//
+#define qtn_feeds_new_feed_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
+
+
+/* Import/Export Feed Strings                                           */
+/* -------------------------------------------------------------------- */
+
+
+
+//d: Menu text to import selected or marked feeds from a file
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 3.2
+#define qtn_options_import_feeds    "Import Feeds"
+
+//d: Popup waiting note when searching for feed files
+//d: stored on the phone
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_searching_for_feeds    "Searching for feeds..."
+
+//d: When the search for feeds has completed, a header
+//d: over the list of results
+//l: heading_pane_t1
+//w:
+//r: 3.2
+#define qtn_popup_title_feeds_files_found    "Feeds Files Found:"
+
+//d: When the search for feeds has completed, if no
+//d: feeds are found on the device, this error is shown
+//l: popup_note_window/opt1
+//w:
+//r: 3.2
+#define qtn_feeds_no_feeds_found_on_device    "No feeds found on device"
+
+//d: A wait screen for when the phone is importing a feed file
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_importing_feeds    "Importing Feeds..."
+
+//d: Menu text to export selected or marked feeds to a file
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 3.2
+#define qtn_options_export_feeds    "Send"
+
+//d: When exporting some feeds to a file, header on a popup
+//d: asking the user to name the file
+//l: popup_query_data_window/opt1
+//w:
+//r: 3.2
+#define qtn_feeds_name_exported_file    "Name the file to be sent:"
+
+//d: When exporting some feeds to a file, if the
+//l: popup_note_window
+//w:
+//r: 3.2
+#define qtn_feeds_export_opml_title_needed  "You must enter a name for the file."
+
+//d: Wait window as feeds are exported into a file
+//l: popup_note_wait_window
+//w:
+//r: 3.2
+#define qtn_wait_processing "Processing..."
+
+//d: Confirmation to import feeds from an OPML file
+//d: that has been downloaded or received from another application
+//d: The %U referes to the filename of the OPML file
+//l: popup_note_window
+//w:
+//r: 3.2
+#define qtn_feeds_query_import_now  "Import feeds from %U now?"
+
+
+/*  Error Strings                                                       */
+/* -------------------------------------------------------------------- */
+//d: Information text for the error dialog.  Displayed when the user
+//d: doesn't include a title when editing or adding a feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_title_needed "Title needed"
+
+//d: Information text for the error dialog.  Displayed when the user
+//d: doesn't include a url when editing or adding a feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_address_needed "Address needed"
+
+//d: Information text for the error dialog.  Displayed when the user
+//d: enters a single quote character anywhere in the feed title.
+//l:popup_note_window
+//w:
+//r:7.0
+#define qtn_feeds_title_single_quote_not_allowed "Single quote character (’) is not allowed in the title"
+
+//d: Information text for the error dialog.  Displayed when the user
+//d: tries to add the same feed a second time.
+//d: %U is the name of the feed.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_duplicate_feed_error_dialog_text "%U already subscribed"
+
+//d: Information text for the error dialog.  Displayed when the user
+//d: tries to add/edit a feed that has a non-unique title.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_duplicate_title_error_dialog_text "Title must be unique"
+
+//d: Information text for the error dialog.  Displayed when a requested
+//d: feed is malformed(corrupted/empty).
+//l:popup_note_window
+//w:
+//r:5.0
+#define qtn_feeds_malformed_dialog_text "Feed cannot be processed"
+
+//d: Information text for the main pane.  Displayed when a requested
+//d: feed couldn't be fetched from the network.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_network_error_main_pane_text "Couldn't update feed"
+
+//d: Information text for the main pane.  Displayed when a requested
+//d: feed is malformed.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_malformed_main_pane_text "Can't process feed"
+
+//d: Information text for the main pane.  Displayed when a requested
+//d: feed is in an unsupported format.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_unsupported_main_pane_text "Feed format is not supported"
+
+//d: Information text for the main pane.  Displayed when a requested
+//d: feed has invalid URL.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_invalid_url_main_pane_text "Invalid web address"
+
+//d: Information text for the main pane.  Displayed when a requested
+//d: feed fails for some other reason.
+//l:list_double_graphic_pane_t2
+//w:
+//r:5.0
+#define qtn_feeds_general_error_main_pane_text "An unkown error occurred"
+
+//d: Information text for the error dialog.  Displayed when a requested
+//d: feed fails for some other reason.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_general_error_dialog_text "An unkown error occurred"
+
+//d: Information text for the error dialog. Displayed when an OPML file
+//d: somehow gets deleted after it is found and displayed in the list, and the 
+#define qtn_feeds_malformed_dialog_text "Can't process feed"
+
+//d: Information text for the error dialog.  Displayed when a requested
+//d: feed is in an unsupported format.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_unsupported_dialog_text "Feed format is not supported"
+//d: user then tries to select and import it.
+//l:popup_note_window
+//w:
+//r:7.1
+#define qtn_feeds_file_not_found_dialog_text "File Not Found"
+
+/*  Misc Strings                                                        */
+/* -------------------------------------------------------------------- */
+//d: Text displayed in the Topic-View when an item's name isn't available.
+//l:list_single_heading_pane_t1
+//w:
+//r:3.0
+#define qtn_feeds_unnamed_item "Unnamed item"
+
+
+/*  Strings copied from wmlbrowser.loc                                  */
+/* -------------------------------------------------------------------- */
+//d:DO element menu item
+//l:list_single_popup_submenu_pane_t1
+//
+#define text_wml_option_back      "Back"
+
+//d:Menu item in Bookmarks View: activate highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_load_bm         "Activate"
+
+// WmlBrowser Settings/Session listbox items
+
+//d:Browser settings session list item texts
+//l:heading_pane_t1
+//
+#define qtn_wmls_session_info             "Session info"
+
+//d:Format title text in session view.
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_ap              "Access point name:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_bearer_type           "Bearer type:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_max_speed            "Max. connection speed:"
+
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+#define qtn_browsers_title_about "Name and Version"
+
+//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
+//l:popup_info_list_pane_t1
+#define qtn_browsers_about_version_label "Version: %0U (%1U)"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_browser_set_bearer_hscsd            "HSCSD"
+
+//d: Information text for the error dialog.  Displayed when a requested
+//d: feed couldn't be fetched from the network.
+//l:popup_note_window
+//w:
+//r:3.0
+#define qtn_feeds_network_error_dialog_text "Couldn't update feed"
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/loc/wmlbrowser.loc	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,3229 @@
+/*
+* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     This is a localisation file.
+*     A .loc file is the one and only place where the logical strings
+*     to be localised are defined.
+*
+*
+*/
+
+
+
+//  LOCALISATION STRINGS
+
+//d:Information note text
+//l:popup_note_window
+//
+#define qtn_wml_informationnote_unable_to_retrieve    "Unable to retrieve"
+
+//d:Move - cancel softkey, Softkey used when moving the bookmark to folder
+//l:control_pane_t1/opt7
+//
+#define text_softkey_move            "Move"
+
+//d:application name
+//l:list_single_large_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_browserng_list      "BrowserNG"
+
+//d: application name
+//l: cell_app_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_browserng_grid      "BrowserNG"
+
+
+//d:Confirmation query text on exiting Browser
+//l:popup_note_window
+//
+#define text_wml_exit_confirm     "Quit browsing?"
+
+// strings for main menu for multipurpose browser display
+
+//d:Open selected deck
+//d:Open focused anchor node.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_open       "Open"
+
+
+//d:Menu item for DO elements' parent menu text
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_list_history      "History"
+
+
+//d:Menu item for DO elements' parent menu text
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_srv_opts     "Service options"
+
+//d:Menu item to get access to the bookmarks
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_wml_faves        "Bookmarks"
+
+//d:Menu item to
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browser_list_close        "Close browser"
+
+//d: main menu item to rotate the display orientation
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_rotate_display   "Rotate display"
+
+
+//d:Menu access to navigation submenu
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_list_navigation     "Navigation functions"
+
+
+//d:Menu item to change connection
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_change_connection "Change connection"
+
+//d:Menu item brings up input field for custom URL address
+//d:Menu item in bookmark favorites view
+//l:list_single_pane_t1_cp2
+//
+#define text_wml_option_goto      "Go to address"
+
+//d:Text in middle soft key (goto address function)
+//l:control_pane_t3/opt7
+//w:
+//r:3.2
+#define qtn_browser_msk_goto    "Go to"
+
+//d:Menu item to create a bookmark
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_wmlbm_fav_saveas_bm       "Add bookmark"
+
+//d:SubMenu item to create a bookmark
+//l:list_single_popup_submenu_pane_t1
+//w:
+//r:5.0 & 3.2.3
+//
+#define qtn_wmlbm_fav_saveas_bm_sm       "Add bookmark"
+
+//d:Menu item to show the zoom slider
+//l:list_single_pane_t1_cp2
+//r:5.0
+//
+#define qtn_wml_list_zoom_slider_show       "Show Zoom Slider"
+
+//d:Menu item to hide the zoom slider
+//l:list_single_pane_t1_cp2
+//r:5.0
+//
+#define qtn_wml_list_zoom_slider_hide       "Hide Zoom Slider"
+
+//d:Menu item to reload currently showed card
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_reload       "Reload"
+
+//d:Menu item the user can get different kind of information
+//d:about service in use
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_option_infoview     "Info"
+
+//d:Menu item to terminate network connection
+//d:about service in use
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_dconn        "Disconnect"
+
+//d:Menu item to load and show unloaded image
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_fetch_img      "Show Images"
+
+//d:Menu item to entirely clear the cache
+//l:list_single_popup_submenu_pane_t1
+//
+#define text_wml_option_empty_cache   "Clear cache"
+
+//d:Menu item to save current card
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_save_pgs     "Save"
+
+//d:Menu item to view/change browsing settings
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmls_browser_opt_sett   "Preferences"
+
+//d:Browser main menu
+//l:list_single_pane_t1_cp2
+//
+#define text_wml_option_help      "Help"
+
+//d:Browser main menu
+//l: list_single_pane_t1_cp2/opt3
+//
+#define qtn_browser_options_help     "Help"
+
+//d:Options menu item to open Downloads List.
+//l:list_single_pane_t1_cp2
+//w:
+//
+#define qtn_browser_list_downloads "Downloads"
+
+//d:Browser main menu
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_view_images    "View Images"
+
+//d:Menu access to tools submenu
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_browser_list_folder_tools       "Tools"
+
+//d:Strings for page info submenu
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browser_list_page_info  "Page info"
+
+//d:Strings for Info submenu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_opt_smenu_session   "Session"
+
+//d:Strings for Info submenu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_opt_smenu_security    "Security"
+
+//d:open new page query
+//l:popup_note_window
+//
+#define qtn_wml_query_dwnl         "Downloading ongoing. Cancel previous downloading?"
+
+//d:External app started browser with an invalid bookmark id
+//l:popup_note_window
+//
+#define qtn_wml_bookmark_not_found                           "Bookmark does not exist!"
+
+//d:Information note text
+//l:popup_note_window
+//
+#define text_wml_cache_emptied_note   "Cache cleared"
+
+//d:Text to display if the current access point is invalid while editing bookmark
+//l:list_single_heading_pane_t1
+#define qtn_wmlbm_text_ap_invalid             "Invalid"
+
+
+//d:Error note message: Invalid accesspoint is defined in a bookmark
+//l:popup_note_window
+#define qtn_wml_info_invalid_ap   "Invalid access point. Edit bookmark."
+
+//d:Error note message: Invalid accesspoint is defined in a saved deck
+//l:popup_note_window
+#define qtn_wml_confquery_invalid_ap  "Invalid access point. Use default?"
+
+//d:Command text associated to a softkey in the control pane.
+//d:Go to root level (folder).
+//l:control_pane_t1/opt7
+//
+#define text_softkey_root_level         "Root level"
+
+// Authentication Dialog
+
+//d:label for bookmark name query
+//l:popup_query_data_window
+#define qtn_wml_query_bookmark_title          "Enter bookmark name"
+//d:label for saved deck name query
+//l:popup_query_data_window
+#define qtn_wml_query_savedpage_title          "Enter name for saved page"
+
+//d:title of bookmark favorites view
+//l:title_pane_t2/opt9
+//
+#define text_wml_option_bookmarks   "Bookmarks"
+
+
+//d:Empty list text in Bookmarks View (displayed if no bookmarks exist)
+//l:main_list_empty_pane
+//
+#define text_wml_no_bookmarks     "No bookmarks"
+
+//d:Prompt for renaming a saved deck in Saved Decks View.
+//l:popup_query_data_window
+//
+#define qtn_wml_prmpt_edit_name         "Edit name:"
+
+//d:Information note text in Bookmarks View: could not move items due to name collision
+//d:Information note text in Saved Decks View: could not move items due to name collision
+//l:popup_note_window
+//
+#define qtn_fldr_names_in_use_rename    "Some of the names are already in use. Please rename those items"
+
+//d:Menu item in Bookmarks View: create new bookmark
+//l:list_single_pane_t1_cp2
+//
+#define text_wmlbm_option_enter_new     "Add bookmark"
+
+//d:Menu item in Bookmarks View: activate highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_load_bm         "Activate"
+
+//d:Menu item in Bookmarks View: edit highlighted bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmlbm_edit_bm         "Edit bookmark"
+
+
+//d:Menu item in Bookmarks View: set prefered bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_list_set_as_preferred         "Set as preferred"
+
+//d:Menu item in Bookmarks View: set un prefered bookmark
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_list_unset_from_preferred         "Unset from preferred"
+
+//d:Menu access to bookmark management submenu (Bookmarks view)
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wmlbm_manage_bm         "Edit"
+
+//d:Bookmark Edit Form title editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_bmtitle        "Title"
+
+//d:Bookmark Edit Form URL editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_bmadrs         "Address"
+
+//d:Bookmark Edit Form Access Point selector label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_wapap          "Access point"
+
+//d:Name for "Default" Access Point
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmlbm_default_wapap         "Default"
+
+//d:Text to display if there are no Access Points
+//l:list_single_heading_pane_t1
+//
+#define qtn_wmlbm_text_ap_none          "None"
+
+//d:Bookmark Edit Form user name editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_username       "User name"
+
+//d:Bookmark Edit Form password editor label.
+//l:list_double_heading_pane_t1
+//
+#define qtn_wmlbm_flabel_passwd         "Password"
+
+//d:Error note message: attempt to select AP when no such exist.
+//l:popup_note_window
+//
+#define qtn_wmlbm_info_no_valid_ap      "No valid access point available. Please add one to preferences."
+
+//d:Error note message: database is inaccessible.
+//l:popup_note_window
+//
+#define qtn_wmlbm_err_db_inaccessible    "Cannot access\ndatabase.\nTry again later."
+
+//d:Info note message: bookmark was saved.
+//l:popup_note_window
+//
+#define text_wml_bm_saved               "Bookmark saved"
+
+//d:Error note message: bookmark was not saved.
+//l:popup_note_window
+//
+#define qtn_wmlbm_bm_not_saved          "Bookmark not saved"
+
+//d:Default name for new bookmark.
+//l:list_single_heading_pane_t1
+//
+#define qtn_wmlbm_default_bm_title      "New bookmark"
+
+//d:Left softkey: (accept typing and activate typed URL address)
+//l:control_pane_t1/opt7
+//
+#define qtn_wml_softk_go                "Go to"
+
+//d:Confirmation query prompt if no URL specified for a bookmark.
+//l:popup_note_window
+//
+#define qtn_wmlbm_query_address         "Address needed.\nAdd an address?"
+
+//d:Information note text in Bookmarks View: name is conflicting with existing name.
+//d:Information note text in Saved Decks View: name is conflicting with existing name.
+//l:popup_note_window
+//
+#define qtn_wmlbm_name_already_used     "Name already in use"
+
+//Saved Pages.
+
+//d:Confirmation query text in Bookmarks View
+//d:Confirmation query text in Saved Decks View
+//l:popup_note_window
+//
+#define qtn_wml_quest_overwrite         "Page already exists\Overwrite?"
+
+//d:Menu item in Saved Decks View
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_list_refresh        "Refresh"
+
+//d:Menu access to saved page management submenu (Saved Pages view)
+//l:list_single_pane_t1_cp2/opt3
+//
+#define qtn_wml_list_manage_sp         "Manage saved pages"
+
+//d:Title for Saved Decks View
+//l:title_pane_t2/opt9
+//
+#define qtn_wml_title_svd_pgs           "Saved pages"
+
+//d:Empty list text for Saved Decks View: displayed if there are no saved pages.
+//l:main_list_empty_pane
+//
+#define qtn_wml_no_svd_pgs              "No saved pages"
+
+//d:Information note text in Saved Decks View: page saved
+//l:popup_note_window
+//
+#define qtn_wml_conf_pages_saved        "Page saved"
+
+//d:Information note text in Saved Decks View
+//l:popup_note_window
+//
+#define qtn_wml_conf_pages_refreshed        "Page refreshed"
+
+//d: Wait note while refreshing a saved deck
+//l: popup_note_wait_window
+//
+#define qtn_wml_page_refreshing "Refreshing page"
+
+//d:Menu item in Bookmarks View: go back to Browser View
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_wml_list_ret_page           "Back to page"
+
+//
+//  Settings texts
+//
+
+
+//d:Browser page info title text
+//l:heading_pane_t1
+#define qtn_browser_query_current_page  "Current page"
+
+
+//d: Browser page info item text
+//l:popup_info_list_pane_t1
+#define qtn_browser_query_current_page_url  "URL"
+
+
+// WmlBrowser Settings/Session listbox items
+
+//d:Browser settings session list item texts
+//l:heading_pane_t1
+//
+#define qtn_wmls_session_info             "Session info"
+
+//d:Format title text in session view.
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_ap              "Access point name:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_bearer_type           "Bearer type:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmls_ses_view_max_speed            "Max. connection speed:"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_bearer_data_call          "Data call"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_bearer_packet_data        "Packet data"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_browser_set_bearer_hscsd            "HSCSD"
+
+//d:Browser settings session list item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_set_auto_detect             "Auto detect"
+
+//d:Browser security item texts
+//l:heading_pane_t1
+//
+#define qtn_wmlsec_security_info        "Security info"
+
+//d:Browser security item texts
+//l:heading_pane_t1
+//
+#define qtn_wmlsec_cert_details       "Certificate details"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_serialno     "Serial number:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_contype       "Connection:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_issuer              "Issuer:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_cert_owner      "Owner:\n%U"
+
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_valid_from      "Valid from:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_valid_to      "Valid to:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_fingerprint     "Fingerprint:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_server        "Server authentication:\n%U"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_con_secur     "Secure"
+
+//d:Browser security item texts
+//l:popup_info_list_pane_t1
+//
+#define qtn_wmlsec_ses_info_con_unsec     "Unsecure"
+
+//d: A list box item referring to settings categorised as Page
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_general       "General"
+
+//d: A list box item referring to settings categorised as General
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_page      "Page"
+
+//d: A list box item referring to settings categorised as Privacy
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_privacy       "Privacy"
+
+//d: When the General Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_general  "General Settings"
+
+//d: When the PageSettings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_page     "Page settings"
+
+//d: When the Privacy Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_privacy      "Privacy settings"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_local_set_default_ap       "Default access point"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:2.8
+//
+#define qtn_browsers_sett_autoload_objects        "Autoload images and objects"
+
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_wmls_local_set_pageoverview        "Mini map"
+
+//d: Selectable text for the Page Overview setting
+//d: Page Overview is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_pageoverview_on "On"
+
+//d: Selectable text for the Page Overview setting
+//d: Page Overview is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_pageoverview_off "Off"
+
+//d:Browser settings main list item texts
+//d:Back list is the History list
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_back_list        "Back list"
+
+//d: Selectable text for the Back list setting
+//d: If On is selected, back list is shown when SK2 Back
+//d: is pressed in page view.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_back_list_on "On"
+
+//d: Selectable text for the Back list setting
+//d: If Off is selected, back list is not shown when SK2 Back
+//d: is pressed in page view.
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_back_list_off "Off"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_auto_refresh        "Automatic page refresh"
+
+//d: Selectable text for the Automatic page refresh setting
+//d: Automatic page refresh is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_auto_refresh_on "On"
+
+//d: Selectable text for the Automatic page refresh setting
+//d: Automatic page refresh is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browsers_sett_val_auto_refresh_off "Off"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_all_small        "Smallest"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_smaller          "Small"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_normal           "Normal"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+
+#define qtn_xhtml_settings_larger           "Large"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_xhtml_settings_all_large        "Largest"
+
+//d: Browser character encoding in browser settings: ISO 8859-2
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_2 "ISO 8859-2"
+
+//d: Browser character encoding in browser settings: ISO 8859-4
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_4 "ISO 8859-4"
+
+//d: Browser character encoding in browser settings: ISO 8859-5
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_5 "ISO 8859-5"
+
+//d: Browser character encoding in browser settings: ISO 8859-7
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_7 "ISO 8859-7"
+
+//d: Browser character encoding in browser settings: ISO 8859-9
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_charenc_iso_8859_9 "ISO 8859-9"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-6 (Arabic)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88596 "Arabic (ISO)"
+
+
+//d: Browser default character encoding in browser settings: Windows-1256 (Arabic)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1256 "Arabic (Windows)"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-8 (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88598 "Hebrew (ISO-Visual)"
+
+
+//d: Browser default character encoding in browser settings: ISO 8859-8-i (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_88598_i "Hebrew (ISO-Logical)"
+
+//d: Browser default character encoding in browser settings: Windows-1255 (Hebrew)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1255 "Hebrew (Windows)"
+
+//d: Browser default character encoding in browser settings: Windows-1250
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1250 "Windows-1250"
+
+//d: Browser default character encoding in browser settings: Windows-1251
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1251 "Windows-1251"
+
+//d: Browser default character encoding in browser settings: Windows-1253
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1253 "Windows-1253"
+
+//d: Browser default character encoding in browser settings: Windows-1254
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1254 "Windows-1254"
+
+//d: Browser default character encoding in browser settings: Windows-1257
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1257 "Windows-1257"
+
+//d: Browser default character encoding in browser settings: Windows-1258
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_1258 "Windows-1258"
+
+//d: Browser default character encoding in browser settings: Automatic
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_automatic "Automatic"
+
+//d: Browser default character encoding in browser settings: Tis-620
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_tis_620 "Thai"
+
+
+//d: Browser default character encoding in browser settings: Windows-874
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_windows_874 "Thai (Windows-874)"
+
+
+//d: Browser default character encoding in browser settings: Shift_JIS
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_jis "shift_jis"
+
+//d: Browser default character encoding in browser settings: euc-jp
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_euc_jp "euc-jp"
+
+//d: Browser default character encoding in browser settings: iso-2022-jp
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iso_2022_jp "iso-2022-jp"
+
+//d: Browser default character encoding in browser settings: Ucs-2
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_ucs_2 "Unicode (ucs-2)"
+
+//d: Browser default character encoding in browser settings: KOI8-R
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_koi8_r "KOI8-R"
+
+//d: Browser default character encoding in browser settings: KOI8-U
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_shift_koi8_u "KOI8-U"
+
+//d: Browser default character encoding in browser settings: ISCII
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_iscii "ISCII"
+
+//d: Browser default character encoding in browser settings: Korean (Euc-Kr)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_euc_kr "Korean (Euc-Kr)"
+
+//d: Browser default character encoding in browser settings: Korean (KSC5601)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_defenc_ksc_5601 "Korean (KSC5601)"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_save_receipt           "Save receipt"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_set_wallet_auto           "Automatic eWallet use"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_cookie_allow          "Allow"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_sett_cookie_reject         "Reject"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wtai_dtmf_alcon          "Always confirm"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wtai_dtmf_one            "Confirm once"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_save_to_notepad          "To notepad"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_save_not               "Never"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wall_auto_on           "On"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_wall_auto_off           "Off"
+
+
+// Settings Menu texts
+
+//d:Browser settings main menu
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wmls_local_set_opt_change   "Change"
+
+//d:Invalid certificate indicator dialog's message body
+//l:popup_query_wml_sign_window_2
+//
+// #define qtn_wmlsec_invalid_cert         "Server could not be authenticated\nReason:\n%U"
+
+//d:Certificate error: Server certificate not valid yet
+//l:popup_query_wml_sign_window_2
+//
+// #define text_wml_certificate_sc_not_val "Server certificate not valid yet"
+
+//d:Authentication of the WML card failed.
+//l:popup_note_window
+#define text_wml_auth_fail_retry_query  "Authorisation failed. Try again?"
+
+//d:if the secured connection established.
+//l:popup_note_window
+#define qtn_wmlsec_conn_secured         "Connection secured to %U"
+
+//d:when anonymous connection established to server
+//l:popup_note_window
+#define qtn_wmlsec_conn_sec_unk_serv    "Connection secured to unknown server"
+
+//d:Confirmation note text about the closure of the active connection
+//l:popup_note_window
+//
+#define qtn_ics_cnote_disconn_from_service        "Connection to service is closed"
+
+//d:Browser settings font size
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_pref_fontsize  "Font size"
+
+//d:Browser settings cookies
+//l:list_setting_pane_t1
+//
+#define qtn_wmls_sett_cookies       "Cookies"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_image_on "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_image_off    "Off"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_expand_on    "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//
+#define qtn_wmls_local_var_expand_off   "Off"
+
+//d:Confirmation query shown if the Search Menu item is selected, and the Search Web Setting value is empty
+//d: Accepting this query opens the search page setting for editing
+//l: popup_note_window
+#define qtn_browser_query_search_url  "Search page address is missing. Define now?"
+
+//d: Prompt dialog  shown to enter a url for the Search Page setting
+//l: popup_query_data_window
+#define qtn_wml_prompt_search_url  "Search page address"
+
+//d: Browser default character encoding in browser settings
+//l: list_setting_pane_t1
+//
+#define qtn_brow_sett_defenc "Default encoding"
+
+// Text used by Progress bar
+
+//d: Percent mark ("%") to be used in the progress bar to indicate the percentage of the data loaded at the moment.
+//d: %N is replaced by the actual percentage number.
+//l: none
+#define qtn_wml_unit_percent      "%N %"
+
+
+//d: Size of data in kilo bytes
+//d: text used by progress bar
+//l: none
+#define qtn_wml_unit_kb     "%N kB"
+
+//d: Size of data in mega bytes
+//d: text used by progress bar
+//l: none
+#define qtn_wml_unit_mb     "%U MB"
+
+//d: Browser default character encoding in browser settings: ISO 8859-1 (Latin 1)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_latin1 "Latin"
+
+//d: Browser default character encoding in browser settings: GB 2312 (Simplified Chinese)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_gb2312 "Simplified Chinese"
+
+//d: Browser default character encoding in browser settings: Big5 (Traditional Chinese)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_big5 "Traditional Chinese"
+
+//d: Browser default character encoding in browser settings: UTF-8 (Unicode)
+//l: list_set_graphic_pane_t1
+//
+#define qtn_brow_sett_defenc_utf8 "Unicode (UTF-8)"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_full_screen        "Full screen"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_full_screen_normal "Normal"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_full_screen_full_screen "Full screen"
+
+//d:Browser settings to display softkeys
+//l:list_setting_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys        "Display softkeys"
+
+//d: Selectable text for the softkey setting
+//d: Will display the softkeys if on
+//l: set_value_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys_on "On"
+
+//d: Selectable text for the softkey setting
+//d: Will not display the softkeys if off
+//l: set_value_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_softkeys_off "Off"
+
+//d:Browser settings main list item texts
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_search        "Search page address"
+
+//d:Browser settings main list item texts
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_url_suffix        "URL Suffix"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_media_volume       "Media volume"
+
+//d:Browser settings selectable item texts volume muted
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_muted  "Muted"
+
+//d:Browser settings selectable item texts volume level 1
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_1  "Level 1"
+
+//d:Browser settings selectable item texts volume level 2
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_2  "Level 2"
+
+//d:Browser settings selectable item texts volume level 3
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_3  "Level 3"
+
+//d:Browser settings selectable item texts volume level 4
+//l:list_set_graphic_pane_t1
+//
+#define qtn_browsers_sett_volume_4  "Level 4"
+
+//d: Setting for showing or hiding security related warnings
+//l: list_setting_pane_t1
+#define qtn_browser_sett_security  "Security notifications"
+
+//d: Show security related warnings
+//l: list_set_graphic_pane_t1
+#define qtn_browser_sett_item_show_all "Show"
+
+//d: Hide security related warnings
+//l: list_set_graphic_pane_t1
+#define qtn_browser_sett_item_hide_all "Hide"
+
+//d: Setting for open downloading files progressively
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_open_loading  "Open while loading"
+
+//d: Automatically open downloaded files progressively
+//l: list_set_graphic_pane_t1
+#define qtn_brow_sett_open_downloads_yes          "Yes"
+//
+#define qtn_browser_list_check_for_updates          "Update Browser"
+
+//d:Browser main menu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_browser_version         "Browser Version"
+
+//d:Browser main menu
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_browser_help    "Browser Help"
+//
+#define qtn_brow_sett_product_update_manual "Manual"
+#define qtn_brow_sett_product_update_auto "Automatic"
+
+//d: Not automatically open downloaded files progressively
+//l: list_set_graphic_pane_t1
+#define qtn_brow_sett_open_downloads_no "No"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+ //
+#define qtn_wmls_local_set_imei_notif   "IMEI notification"
+
+//d:Enables IMEI sending
+//d:Browser settings selectable item text
+//l:list_set_graphic_pane_t1
+#define qtn_wmls_local_set_imei_notif_enabled   "Enabled"
+
+
+//d:Disables IMEI sending
+//d:Browser settings selectable item text
+//l:list_set_graphic_pane_t1
+#define qtn_wmls_local_set_imei_notif_disabled  "Disabled"
+
+
+//d: Boomark folder "Download applications"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_applications  "Download applications"
+
+//d: Boomark folder "Download images"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_images        "Download images"
+
+//d: Boomark folder "Download tones"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_tones         "Download tones"
+
+//d: Boomark folder "Download videos"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_videos        "Download videos"
+
+//d: Boomark folder "Download skins"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_skins         "Download skins"
+
+//d: Boomark folder "Download Music"
+//l: list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_download_music         "Download music"
+
+//d: Boomark folder title "Download applications"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_applications  "Download applications"
+
+//d: Boomark folder title "Download images"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_images        "Download images"
+
+//d: Boomark folder title "Download tones"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_tones         "Download tones"
+
+//d: Boomark folder title "Download videos"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_videos        "Download videos"
+
+//d: Boomark folder title "Download skins"
+//l: title_pane_t2/opt9
+//
+#define qtn_browserbm_folder_title_download_skins         "Download skins"
+
+//d: Boomark folder title "Download music"
+//l: title_pane_t2/opt9
+//w:
+//r:3.0
+//
+#define qtn_browserbm_folder_title_download_music         "Download music"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_adaptive_bookmarks     "Recent URLs"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_on    "On"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_hide_folder    "Hide folder"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_adaptive_bookmarks_off    "Off"
+
+
+//d:Empty list text for Recent URLs Folder: displayed if there are no Recent URLs.
+//l:main_list_empty_pane
+//
+#define qtn_browserbm_no_adaptive_bookmarks              "No recent URLs"
+
+//d:Text for Recent URLs Folder in Bookmarks view.
+//l:list_single_graphic_pane_t1
+//
+#define qtn_browserbm_folder_adaptive_bookmarks              "Recent URLs"
+
+//d: Title of Recent URLs view
+//l: title_pane_t2/opt9
+//w:
+//r:3.2
+//
+#define qtn_browserbm_title_adaptive_bookmarks                "Recent URLs"
+
+//d: Confirmation query shown before deleting all  Recent URLs.
+//l:popup_note_window
+//
+#define qtn_browserbm_query_delete_adap_bookmarks              "Delete all recent URLs?"
+
+//d: Options menu item for copying Recent URLs to Bookmarks Folder.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_options_copy_to_bookmarks              "Copy to bookmarks"
+
+//d: Options submenu item for copying Recent URLs to Bookmarks Folder.
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browserbm_options_copy_to_bookmarks_sm            "Copy to bookmarks"
+//d: Options menu item for deleting all Recent URLs.
+//l:list_single_pane_t1_cp2
+//
+#define qtn_browserbm_options_clear_adaptive_bookmarks              "Clear Recent URLs"
+
+//d: Confirmation note shown when 1 Adaptive Bookmark has been copied to root level of Bookmarks View.
+//l:popup_note_window
+//
+#define qtn_browserbm_note_adaptive_bookmark_copied              "Copied to bookmarks"
+
+//d: Confirmation note shown when more than one Recent URLs (%N is the number of Recent URLs) has been copied to root level of Bookmarks View.
+//l:popup_note_window
+//
+#define qtn_browserbm_note_adaptive_bookmarks_copied              "%N items copied to bookmarks"
+
+//d: Options menu item for restarting the browser
+//l:list_single_pane_t1_cp2
+//
+#define qtn_wml_opt_restart              "Restart"
+
+//d:Exit confirmation in browser settings
+//l:list_setting_pane_t1
+//
+#define qtn_wml_setting_exit_confirm      "Exit confirmation"
+
+//d:Selectable item texts for Exit confirmation setting
+//d:Activate the exit confirmation prompt.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_exit_on    "On"
+
+//d:Selectable item texts for Exit confirmation setting
+//d:Deactivate the exit confirmation prompt.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_exit_off    "Off"
+
+//d:Send referrer heading in browser settings
+//l:list_setting_pane_t1
+#define qtn_wml_setting_referrer    "Send referrer heading"
+
+//d:Selectable item texts for Send referrer setting.
+//d:Activate the sending of the referrer header.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_refer_on    "On"
+
+//d:Selectable item texts for Send referrer setting.
+//d:Deactivate the sending of the referrer header.
+//l:list_set_graphic_pane_t1
+#define qtn_wml_setting_refer_off   "Off"
+
+//d: This is a setting item which controls
+//d: whether external style sheets are fetched
+//l: list_setting_pane_t1
+#define qtn_browsers_sett_external_css          "Rendering quality"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_scripting        "Java/Ecma Script"
+
+//d: Enables Java and ECMA scripts to be executed in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_scripting_enable        "Enable"
+
+//d: Disables Java and ECMA scripts to be executed in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_scripting_disable        "Disable"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//r: 3.2
+//
+#define qtn_browsers_sett_scriptlog        "Javascript notifications"
+
+//d: Disables Java and ECMA script logging output in browser
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_disable        "No notification"
+
+//d: Enables Java and ECMA script log to be output to a log file
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_file        "Log to file"
+
+//d: Enables Java and ECMA script log to be output to GUI console
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_console        "Pop-up notes"
+
+//d: Enables Java and ECMA script log to be output to both GUI console and file
+//l:list_set_graphic_pane_t1
+//r: 3.2
+#define qtn_browsers_sett_scriptlog_to_console_file        "Log to file and as pop-up notes"
+
+
+//d:Menu item to clear all window(s) page script logging
+//l: list_single_popup_submenu_pane_t1
+//r: 3.2
+//
+#define qtn_browser_list_clear_scriptlog   "Clear Javascript Log"
+
+//d: Browser Privacy main menu
+//l: list_single_pane_t1_cp2/opt3
+// will contain 5 submenu options
+#define qtn_browser_list_privacy             "Privacy"
+
+
+//d:Menu item to clear all privacy related data (cache, cookies, history, form & password data)
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_privacy_clear_all   "Clear all privacy data"
+
+
+//d:Menu item to clear all the stored cookies
+//l:list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_delete_cookies   "Clear cookies"
+
+//d:Menu item to clear all window(s) page load history data
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_clear_history   "Clear history"
+
+
+//d:Menu item to clear all form and password data
+//l: list_single_popup_submenu_pane_t1
+//
+#define qtn_browser_list_privacy_clear_form_data   "Clear form data"
+
+
+//d:Information note text after clearing history
+//l: popup_note_window
+//
+#define qtn_browser_note_history_cleared    "History and recent URLs cleared"
+
+
+//d:Information note text after clearing form data
+//l: popup_note_window
+//
+#define qtn_browser_note_form_and_passwd_data_cleared  "Form and password data cleared"
+
+
+//d:Information note text after deleting cookies
+//l:popup_note_window
+//
+#define qtn_browser_note_cookies_deleted   "Cookies deleted"
+
+//d:Information note text after clearing all privacy data
+//l: popup_note_window
+//
+#define qtn_browser_note_clear_all_privacy_done   "All privacy data cleared"
+
+
+//d:Menu item in Preferences->Options->Info menu
+//l:list_single_pane_t1_cp2
+#define qtn_wml_opt_about_product "Name and version"
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+#define qtn_browsers_title_about "Name and Version"
+
+//d:Menu item in Preferences->Options->Info menu
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_wml_opt_about_product_oss "About product"
+
+//d:Text in About Product information note's heading
+//l:heading_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_about_oss "About product"
+
+//d:Text in About Product information note, shown in the first line
+//l:popup_info_list_pane_t1
+#define qtn_browsers_browser_name "Series 60 Mobile Browser"
+
+//d:Text in About Product information note, the first %U is the browser version number, the second is the Browser build number
+//l: heading_pane_t1
+#define qtn_browsers_about_version_label           "Version: %0U (%1U)"
+
+//d:Browser main menu
+//l:heading_pane_t1
+#define qtn_browser_query_browser_version         "Browser Version"
+
+//d:Text in About Product information note, the list of installed plugins comes after this
+//l:popup_info_list_pane_t1
+#define qtn_browsers_plugins_label "Plug-Ins:"
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+#define qtn_browsers_sett_homepage   "Home page"
+
+//d:Browser settings main list item texts for OSS browser
+//l:list_setting_pane_t1
+//w:
+//r: 3.0
+//
+#define qtn_browsers_sett_startpage   "Startpage"
+
+//d:Browser settings selectable item texts access point home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_ap_home_page  "Access point home page"
+
+//d:Browser settings selectable item texts user-defined home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_own_home_page  "New address"
+
+//d:Browser settings selectable item texts for selecting bookmark view
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_homepage_bookmarks  "Bookmarks"
+
+//d:Browser submenu item for Set as Home page
+//l:list_single_pane_t1_cp2
+#define qtn_browserbm_list_set_as_home_page  "Set as Home Page"
+
+//d:Browser submenu item for Set as Home page
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browserbm_list_set_as_home_page_sm  "Set as Home Page"
+
+//d:Browser menu item for Home page launch
+//l:list_single_popup_submenu_pane_t1
+#define qtn_browser_list_home  "Home"
+
+//d: Prompt dialog  shown to enter a url for the Home Page setting
+//l: popup_query_data_window
+#define qtn_wml_prompt_homepage_url  "New address"
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+#define qtn_browserbm_query_set_as_home_page    "Do you want to use this bookmark as home page?"
+
+//d:Browser settings selectable item texts user-defined home page
+//l:list_set_graphic_pane_t1
+#define qtn_browsers_sett_use_current_home_page  "Use current page"
+
+
+//d:Text in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_uploaded "Uploaded:\n%0U / %1U "
+
+//d:Unit in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_unit_kbyte "kB"
+
+//d:Unit in upload progress note.
+//l:popup_note_window
+#define qtn_browser_upload_progressnote_unit_mb "MB"
+
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_user_defined "User defined"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_always_ask "Always ask"
+
+//d:Browser settings selectable item texts
+//l:list_set_graphic_pane_t1
+#define qtn_wml_settings_access_point_ask_when_needed "Ask when needed"
+
+//d:Browser gotopane default text
+//l:query_popup_data_pane_t1/opt4
+#define qtn_browser_goto_text_enter_address  "Enter address"
+
+//d:Download already in progress info note.
+//l:popup_note_window
+//w:
+//r:2.8
+//
+#define qtn_browser_note_object_downloading "Downloading"
+
+//=============================================================================
+// OSS Browser Support
+//=============================================================================
+
+// ==========================================================
+// Finding
+// ==========================================================
+//d: Browser Find main menu
+//l: list_single_popup_menu_pane_1
+//w:
+//r:3.0
+//
+// #define qtn_options_find                  "Find item"
+
+//d: Menu item for searching for a keyword
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword               "Keyword"
+
+//d: Menu item for searching for a keyword
+//l: list_single_pane_t1_cp2
+//w:
+//r: 5.0
+//
+#define qtn_browser_find_keyword_mm               "Find Keyword"
+
+//d: Menu item for searching the next matching string in the page
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword_search_for_next               "Search for next"
+
+//d: Menu item for searching the previous matching string in the page
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.0
+//
+#define qtn_browser_find_keyword_search_for_previous              "Search for previous"
+
+//d: Tooltip shown when there were no matches of the search
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_no_matches               "No matches"
+
+//d:  Tooltip shownwhen the search has reached the end of the page
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_wraparound              "Wraparound"
+
+//d:  Tooltip shownwhen the search has reached the starting point
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_keyword_find_all_content_searched              "All the content searched"
+
+// ==========================================================
+// Zooming
+// ==========================================================
+
+//d: Browser zooming main menu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_wml_option_zoom                             "Zoom"
+
+//d: Options menu list item for the new Zoom Mode. Options>View>Zoom
+//l: list_single_popup_submenu_pane_t1
+//r: Browser 7.x
+//
+#define qtn_browser_list_zoom_mode                      "Zoom"
+
+//d: When zoom level of images change, new level is shown in title pane
+//l: navi_navi_text_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_zoom_level                           "Zoom level: %U%"
+
+//d: Zoom levels displayed as zoom menu subitems
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_image_zoom_level                           "%U%"
+
+
+//d: When zoom level of text change, new level is shown in title pane
+//l: navi_navi_text_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_text_size                           "Text size: %U%"
+
+//d: When zoom level of text changes, new level is shown in tooltip
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_text_size_tooltip                    "Text size: %U%"
+
+//d: When zoom level of images change, new level is shown in tooltip
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_zoom_level_tooltip                   "Zoom level: %U%"
+
+//d: Tooltip that displays when the maximum zoom level has been reached
+//l: popup_preview_text_window/opt3
+//r: 3.2.3, 5.0+, browser 7.x
+//
+#define qtn_browser_zoom_level_tooltip_maximum           "Maximum zoom level"
+
+//d: Tooltip that displays when the minimum zoom level has been reached
+//l: popup_preview_text_window/opt3
+//r: 3.2.3, 5.0+, browser 7.x
+//
+#define qtn_browser_zoom_level_tooltip_minimum           "Minimum zoom level"
+
+//=============================================================================
+// Multiple Windows Support
+//=============================================================================
+
+
+//d: menu item. Selecting this will open the current url link
+//l: list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_open_link_main                      "Open link"
+
+
+//d: Submenu item. Selecting this will open the current url link in
+//d: a new window
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_open_in_new_window                 "Open link in new window"
+
+//d: Download main menu, contains download page menuitems.
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.1
+//
+#define  qtn_browserbm_options_submenu_download             "Download"
+
+//d: Selecting this will open the current url link.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_download_page                 "Download page"
+
+//d: Selecting this will open the current url link in a new window.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browserbm_options_download_in_new_window        "Download page in new window"
+
+//d: Menu access to pop-ups submenu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows "Windows"
+
+//d: Opens a selection dialog which will allow the
+//d: the user to switch between all open windows.
+//d: Only shown if more than one window is opened.
+//l: list_single_popup_submenu_pane_t1
+//r:3.0
+//
+#define qtn_browser_list_switch_window "Windows"
+
+//d: Closes the current window.
+//l: list_single_pane_t1_cp2
+//r:3.0
+//
+#define qtn_browser_list_close_window "Close"
+
+//d: Submenu item. Selecting this item allows pop-up windows to be opened from
+//d: the current webpage's domain. This applies to non-user initiated pop-ups.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_browser_list_windows_allow "Allow pop-ups"
+
+//d: Submenu item. Selecting this item blocks pop-up windows being opened from
+//d: the current webpage's domain. This applies to non-user initiated pop-ups.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.0
+//
+#define  qtn_browser_list_windows_block "Block pop-ups"
+
+//d: The header for an option list dialog. The list contains
+//d: all open windows, selection will make that window active.
+//l: heading_pane_t1
+//r:3.0
+//
+#define qtn_browser_query_switch_window_header "Switch to:"
+
+//d: A confirmation dialog responding to a user
+//d: request to close the current window
+//l: popup_note_window
+//r:3.0
+//
+#define qtn_browser_query_close_window "Close current window?"
+
+//d: A pop-up note to indicate to the user that the maximum number
+//d: of popup windows allowed has been reached, no more may be opened
+//l: popup_note_window
+//w:
+//r:3.0
+//
+#define qtn_browser_note_pop_up_max_reached "Cannot open pop-up, maximum number reached."
+
+//d: An information note, indicating that a new window is being opened
+//d: will be added to the whitelist
+//l: popup_preview_text_window/opt3
+//r:3.0
+//
+#define qtn_browser_note_pop_up_window_opened "Opening new window"
+
+//-----------------------------------------------------------------------------
+// Settings for Multiple Windows
+//
+//d: Browser setting for enabling popup blocking
+//l: list_setting_pane_t1
+//w:
+//r:3.0
+//
+#define  qtn_brow_sett_pop_up_blocking "Pop-up blocking"
+
+//d: Selectable text for the Popup blocking setting
+//d: Popup blocking is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking_on "Enabled"
+
+//d: Selectable text for the Popup blocking setting
+//d: Popup blocking is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_brow_sett_pop_up_blocking_off "Disabled"
+
+// ==========================================================
+// Subscribe to
+// ==========================================================
+
+//d: Browser Subscribe to main menu
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_list_subscribe_to  "Subscribe to feeds"
+
+//-----------------------------------------------------------------------------
+// Popup dialog - stored preference data
+//
+
+//d: Tooltip note notifying the user that pop-ups have been disabled
+//d: and indicating to the user that they must use the options menu
+//d: to allow pop-ups for the current page
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.0
+//
+#define qtn_browser_multiple_windows_tooltip "Pop-up window was blocked. Pop-ups can be enabled from Options"
+
+//d:Text for RSS Folder in Bookmarks view.
+//l:list_single_graphic_pane_t1
+//w:
+//r:3.0
+//
+#define qtn_apps_feeds_list              "Web feeds"
+
+//----------------------------------------------------------------------------
+// Show Miniature
+//
+
+//d:Menu item to show Thumbnail view of the currently visited page.
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_list_miniature_show_mini    "Page overview"
+
+//--------------------------------------------------------------------------------
+// Smart Text recognition
+//
+
+//d:Browser setting for smart link detection
+//l:list_setting_pane_t1
+//
+#define qtn_browsers_sett_smartlink        "Smart text recognition"
+
+//d: Enables automatic detection of phone numbers and email addresses when scrolling
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_brow_sett_smartlink_on        "On"
+
+//d: Disables Jutomatic detection of phone numbers and email addresses when scrolling
+//l:list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_brow_sett_smartlink_off       "Off"
+
+
+//----------------------------------------------------------------------------
+// Page overview
+//
+
+//d:Tooltip when the Page Overview is switched on by Shortcut key 7.
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.0
+//
+#define qtn_browser_tooltip_page_overview_on    "Mini map on"
+
+//d:Tooltip when the Page Overview is switched off by Shortcut key 7.
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.0
+//
+#define qtn_browser_tooltip_page_overview_off   "Mini map off"
+
+//-----------------------------------------------------------------------------
+// Form Data Saving
+//
+
+//d: Browser setting for Form data saving
+//l: list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_form_data_saving  "Form data saving"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is enabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_on   "Form and password data"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_off  "Off"
+
+//d: Selectable text for the Form data saving setting
+//d: Saving passwords is disabled if this is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_brow_sett_form_data_saving_only     "Form data only"
+
+//d:Clear history and Recent URLs query string
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_privacy_query_clear_history     "Clear history and recent URLs?"
+
+
+//d:Delete Form Data and Password query string
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_form_data_delete_all        "Clear form and password data?"
+
+//d:Delete all privacy data query string
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_privacy_delete_all      "Clear all privacy data?"
+
+
+//d:Delete Form Password Data query string
+//l:popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_form_data_delete_password       "Clear password data?"
+//----------------------------------------------------------------------------
+// Window selection
+//
+
+//d:Menu item to selects the focused window.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_select_window          "Select"
+
+//d:Menu item to close all windows except the current one.
+//l:list_single_pane_t1_cp2
+//w:
+//r:3.1
+//
+#define qtn_browser_list_close_all_but_this     "Close all but this window"
+
+//----------------------------------------------------------------------------
+// Web feeds settings
+//
+
+//d: A list box item referring to settings categorised as Web Feeds
+//d: When selected a settings list is displayed containing those settings
+//l: list_single_large_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_fldr_feeds     "Web feeds"
+
+//d: When the Web feeds Settings are opened, this should be displayed in the title pane
+//l: title_pane_t2/opt9
+//w:
+//r:3.1
+//
+#define qtn_browsers_title_feeds    "Web feeds settings"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating      "Automatic updating"
+
+//d: Selectable text for the Automatic updating setting
+//d: If Off is selected, automatic updating does not occur
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating_off "Off"
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 15 minutes
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_15min "Every 15 minutes"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every hour
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_hourly "Every hour"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done every 4 hours
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_4hours "Every 4 hours"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done daily
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_daily "Every day"
+
+
+//d: Selectable text for the Automatic updating setting
+//d: Autoupdating is done weekly
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_feeds_updating_interval_weekly "Every week"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_autoupdating_ap       "Update via access point"
+
+//d:Browser settings main list item texts for Automatic updating of web feeds while roaming
+//l: list_setting_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_autoupdating_roaming              "Update while roaming"
+
+//d: Selectable text for the Automatic update setting while roaming
+//d: If On is selected, automatic update happens even if the user is roaming
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_val_autoupdating_roaming_on       "On"
+
+//d: Selectable text for the Automatic update setting while roaming
+//d: If Off is selected, automatic update does not occur while roaming
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.2
+//
+#define qtn_browsers_sett_val_autoupdating_roaming_off      "Off"
+
+//d:Browser settings main list item texts
+//l:popup_note_window
+//
+
+#define qtn_browsers_sett_dataquery_autoupdate_ap "The access point has to be defined to enable automatic updating."
+
+//d: When the user enables automatic updating of feeds, a confirmation query is displayed to the user
+//d: noting that turning the feature on may cost them money
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browsers_sett_dataquery_autoupdatewarn "Enabling automatic updating may increase your monthly phone bill"
+//d: Query user to close existing WML page when activating a link to a WML page
+//d: from another window.  Only one WML page can be opened at once.
+//l: popup_note_window
+//w:
+//r:3.1
+//
+#define qtn_browser_multiple_windows_wml  "WML page in another window needs to be closed to proceed, close it?"
+
+//----------------------------------------------------------------------------
+// ToolBar Strings
+//
+//d: view sub menu item to show the toolbar
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_list_toolbar           "Toolbar"
+//d: Tooltip that is showns when the toolbar is activated via the Options menu
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_tooltip_toolbar  "Click an empty area of the page to show the toolbar"
+
+
+//d:Browser settings main list item texts
+//l:list_setting_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_objects           "Load content"
+
+
+//d: Selectable text for the Load Content setting
+//d: Only text is loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_text              "Text only"
+
+
+//d: Selectable text for the Load Content setting
+//d: Images are loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_images_no_flash            "Images no flash"
+
+
+//d: Selectable text for the Load Content setting
+//d: All content is loaded if this option is selected
+//l: list_set_graphic_pane_t1
+//w:
+//r:3.1
+//
+#define qtn_browser_sett_autoload_all               "All"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an anchor
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_list_show_address           "Show address"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_save_image_to_gallery       "Save to gallery"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_list_open_to_viewer         "Open to viewer"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_options_call                        "Call"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_create_sms                  "Create text message"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on a phone number or e-mail
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_options_contacts                    "Add to contacts"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an e-mail
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_create_email                 "Create e-mail message"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_load_image                  "Load image"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_load_all_images             "Load all images"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_enable_autoload_images      "Enable images"
+
+//d: Label for stylus activated popup.
+//d: Popup is shown when user taps on an image placeholder
+//l: list_single_pane_t1_cp2
+//r: 3.2
+//
+#define qtn_browser_enable_autoload_all         "Enable images and flash"
+
+
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+#define qtn_browser_query_set_as_home_page         "Set as home page?"
+
+
+
+// -----------------------------------------------------------------
+// Toolbar related strings
+// -----------------------------------------------------------------
+
+//d: Tooltip that is showns when the toolbar is activated via the Options menu
+//l: popup_preview_text_window/opt3
+//w:
+//r:3.1
+//
+#define qtn_browser_tooltip_toolbar  "Click an empty area of the page to show the toolbar"
+
+
+
+// -----------------------------------------------------------------
+// Toolbar Button Command Settings Labels
+// -----------------------------------------------------------------
+
+//d: Toolbar Button 1 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button1         "Button 1"
+
+//d: Toolbar Button 2 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button2         "Button 2"
+
+//d: Toolbar Button 3 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button3         "Button 3"
+
+//d: Toolbar Button 4 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button4         "Button 4"
+
+//d: Toolbar Button 5 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button5         "Button 5"
+
+//d: Toolbar Button 6 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button6         "Button 6"
+
+//d: Toolbar Button 7 Command
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_toolbar_button7         "Button 7"
+
+
+// -----------------------------------------------------------------
+// Toolbar Button Command Values
+// -----------------------------------------------------------------
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_keymap             "Display key map"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_go_to_web_address       "Go to web address"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_list_bookmarks          "Bookmarks"             //(toolbar only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_save_as_bookmark        "Save as bookmark"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_recent_urls             "Recent URLs"           //(toolbar only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_find_keyword            "Find keyword"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_reload                  "Reload"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_miniature_show          "Page overview"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_previous_page           "Back one page"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_go_to_hompage           "Go to homepage"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_zoom_in                 "Zoom in"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_zoom_out                "Zoom out"
+
+//d: Preferences for Zoom Mode: Options>Preferences>Shortcut keys><N>Key > Zoom Mode
+//l: list_set_graphic_pane_t1
+//r: Browser 7.x
+//
+#define qtn_browser_setting_zoom_mode               "Zoom Mode"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_settings                "Settings"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_rotate_screen           "Rotate screen"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_subscribe_to_feeds      "Subscribe to feeds"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_manage_bookmarks        "Manage bookmarks"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_visual_history          "History"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_view_images             "View images"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_save_page               "Save page"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_send                    "Send"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_switch_window           "Switch window"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_toolbar            "Display toolbar"       // (keymap only)
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_show_help               "Help"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_none                    "None"
+
+//d: Toolbar button command Display Shortcut Keymap
+//l: list_set_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_full_screen             "Full screen"
+
+// -----------------------------------------------------------------
+// Toolbar Error Message
+// -----------------------------------------------------------------
+
+//d: Pop Up note if all toolbar buttons are set to "None"
+//l: popup_note_window
+//r: 5.0
+#define qtn_browser_setting_toolbar_save_dialog     "You must assign a function to at least one of the toolbar buttons!"
+
+
+// -----------------------------------------------------------------
+// Toolbar On/Off Setting Values
+// -----------------------------------------------------------------
+
+//d:Setting for Enabling or Disabling the Toolbar
+//l: list_setting_pane_t1
+//r: 5.0
+#define qtn_browser_setting_toolbar_on_off          "Toolbar On/Off"
+
+//d: Selectable text for the Toolbar On/Off setting
+//l: set_value_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_toolbar_on              "On"
+
+//d: Selectable text for the Toolbar On/Off setting
+//l: set_value_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_toolbar_off             "Off"
+
+
+// -----------------------------------------------------------------
+// Toolbar Settings group label and title strings
+// -----------------------------------------------------------------
+//d: Toolbar Settings group label
+//l:list_single_graphic_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_group_toolbar           "Toolbar"
+
+//Toolbar Settings Group Title Pane
+//l: title_pane_t2/opt9
+//r:5.0
+//
+#define qtn_browser_setting_group_title_toolbar     "Toolbar settings"
+
+
+// -----------------------------------------------------------------
+// ShortCut Keys Settings group label and title strings
+// -----------------------------------------------------------------
+
+//Shortcut Keys Settings group label
+//l:list_single_graphic_pane_t1
+//r:5.0
+//
+#define qtn_browser_setting_group_shortcuts         "Shortcut keys"
+
+//Shortcut Keys Settings Group Title Pane
+//l: title_pane_t2/opt9
+//r:5.0
+//
+#define qtn_browser_setting_group_title_shortcuts   "Shortcut key settings"
+
+
+// Shortcut Keys labels for settings
+
+//d: Shortcut key setting label for key "1"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key1          "1 Key"
+
+//d: Shortcut key setting label for key "2"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key2          "2 Key"
+
+//d: Shortcut key setting label for key "3"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key3          "3 Key"
+
+//d: Shortcut key setting label for key "4"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key4          "4 Key"
+
+//d: Shortcut key setting label for key "5"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key5          "5 Key"
+
+//d: Shortcut key setting label for key "6"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key6          "6 Key"
+
+//d: Shortcut key setting label for key "7"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key7          "7 Key"
+
+//d: Shortcut key setting label for key "8"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key8          "8 Key"
+
+//d: Shortcut key setting label for key "9"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key9          "9 Key"
+
+//d: Shortcut key setting label for key "0"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_key0          "0 Key"
+
+//d: Shortcut key setting label for key "*"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_starkey       "* Key"
+
+//d: Shortcut key setting label for key "#"
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browser_setting_shortcuts_hashkey       "# Key"
+
+//d:List of feeds to choose from .
+//l:heading_pane_t1
+//r:5.0
+//
+#define qtn_browser_subscribe_list      "Subscribe to"
+
+//d: Options menu item for displaying the shortcut keymap in a browser submenu
+//l: list_single_popup_submenu_pane_t1
+//r: 3.2.3, 5.0+
+#define qtn_browser_list_show_shortcut_keymap         "Show Shortcut Keymap"
+
+//d: Options menu list item for displaying the shortcut keymap in the top level browser menu
+//l: list_single_pane_t1_cp2
+//r: 3.2.3, 5.0+, browser 7.x
+#define qtn_browser_list_main_show_shortcuts          "Show shortcuts"
+
+//d:Command text associated to a softkey in the control pane.
+//d:Configure Keymap functionality.
+//l:control_pane_t1/opt7
+//
+#define text_softkey_configure "Configure"
+
+// -----------------------------------------------------------------
+// ShortCut Keymap text strings
+// -----------------------------------------------------------------
+
+//d: Shortcut key function Display Keymap
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_keymap             "Show Keymap"
+
+//d: Shortcut key function Go To Web Address
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_go_to_web_address       "Go to Web Address"
+
+//d: Shortcut key function Save as bookmark
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_save_as_bookmark        "Save as Bookmark"
+
+//d: Shortcut key function Find Keyword
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_find_keyword            "Find Keyword"
+
+//d: Shortcut key function Reload
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_reload                  "Reload"
+
+//d: Shortcut key function Page Overview
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_miniature_show          "Page Overview"
+
+//d: Shortcut key function Back One Page
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_previous_page           "Back One Page"
+
+//d: Shortcut key function Go to Homepage
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_go_to_homepage          "Go to Homepage"
+
+//d: Shortcut key function Zoom In
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_zoom_in                 "Zoom In"
+
+//d: Shortcut key function Zoom Out
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_zoom_out                "Zoom Out"
+
+//d: Shortcut key function Zoom Mode
+//l: cell_scut_pane
+//r: Browser 7.x
+//
+#define qtn_browser_keymap_text_zoom_mode               "Zoom Mode"
+
+//d: Shortcut key function Settings
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_settings                "Settings"
+
+//d: Shortcut key function Rotate Screen
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_rotate_screen           "Rotate Screen"
+
+//d: Shortcut key function Subscribe To Feeds
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_subscribe_to_feeds      "Subscribe To Feeds"
+
+//d: Shortcut key function Manage Bookmarks
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_manage_bookmarks        "Manage Bookmarks"
+
+//d: Shortcut key function History
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_visual_history          "History"
+
+//d: Shortcut key function View Images
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_view_images             "View Images"
+
+//d: Shortcut key function Save Page
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_save_page               "Save Page"
+
+//d: Shortcut key function Switch Window
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_switch_window           "Switch Window"
+
+//d: Shortcut key function Display Toolbar
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_toolbar            "Display Toolbar"
+
+//d: Shortcut key function Help
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_show_help               "Help"
+
+//d: Shortcut key function None
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_none                    "None"
+
+//d: Shortcut key function Full Screen
+//l: cell_scut_pane
+//r: 5.0
+//
+#define qtn_browser_keymap_text_full_screen             "Full Screen"
+
+// -----------------------------------------------------------------
+// Touch Toolbar Button strings
+// -----------------------------------------------------------------
+
+//---------------------------------
+// Main Toolbar Strings
+//---------------------------------
+// Goto Address Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_gotoaddress_tt           "Goto Address"
+
+// Show Zoom Slider Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_zoomshow_tt              "Show Zoom Slider"
+
+// Hide Zoom Slider Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_zoomhide_tt              "Hide Zoom Slider"
+
+//---------------------------------
+// Extended Toolbar Strings
+//---------------------------------
+//d:Extended Toolbar Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_tt                   "Expand toolbar"
+
+//d:Bookmarks Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_bm                   "Bookmarks"
+
+//d:Bookmarks Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_bm_tt                "Bookmarks"
+
+//d:Home Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_home                 "Home"
+
+//d:Home Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_home_tt              "Home"
+
+//d:Settings Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_settings             "Settings"
+
+//d:Settings Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_settings_tt          "Settings"
+
+
+//d:Save Bookmark Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_save_bookmark       "Save Bookmark"
+
+//d:Save Bookmark Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_save_bookmark_tt    "Save Bookmark"
+
+
+//d:Find Keyword Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_find_keyword         "Find Keyword"
+
+//d:Find Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_find_keyword_tt      "Find Keyword"
+
+//d:Find Next Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_findnext_tt              "Find Next"
+
+//d:Find Previous Keyword Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_findprevious_tt          "Find Previous"
+
+//d:Navigate Back in History Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_history_back_tt                  "Back"
+
+//d:Navigate Forward in History Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_history_forward_tt              "Forward"
+
+//d:Subscribe Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_subscribe_list       "Subscribe"
+
+//d:Subscribe Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_subscribe_list_tt    "Subscribe"
+
+//d:Reload Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_reload               "Reload"
+
+//d:Reload Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_reload_tt            "Reload"
+
+//d:Page Overview Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_miniature_show       "Show Miniature"
+
+//d:Page Overview Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_miniature_show_tt    "Show Miniature"
+
+//d:Help Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_help                 "Help"
+
+//d:Help Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_help_tt              "Help"
+
+//d:Goto Address Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_gotoaddress          "Goto Address"
+
+//d:Show Zoom Slider Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_zoomshow             "Show Zoom Slider"
+
+//d:Full Screen Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_full_screen          "Full Screen"
+
+//d:Full Screen Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_full_screen_tt       "Full Screen"
+
+//d:Send Url Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_send_url          "Send Url"
+
+//d:Send Url Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_send_url_tt       "Send Url"
+//d:Rotate Display Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_rotate               "Rotate Display"
+
+//d:Rotate Display Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_rotate_tt            "Rotate Display"
+
+//d:View Feeds Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_view_feeds           "View Feeds"
+
+//d:View Feeds Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_view_feeds_tt        "View Feeds"
+
+//d:Switch Window Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_ext_tb_switch_win           "Switch Window"
+
+//d:Switch Window Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_ext_tb_switch_win_tt        "Switch Window"
+
+
+//---------------------------------
+// Bookmark Toolbar Strings
+//---------------------------------
+//d:Add Bookmark Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_tb_add_bookmark     "Add Bookmark"
+
+//d:Delete Button Label
+//l:cell_tb_ext_pane_t1/opt1
+//r:5.0
+//
+#define qtn_browser_tb_del_bookmark     "Delete"
+
+// Add Bookmark Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_add_bookmark_tt     "Add Bookmark"
+
+// Delete Button Tooltip
+//l:popup_preview_text_window_t1
+//r:5.0
+//
+#define qtn_browser_tb_del_bookmark_tt     "Delete"
+
+// -----------------------------------------------------------------
+// Option menu sub-options
+// -----------------------------------------------------------------
+
+//d: "Go to" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_goto                    "Go to"
+
+//d: "Page Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_pageactions             "Page actions"
+
+//d: "Bookmark Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_bmactions               "Bookmark actions"
+
+//d: "Feeds Actions" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_feedsactions            "Feeds actions"
+
+//d: "Edit" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_edit                    "Edit"
+
+//d: "Mark/Unmark" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_markunmark              "Mark/Unmark"
+
+//d: "View" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_view                    "View"
+
+//d: "Clear" submenu access
+//l: list_single_pane_t1_cp2/opt3
+//w:
+//r: 5.0
+//
+#define qtn_browser_options_clear                   "Clear"
+
+// -----------------------------------------------------------------
+// Go to sub-options
+// -----------------------------------------------------------------
+//d: "Web feeds" menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_web_feeds                  "Web feeds"
+
+//d: "New web page" menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_new_web_page               "New web page"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_next            "Next Toolbar"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_back            "Back"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_forward         "Forward"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_pageoverview    "Page Overview"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_reload          "Reload"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_findkeyword     "Find Keyword"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_home            "Home"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_subscribe       "subscribe"
+
+//d: Tooltip for toolbar button
+//l: popup_preview_text_window/opt3
+//w:
+//r: 3.2
+#define qtn_browser_toolbar_tooltip_go              "Go"
+
+//d: List of feeds to choose from .
+//l: heading_pane_t1
+//
+#define qtn_browser_toolbar_subscribe_header      "Select to subscribe"
+
+//d: Confirmation query shown before setting new home page
+//l:popup_note_window
+//
+#define qtn_browser_query_set_as_home_page         "Set as home page?"
+
+// -----------------------------------------------------------------
+// View sub-options
+// -----------------------------------------------------------------
+//d: Full Screen menu item
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_browser_list_full_screen_enter          "Full Screen"
+
+// -----------------------------------------------------------------
+// Search strings
+// -----------------------------------------------------------------
+//d: Left softkey: (accept typing and activate search application)
+//l: control_pane_t1/opt7
+//r: 5.0
+//
+#define qtn_is_softkey_search           "Search"
+//d: Search second level options menu text
+//l: list_single_popup_submenu_pane_t1
+//w:
+//r: 5.0
+//
+#define qtn_is_list_search			   				"Search"
+//d: Tooltip for go to/search icon
+//l: popup_preview_text_window_t1
+//r: 5.0
+//
+#define qtn_is_tooltip_goto_search "Go to web page or search"
+//d: settings view menu item
+//l: list_setting_pane_t1
+//r: 5.0
+//
+#define qtn_browsers_sett_web_search_provider "Web search provider"
+//d: setting text when it is not defined
+//l: set_value_pane_t1
+//r: 5.0
+//
+#define qtn_is_label_not_selected "Not selected"
+//d: search editor default text
+//l: query_popup_data_pane_t1/opt4
+//r: 5.0
+//
+#define qtn_is_web_search "Web search"
+// -----------------------------------------------------------------
+// Service strings
+// -----------------------------------------------------------------
+//d: Here and now bookmark list item
+//l: list_single_graphic_pane_t1
+//r: 5.0
+//
+#define qtn_is_recommendations "Here and Now"
+
+//d: Confirmation to install add-on browser
+//l: popup_note_window
+//r: 7.2
+#define qtn_install_addon_browser  "A new browser is available.  Would you like to install it?"
+// End of File
--- a/browserui/videoservices/loc/VideoServices.loc	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  localisation strings for Video Services
-*
-*/
-
-
-// LOCALISATION STRINGS
-
-//d: Caption strings for Video Services in list view
-//l: list_single_large_graphic_pane_t1
-//w:
-//r: 3.1
-//
-#define qtn_apps_video_list "Video Services"
-
-//d: Caption strings for Video Services in grid view
-//l: cell_app_pane_t1
-//w:
-//r: 3.1
-//
-#define qtn_apps_video_grid "Video Services"
-
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/videoservices/loc/videoservices.loc	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  localisation strings for Video Services
+*
+*/
+
+
+// LOCALISATION STRINGS
+
+//d: Caption strings for Video Services in list view
+//l: list_single_large_graphic_pane_t1
+//w:
+//r: 3.1
+//
+#define qtn_apps_video_list "Video Services"
+
+//d: Caption strings for Video Services in grid view
+//l: cell_app_pane_t1
+//w:
+//r: 3.1
+//
+#define qtn_apps_video_grid "Video Services"
+
+// End of File
--- a/pushmtm/Group/Bld.inf	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Build specification file
-*
-*/
-
-
-#include <platform_paths.hrh>
-#include "../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
-
-PRJ_PLATFORMS
-DEFAULT
-
-// Help exports
-#include "../help/group/bld.inf"
-
-PRJ_EXPORTS
-../Inc/PushMtmCommands.hrh    APP_LAYER_PLATFORM_EXPORT_PATH(PushMtmCommands.hrh)
-../rom/PushMtm.iby            CORE_APP_LAYER_IBY_EXPORT_PATH(PushMtm.iby)
-../rom/PushMtmResources.iby   LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(PushMtmResources.iby)
-../rom/S60SiSlWapPush.iby     CORE_APP_LAYER_IBY_EXPORT_PATH(S60SiSlWapPush.iby)
-#ifndef __S60_32__
-../rom/wappush.iby            CORE_APP_LAYER_IBY_EXPORT_PATH(wappush.iby)
-#endif
-../loc/pushmtmui.loc          APP_LAYER_LOC_EXPORT_PATH(pushmtmui.loc)
-../loc/pushviewer.loc         APP_LAYER_LOC_EXPORT_PATH(pushviewer.loc)
-
-../conf/pushmtm.confml        APP_LAYER_CONFML(pushmtm.confml)
-../conf/pushmtm_10008D42.crml APP_LAYER_CRML(pushmtm_10008D42.crml)
-
-#ifdef __SERIES60_32__
-
-PRJ_MMPFILES
-
-// MTM registry files
-//gnumakefile PushRegistry.mk
-gnumakefile PushMtmIcons.mk
-// Push Mtm Utility
-PushMtmUtil.mmp
-// Push Server Mtm, Client Mtm and Ui Mtm
-PushMtmCliSrv.mmp
-// Ui Data Mtm
-PushMtmUi.mmp
-// Push Viewer
-PushViewer.mmp
-
-#include "../Plugins/Group/Bld.inf"
-
-#else
-
-PRJ_EXTENSIONS
-START EXTENSION s60/mifconv
-OPTION TARGETFILE pushmtm.mif
-OPTION HEADERFILE pushmtm.mbg
-OPTION SOURCES -c8,1 qgn_prop_mce_push_unread -c8,1 qgn_prop_mce_push_read
-END
-
-PRJ_MMPFILES
-
-// MTM registry files
-// Push Mtm Utility
-PushMtmUtil.mmp
-// Push Server Mtm, Client Mtm and Ui Mtm
-PushMtmCliSrv.mmp
-// Ui Data Mtm
-PushMtmUi.mmp
-// Push Viewer
-PushViewer.mmp
-
-#include "../Plugins/Group/Bld.inf"
-
-#endif
-
-PRJ_TESTMMPFILES
-
-
--- a/pushmtm/Group/PushMtmCliSrv.mmp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET             PushMtmCliSrv.dll
-TARGETTYPE   dll
-UID                     0x10004845 0x10008D42
-TARGETPATH      SHARED_LIB_DIR
-
-CAPABILITY      CAP_GENERAL_DLL
-
-VENDORID        VID_DEFAULT
-
-USERINCLUDE     ../MtmCliSrvInc
-USERINCLUDE     ../Inc
-USERINCLUDE     ../MtmUtilInc
-USERINCLUDE     ../MtmUiInc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH      ../MtmCliSrvSrc
-SOURCE          PushMtmClient.cpp
-SOURCE          PushMtmCliSrvPanic.cpp
-SOURCE          PushMtmGcOperation.cpp
-SOURCE          PushMtmServer.cpp
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#ifdef __TEST_LOG_MMP
-MACRO           __TEST_LOG__
-#endif
-
-LIBRARY         euser.lib
-LIBRARY         msgs.lib
-LIBRARY         PushMtmUtil.lib
-LIBRARY         SISLPushMsgUtils.lib 
-
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY         flogger.lib
-#endif
-
-#if defined(ARMCC)
-    DEFFILE ../EABI/PUSHMTMCLISRVU_EKA2.def
-#else
-    DEFFILE ../BWinsCw/PUSHMTMCLISRVU_EKA2.def
-#endif
-
-START RESOURCE  ../Data/PushRegistry.rss
-TARGET          PushRegistry.rsc
-TARGETPATH      MTM_INFO_FILE_DIR
-#ifdef __S60_32__
-LANG sc 
-#else
-LANGUAGE_IDS 
-#endif
-END
-
--- a/pushmtm/Group/PushMtmIcons.mk	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-#
-# Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-
-ifeq (WINS,$(findstring WINS, $(PLATFORM)))
-ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
-else
-ZDIR=\epoc32\data\z
-endif
-
-TARGETDIR=$(ZDIR)\RESOURCE\APPS
-HEADERDIR=\epoc32\include
-ICONTARGETFILENAME=$(TARGETDIR)\pushmtm.mif
-HEADERFILENAME=$(HEADERDIR)\pushmtm.mbg
-
-do_nothing :
-	@rem do_nothing
-
-MAKMAKE : do_nothing
-
-BLD : do_nothing
-
-CLEAN : do_nothing
-
-LIB : do_nothing
-
-CLEANLIB : do_nothing
-
-# ----------------------------------------------------------------------------
-# TODO: Configure these.
-#
-# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
-# MifConv if the mask detph is defined.
-#
-# NOTE 2: Usually, source paths should not be included in the bitmap
-# definitions. MifConv searches for the icons in all icon directories in a
-# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
-# The directory \s60\icons is included in the search only if the feature flag
-# __SCALABLE_ICONS is defined.
-# ----------------------------------------------------------------------------
-
-RESOURCE :
-	mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
-	/c8,1 qgn_prop_mce_push_unread.bmp \
-	/c8,1 qgn_prop_mce_push_read.bmp
-	
-FREEZE : do_nothing
-
-SAVESPACE : do_nothing
-
-RELEASABLES :
-	@echo $(HEADERFILENAME)&& \
-	@echo $(ICONTARGETFILENAME)
-
-FINAL : do_nothing
--- a/pushmtm/Group/PushMtmUi.mmp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,117 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET          PushMtmUi.dll
-TARGETTYPE      dll
-UID             0x10004845 0x10008D43
-TARGETPATH      SHARED_LIB_DIR
-
-CAPABILITY      CAP_GENERAL_DLL
-
-VENDORID        VID_DEFAULT
-
-START RESOURCE  ../Data/PushMtmUi.rss
-DEPENDS avkon.rsg
-HEADER
-#ifdef __S60_32__
-LANG sc 
-#else
-LANGUAGE_IDS 
-#endif
-TARGETPATH      MTM_RESOURCE_DIR
-END // RESOURCE
-
-USERINCLUDE     ../MtmUiInc
-USERINCLUDE     ../Inc
-USERINCLUDE     ../MtmUtilInc
-USERINCLUDE     ../ViewerInc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH      ../MtmUiSrc
-SOURCE          PushLoadServiceOp.cpp
-SOURCE          PushMessageInfoDialog.cpp
-SOURCE          PushMessageInfoOp.cpp
-SOURCE          PushMtmUi.cpp
-SOURCE          PushMtmUiData.cpp
-SOURCE          PushMtmUiOperation.cpp
-SOURCE          PushMtmUiPanic.cpp
-SOURCE          PushSettingsDialog.cpp
-SOURCE          PushViewMessageOp.cpp
-
-#ifdef __SERIES60_PUSH_SP
-SOURCE          PushViewServiceOp.cpp
-#endif // __SERIES60_PUSH_SP
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO           __TEST_LOG__
-#endif
-
-LIBRARY         apparc.lib
-LIBRARY         AknSkins.lib
-LIBRARY         apmime.lib
-LIBRARY         avkon.lib
-LIBRARY         bafl.lib
-LIBRARY         CdlEngine.lib
-LIBRARY         CommonEngine.lib
-LIBRARY         commonui.lib
-LIBRARY         cone.lib
-LIBRARY         ecom.lib
-LIBRARY         efsrv.lib 
-LIBRARY         eikcoctl.lib
-LIBRARY         eikcore.lib
-LIBRARY         eikdlg.lib
-LIBRARY         euser.lib
-LIBRARY         featmgr.lib
-LIBRARY         inetprotutil.lib
-#ifdef __SERIES60_PUSH_SP
-LIBRARY         MiscPushMsgUtils.lib // For CUnknownPushMsgEntry.
-#endif // __SERIES60_PUSH_SP
-LIBRARY         msgs.lib
-LIBRARY         mtur.lib
-LIBRARY         muiu.lib
-LIBRARY         PushMtmUtil.lib
-LIBRARY         PushMsgEntry.lib
-LIBRARY         SISLPushMsgUtils.lib
-LIBRARY         CENTRALREPOSITORY.lib
-
-#ifdef __SERIES60_HELP
-LIBRARY         hlplch.lib // for "Help" options menu
-#endif // __SERIES60_HELP
-
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY         flogger.lib
-#endif
-
-#if defined(ARMCC)
-    DEFFILE ../EABI/PUSHMTMUIU_EKA2.def
-#else
-    DEFFILE ../BWinsCw/PUSHMTMUIU_EKA2.def
-#endif
--- a/pushmtm/Group/PushMtmUtil.mmp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <bldvariant.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET          PushMtmUtil.dll
-TARGETTYPE      dll
-UID             0x1000008d 0x10008D44
-
-CAPABILITY      CAP_GENERAL_DLL
-VENDORID        VID_DEFAULT
-
-USERINCLUDE     ../MtmUtilInc
-USERINCLUDE     ../Inc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH      ../MtmUtilSrc
-SOURCE          PushAsyncOpRunner.cpp
-#ifdef __PUSH_WHITELIST
-SOURCE          PushAuthenticationUtilitiesWL.cpp
-#else  // __PUSH_WHITELIST
-SOURCE          PushAuthenticationUtilitiesPure.cpp
-#endif // __PUSH_WHITELIST
-SOURCE          PushInitiator.cpp
-SOURCE          PushInitiatorList.cpp
-SOURCE          PushMtmOperation.cpp
-SOURCE          PushMtmSettings.cpp
-SOURCE          PushMtmUtil.cpp
-SOURCE          PushMtmUtilPanic.cpp
-#ifdef __PUSH_WHITELIST
-SOURCE          WhiteListImporterWL.cpp
-#else  // __PUSH_WHITELIST
-SOURCE          WhiteListImporterDummy.cpp
-#endif // __PUSH_WHITELIST
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO           __TEST_LOG__
-#endif
-
-LIBRARY         efsrv.lib
-LIBRARY         estor.lib
-LIBRARY         euser.lib
-LIBRARY         featmgr.lib
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY         flogger.lib
-#endif
-LIBRARY			inetprotutil.lib
-LIBRARY         msgs.lib
-#ifdef __PUSH_WHITELIST
-LIBRARY         PushMsgEntry.lib
-LIBRARY         WapPushUtils.lib
-#endif // __PUSH_WHITELIST
-LIBRARY         SISLPushMsgUtils.lib
-LIBRARY         CENTRALREPOSITORY.lib
-
-#if defined(ARMCC)
-    DEFFILE ../EABI/PUSHMTMUTILU_EKA2.def
-#else
-    DEFFILE ../BWinsCw/PUSHMTMUTILU_EKA2.def
-#endif
-
--- a/pushmtm/Group/PushViewer.mmp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Project specification file
-*
-*/
-
-#include <defaultcaps.hrh>
-#include <data_caging_paths.hrh>
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET          PushViewer.exe
-EPOCSTACKSIZE	0x5000
-TARGETTYPE      exe
-UID             0x100039CE 0x10008D3C
-
-CAPABILITY      CAP_APPLICATION
-VENDORID        VID_DEFAULT
-
-USERINCLUDE		../ViewerInc
-USERINCLUDE		../Inc
-USERINCLUDE		../MtmUiInc
-USERINCLUDE		../MtmUtilInc
-
-APP_LAYER_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
-#endif
-
-SOURCEPATH		../ViewerSrc
-SOURCE          PushViewerApp.cpp
-SOURCE          PushViewerAppServer.cpp
-SOURCE          PushViewerDoc.cpp
-SOURCE          PushViewerPanic.cpp
-SOURCE          PushViewerMsgEdAppUi.cpp
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO           __TEST_LOG__
-#endif
-
-LIBRARY			CommonUI.lib
-LIBRARY			apparc.lib
-LIBRARY			avkon.lib
-LIBRARY			cone.lib
-LIBRARY			eikcoctl.lib
-LIBRARY         eikcore.lib
-LIBRARY         euser.lib
-LIBRARY			MsgEditorAppUi.lib
-LIBRARY			MsgEditorModel.lib
-LIBRARY			MsgEditorView.lib
-LIBRARY			msgs.lib
-LIBRARY			muiu.lib
-LIBRARY			PushMtmUtil.lib
-LIBRARY         SISLPushMsgUtils.lib
-
-#ifdef __SERIES60_HELP
-LIBRARY         hlplch.lib // for "Help" options menu
-#endif // __SERIES60_HELP
-
-#ifdef __TEST_LOG_MMP
-LIBRARY         efsrv.lib
-DEBUGLIBRARY         flogger.lib
-#endif
-
-START RESOURCE  ../Data/PushViewer.rss
-DEPENDS avkon.rsg
-HEADER
-#ifdef __S60_32__
-LANG sc 
-#else
-LANGUAGE_IDS 
-#endif
-TARGETPATH   APP_RESOURCE_DIR
-END // RESOURCE
-
-START RESOURCE  ../Data/PushViewer_reg.rss
-DEPENDS pushviewer.rsg
-// Do not change the UID below.
-TARGETPATH      /private/10003a3f/apps
-END
-
--- a/pushmtm/Plugins/Data/10008D3E.rss	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  White List Adapter registration resources.
-*
-*/
-
-
-// INCLUDE FILES
-	// System includes
-#include <ecom/registryinfo.rh>
-
-	// User includes
-#include "WhiteListAdapterUids.h"
-
-// RESOURCE DEFINITIONS
-
-RESOURCE REGISTRY_INFO theInfo
-	{
-	dll_uid = KWhiteListAdapterDllUid;
-	interfaces = 
-		{
-		INTERFACE_INFO
-			{
-			interface_uid = KProvisioningAdapterInterfaceUid;
-			implementations = 
-				{
-				IMPLEMENTATION_INFO
-					{
-					implementation_uid = KWhiteListAdapterImplementationUid;
-					version_no = 2;
-					display_name = ""; 
-					default_data = "";
-					opaque_data = "";
-					}
-				};
-			}
-		};
-	}
--- a/pushmtm/Plugins/Group/Bld.inf	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Build specification file
-*
-*/
-
-#include <platform_paths.hrh>
-#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
-
-PRJ_PLATFORMS
-
-DEFAULT
-
-
-PRJ_EXPORTS
-
-
-PRJ_MMPFILES
-#if defined( __S60_32__) || defined( __PLATFORM_VERSION_S60_50__)  || defined( __PLATFORM_VERSION_5250__)
-// Remove Symbian Push Content Handler
-gnumakefile PushContentHandlerClean.mk
-#endif
-// Build our Push Content Handler
-PushMtmPushContentHandler.mmp
-
-#ifdef __PUSH_WHITELIST
-
-// Build our White List Adapter plug-in
-PushMtmWhiteListAdapter.mmp
-
-#endif // __PUSH_WHITELIST
-
-
-PRJ_TESTMMPFILES
-
-
-PRJ_TESTEXPORTS
-
--- a/pushmtm/Plugins/Group/PushContentHandlerClean.mk	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-#
-# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description: 
-#
-#
-# Remove Symbian Push Content Handler DLL and registry resource files.
-# These push content handlers are replaced by the content handlers delivered 
-# in the Push MTM.
-#
-
-LANGUAGE=sc
-
-#
-# Files to be removed: ECOM DLLs and registry files.
-#
-
-# The old-named push content handler DLL left by PushMtm or Symbian:
-TARGETDLL1=pushcontenthandler.dll
-# ECOM resource left by Symbian
-TARGETRESOURCE1=pushcontenthandler.r$(LANGUAGE)
-# SI & SL content handlers left by Symbian
-TARGETDLL2=sislcontenthandlers.dll
-# ECOM resource left by Symbian (for SI & SL content handlers)
-TARGETRESOURCE2=sislcontenthandlers.r$(LANGUAGE)
-# Just in case: remove the ECOM registry - the system will create a new
-ECOMREGISTRY=$(EPOCROOT)epoc32\$(PLATFORM)\c\system\data\plugins\ecom.rom.dat
-# Remove Symbian push mtm
-TARGETMTMDLL=wappushmtmclientserver.dll
-
-#
-# Target directories
-#
-
-ifeq (wins,$(findstring wins, $(PLATFORM)))
-	TARGETDIRRESOURCE=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\resource\plugins
-else
-endif
-TARGETDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
-GENERICTARGETDIRRESOURCE=$(EPOCROOT)epoc32\data\z\resource\plugins
-TARGETMTMDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
-
-#
-# Remove the files
-#
-
-do_tidy:
-	if exist "$(TARGETDIRDLL)\$(TARGETDLL1)" del "$(TARGETDIRDLL)\$(TARGETDLL1)"
-ifeq (wins,$(findstring wins, $(PLATFORM)))
-	if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
-	del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
-endif
-	if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
-	del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
-	if exist "$(TARGETDIRDLL)\$(TARGETDLL2)" del "$(TARGETDIRDLL)\$(TARGETDLL2)"
-ifeq (wins,$(findstring wins, $(PLATFORM)))
-	if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
-	del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
-endif
-	if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
-	del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
-ifeq (wins,$(findstring wins, $(PLATFORM)))
-	if exist "$(ECOMREGISTRY)" del "$(ECOMREGISTRY)"
-endif
-	if exist "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)" del "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)"
-
-do_nothing:
-
-#
-# The targets invoked by abld 
-#
-
-MAKMAKE : do_tidy
-
-RESOURCE : do_nothing
-
-SAVESPACE : do_nothing
-
-BLD : do_nothing
-
-FREEZE : do_nothing
-
-LIB : do_nothing
-
-CLEANLIB : do_nothing
-
-FINAL : do_nothing
-
-CLEAN : do_tidy
-
-RELEASABLES : do_nothing
-
--- a/pushmtm/Plugins/Group/PushMtmPushContentHandler.mmp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Project specification file
-*
-*/
-
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-
-TARGET          PushMtmPushContentHandler.dll
-TARGETTYPE      PLUGIN
-
-// UIDs - 2nd UID specifies an ECom dll,
-// 3rd UID is unique identifier
-// (EUidPushContentHandlerDll in PushContentHandlerDef.hrh).
-UID             0x10009D8D 0x101F854C
-
-CAPABILITY      CAP_ECOM_PLUGIN
-VENDORID        VID_DEFAULT
-
-SOURCEPATH      ../PushContentHandler
-START RESOURCE      101F854C.rss
-#ifdef __S60_32__
-LANG sc 
-#else
-LANGUAGE_IDS 
-#endif
-TARGET      PushMtmPushContentHandler.rsc
-END // RESOURCE
-
-USERINCLUDE     ../PushContentHandler
-USERINCLUDE     ../../Inc
-USERINCLUDE     ../../MtmUtilInc
-USERINCLUDE     ../../MtmUiInc
-
-/* todo: to be removed once push header are updated */
-USERINCLUDE     /epoc32/include/push
-
-APP_LAYER_SYSTEMINCLUDE
-OS_LAYER_ESTLIB_SYSTEMINCLUDE
-#if defined(__PLATFORM_VERSION_32__)
-SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
-SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(ecom)
-#endif
-
-SOURCEPATH      ../PushContentHandler
-SOURCE          CCOContentHandler.cpp
-SOURCE          CMultiPartMixedContentHandler.cpp
-SOURCE          CMultiPartRelAndAltContentHandler.cpp
-SOURCE          CPushContentHandlerBase.cpp
-SOURCE          CUnknownContentHandler.cpp
-SOURCE          CSIContentHandler.cpp
-SOURCE          CSLContentHandler.cpp
-SOURCE          PushContentHandlerGroupProxy.cpp
-SOURCE          PushContentHandlerPanic.cpp
-SOURCE          PushContentHandlerUtils.cpp
-SOURCE          PushMtmAutoFetchOperation.cpp
-SOURCE          PushMtmFetchOperation.cpp
-SOURCE		      PushMtmCacheSupply.cpp
-SOURCE		      PushMtmCacheDataSupplier.cpp
-SOURCE          si_dict.c
-SOURCE          sl_dict.c
-SOURCE          StringResourceReader.cpp
-
-// Define the following __TEST_LOG_MMP macro if logging is required.
-// Uncomment it if you want logging. This macro is used only in the mmp file.
-// In the source files use __TEST_LOG__.
-//#define __TEST_LOG_MMP
-
-#if defined __TEST_LOG_MMP
-MACRO           __TEST_LOG__
-#endif
-
-LIBRARY	apengine.lib
-
-LIBRARY         apgrfx.lib
-LIBRARY         apmime.lib
-
-LIBRARY         bafl.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY         Bifu.lib
-LIBRARY         BioDB.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY         CharConv.lib
-
-LIBRARY         commdb.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY         commonui.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY         ECom.lib
-LIBRARY         efsrv.lib
-
-LIBRARY         esock.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY         etext.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY         euser.lib
-#ifdef __TEST_LOG_MMP
-DEBUGLIBRARY         flogger.lib
-#endif
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY         gsmu.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY         http.lib
-LIBRARY         BrowserCache.lib
-LIBRARY         HttpFilterCommon.lib
-LIBRARY         inetprotutil.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY         MiscPushMsgUtils.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY         msgs.lib
-LIBRARY         PushMsgEntry.lib
-LIBRARY         PushMtmUtil.lib
-LIBRARY         SISLPushMsgUtils.lib
-
-#ifdef __SERIES60_PUSH_SP
-LIBRARY         smcm.lib
-#endif // __SERIES60_PUSH_SP
-
-LIBRARY         WapPushUtils.lib
-
-LIBRARY			ws32.lib
-
-LIBRARY         cXmlParser.lib
-LIBRARY         CENTRALREPOSITORY.lib
-LIBRARY         featmgr.lib
--- a/pushmtm/Plugins/Group/PushMtmWhiteListAdapter.mmp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Specification file of White List Adapter plug-in
-*
-*/
-
-#include <platform_paths.hrh>
-#include <platform/mw/browser_platform_variant.hrh>
-#include <defaultcaps.hrh>
-#include "../WhiteListAdapterInc/WhiteListAdapterUids.h"
-
-TARGET		PushMtmWhiteListAdapter.dll
-TARGETTYPE	PLUGIN
-
-// UIDs - 2nd UID specifies an ECom dll,
-// 3rd UID is a unique identifier from WhiteListAdapterDef.h
-UID		0x10009D8D KWhiteListAdapterDllUid
-
-CAPABILITY CAP_ECOM_PLUGIN
-VENDORID   VID_DEFAULT
-
-// RESOURCES
-
-START RESOURCE      ../Data/10008D3E.rss
-#ifdef __S60_32__
-LANG sc 
-#else
-LANGUAGE_IDS 
-#endif
-TARGET      PushMtmWhiteListAdapter.rsc
-END // RESOURCE
-
-// INCLUDE DIRECTORIES
-
-USERINCLUDE	../WhiteListAdapterInc
-USERINCLUDE	../../MtmUtilInc
-
-APP_LAYER_SYSTEMINCLUDE
-
-// SOURCE FILES
-
-SOURCEPATH	../WhiteListAdapterSrc
-SOURCE		WhiteListAdapter.cpp
-SOURCE		WhiteListAdapterGroupProxy.cpp
-SOURCE		WhiteListAdapterItem.cpp
-SOURCE		WhiteListAdapterLogger.cpp
-SOURCE		WhiteListAdapterPanic.cpp
-
-// LIBRARIES
-
-LIBRARY		Euser.lib
-LIBRARY		msgs.lib		// for MMsvSessionObserver
-LIBRARY		ProvisioningEngine.lib	// for CWPAdapter & Co.
-LIBRARY		PushMtmUtil.lib		// for Push MTM Settings
-
-// Define this macro is you wish to enable logging
-//#define __TEST_WHITELISTADAPTER_LOG_ENABLED
-
-#ifdef __TEST_WHITELISTADAPTER_LOG_ENABLED
-	MACRO __TEST_WHITELISTADAPTER_LOG__
-	DEBUGLIBRARY flogger.lib
-#endif	// __TEST_WHITELISTADAPTER_LOG_ENABLED
--- a/pushmtm/Plugins/PushContentHandler/101F854C.rss	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Push Content Handlers registration resources.
-*
-*/
-
-
-
-#include <ecom/registryinfo.rh>
-#include "PushContentHandlerDef.hrh"
-
-
-RESOURCE REGISTRY_INFO theInfo
-	{
-	dll_uid = EUidPushContentHandlerDll;
-	interfaces = 
-		{
-		INTERFACE_INFO
-			{
-			interface_uid = EUidPushContentHandlerBase;
-			implementations = 
-				{
-				IMPLEMENTATION_INFO
-					{
-					implementation_uid = EUidPushUnknownContentHandler;
-					version_no = 2;
-					display_name = "";
-					default_data = "*";
-					opaque_data = "";
-					},
-				IMPLEMENTATION_INFO
-					{
-					implementation_uid = EUidPushSIContentHandler;
-					version_no = 2;
-					display_name = "";
-					default_data = "text/vnd.wap.si||application/vnd.wap.sic";
-					opaque_data = "";
-					},
-				IMPLEMENTATION_INFO
-					{
-					implementation_uid = EUidPushSLContentHandler;
-					version_no = 2;
-					display_name = "";
-					default_data = "text/vnd.wap.sl||application/vnd.wap.slc";
-					opaque_data = "";
-					},
-				IMPLEMENTATION_INFO
-					{
-					implementation_uid = EUidPushCOContentHandler;
-					version_no = 2;
-					display_name = "";
-					default_data = "text/vnd.wap.co||application/vnd.wap.coc";
-					opaque_data = "";
-					},
-				IMPLEMENTATION_INFO
-					{
-					implementation_uid = EUidPushMultiPartMixedContentHandler;
-					version_no = 2;
-					display_name = "";
-					default_data = "application/vnd.wap.multipart.mixed||multipart/mixed";
-					opaque_data = "";
-					},
-				IMPLEMENTATION_INFO
-					{
-					implementation_uid = EUidPushMultiPartRelAndAltContentHandler;
-					version_no = 2;
-					display_name = "";
-					default_data = "application/vnd.wap.multipart.related||application/vnd.wap.multipart.alternative||multipart/related||multipart/alternative";
-					opaque_data = "";
-					}
-				};
-			}
-		};
-	}
-
--- a/pushmtm/Plugins/PushContentHandler/CCOContentHandler.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,174 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CCOContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CCOContentHandler.h"
-//#include "PushMtmUtil.h"
-//#include "PushMtmSettings.h"
-//#include <msvids.h>
-//#include <XmlElemt.h>
-
-// CONSTANTS
-
-#if defined(_DEBUG)
-_LIT( KErrPushMsgNull, "NULL CPushMessage" );
-#endif
-
-_LIT( KReserved, "Reserved" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CCOContentHandler::NewL
-// ---------------------------------------------------------
-//
-CCOContentHandler* CCOContentHandler::NewL()
-	{
-	CCOContentHandler* self = new(ELeave) CCOContentHandler;  
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-	return self;
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::~CCOContentHandler
-// ---------------------------------------------------------
-//
-CCOContentHandler::~CCOContentHandler()
-	{
-    Cancel();
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::CCOContentHandler
-// ---------------------------------------------------------
-//
-CCOContentHandler::CCOContentHandler()
-:   CContentHandlerBase()
-	{
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::ConstructL()
-	{
-	CActiveScheduler::Add(this);
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
-                                        TRequestStatus& aStatus )
-	{
-	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-
-	iMessage = aPushMsg;
-	iAcknowledge = ETrue;
-	SetConfirmationStatus( aStatus );
-
-    iState = EDone;
-	IdleComplete();
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg )
-	{
-	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-	
-	iAcknowledge = EFalse;
-	iMessage = aPushMsg;
-
-    iState = EDone;
-	IdleComplete();
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CCOContentHandler::CPushHandlerBase_Reserved1()
-	{
-	User::Panic(KReserved, KErrNotSupported);
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CCOContentHandler::CPushHandlerBase_Reserved2()
-	{
-	User::Panic(KReserved, KErrNotSupported);
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CCOContentHandler::CancelHandleMessage()
-	{
-    Cancel();
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CCOContentHandler::DoCancel()
-	{
-	Complete( KErrCancel );
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CCOContentHandler::RunL()
-	{
-	switch( iState )
-		{
-        case EDone:
-            {
-			Complete( KErrNone );
-			break;
-            }
-		default:
-			break;
-		}
-	}
-
-// ---------------------------------------------------------
-// CCOContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CCOContentHandler::RunError( TInt aError )
-	{
-	iState = EDone;
-	Complete( aError );
-	return KErrNone;
-	}
-
--- a/pushmtm/Plugins/PushContentHandler/CCOContentHandler.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CCOContentHandler.
-*
-*/
-
-
-
-#ifndef __CCOCONTENTHANDLER_H__
-#define __CCOCONTENTHANDLER_H__
-
-// INCLUDE FILES
-
-#include "PushContentHandlerDef.hrh"
-#include <push/CContentHandlerBase.h>
-#include <E32Base.h>
-
-// CONSTANTS
-
-const TUid KUidPushCOContentHandler	= { EUidPushCOContentHandler };
-_LIT( KCOContentHandlerData, "text/vnd.wap.co||application/vnd.wap.coc" );
-
-// FORWARD DECLARATIONS
-
-/*class CMsvSession;
-class CSLPushMsgEntry;
-class CPushMtmUtil;
-class CPushMtmSettings;*/
-
-// CLASS DECLARATION
-
-/**
-* CCOContentHandler Handles Cache Operation Content
-*
-* This handler takes ownership of the CO message and processes it
-* according to the processing rules
-* [WAP Cache Operation version 31-July-2001].
-* Also S60 specific requirements are applied.
-*
-* NB. Currently all CO push messages are discarded!
-*/
-class CCOContentHandler : public CContentHandlerBase
-	{
-    public: // Constructors and destructor
-
-        /**
-        * Two-phased constructor. Leaves on failure.
-        * @return The constructed object.
-        */
-	    static CCOContentHandler* NewL();
-
-        /**
-        * D'tor.
-        */
-	    virtual ~CCOContentHandler();
-
-    private: // Constructors
-
-        /**
-        * Constructor.
-        */
-	    CCOContentHandler();
-
-        /**
-        * Symbian OS constructor.
-        */
-	    void ConstructL();
-
-    private: // Methods from CPushHandlerBase
-
-        /**
-        * HandleMessage Async. Version. Takes ownership of Push Message and
-        * sets self active to continue processing message.
-        * @param aPushMsg CPushMessage to process.
-        * @param aStatus Request status variable for use in asynchronous
-        *        operations.
-        * @return None.
-        */
-	    void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
-
-        /**
-        * HandleMessage Sync. Version. Takes ownership of Push Message and
-        * sets self active to continue processing message.
-        * Initial State: Set data members then go to the next state
-        * @param aPushMsg CPushMessage to process.
-        */
-	    void HandleMessageL( CPushMessage* aPushMsg );
-
-        /**
-        * Same functionality as DoCancel()
-        */
-	    void CancelHandleMessage();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved1();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved2();
-
-    private: // Methods from CActive
-
-        /**
-        * Current implementation does nothing. TODO on 2.1.
-        * @return None.
-        */
-	    void DoCancel();
-
-        /**
-        * Current implementation does nothing. TODO on 2.1.
-        * @return None.
-        */
-	    void RunL();
-
-        /**
-        * Current implementation does nothing. TODO on 2.1.
-        * @return Error code to scheduler.
-        */
-	    TInt RunError( TInt aError );
-
-    private: // Data
-
-	    enum TState
-            {
-            EDone
-            };
-    };
-
-#endif	// __CCOCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,291 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CMultiPartMixedContentHandler.
-*
-*/
-
-// INCLUDE FILES
-
-#include "CMultiPartMixedContentHandler.h"
-#include <push/pushdispatcher.h>
-#include <push/cmultiparttextiterator.h>
-#include <push/cmultipartbiniterator.h>
-
-// Constants
-
-_LIT(KReserved, "Reserved");
-#if defined(_DEBUG)
-_LIT(KErrPushMsgNull,	"NULL CPushMessage");
-#endif
-
-/**
- * Static Factory Construction
- *
- * @param aFs Reference to a file session
- * @param aLibrary Reference to DLL Library Object
- * @param aIndex Index number corresponding to the Unknown App Handler Class
- *        'EMultiPartMixedContentHandler'
- *
- * @return fully initialized instance of this class
- */
-CMultiPartMixedContentHandler* CMultiPartMixedContentHandler::NewL()
-	{
-	CMultiPartMixedContentHandler* self =
-        new (ELeave) CMultiPartMixedContentHandler;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-/**
- * Destructor
- */
-CMultiPartMixedContentHandler::~CMultiPartMixedContentHandler()
-	{
-    Cancel();
-	delete iMultiMessage;
-    iContentHandler = NULL; // Not owned.
-	}
-
-/**
- * Constructor
- *
- * @param aFs Reference to a file session
- * @param aLibrary Reference to DLL Library Object
- * @param aIndex Index number corresponding to the Unknown App Handler Class
- *        'EMultiPartMixedContentHandler'
- */
-CMultiPartMixedContentHandler::CMultiPartMixedContentHandler()
-:   CContentHandlerBase()
-	{
-	}
-
-/**
- *  This will complete initialization of the object
- */
-void CMultiPartMixedContentHandler::ConstructL()
-	{
-	CActiveScheduler::Add(this);
-	}
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-
-/**
- * Creates a Multipart Binary Iterator that will be used for splitting apart the binary
- * mulitpart.
- *
- * @param aPushMsg A WAP binary multipart.mixed message that will be processed
- */
-void CMultiPartMixedContentHandler::LoadMultipartMsgL()
-	{
-	__ASSERT_DEBUG( iMessage!= 0 , User::Panic(KErrPushMsgNull,0));
-
-	TPtrC contentType;
-	iMessage->GetContentType(contentType);
-	if (!contentType.FindF(KMultipartText))
-		iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
-	else if (!contentType.FindF(KMultipartBin))
-		iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
-	else
-		User::Leave(KErrCorrupt);
-
-	iMultiMessage->FirstL();
-	iState = EHandlePart;
-
-	IdleComplete();
-	}
-
-/**
- *	Handles the Message Part returned from the Multipart iterator
- *  by creating a new handler based on the Content-Type, then dispatches it
- *  synchronously.
- */
-void CMultiPartMixedContentHandler::HandlePartL()
-	{
-	CPushMessage* msgPart = iMultiMessage->PartL();
-	CleanupStack::PushL(msgPart);
-
-	TPtrC contentType;
-	msgPart->GetContentType(contentType);
-	CContentHandlerBase& contentHandler =
-        PushContentTypeDispatcher::GetHandlerL( contentType, *iLog, *iManager );
-	iContentHandler = &contentHandler;
-	CleanupStack::Pop(msgPart);
-
-	// treat as an acknowledged message always to ensure
-	// sequential creation of handlers
-	iContentHandler->HandleMessageL(msgPart, iStatus);
-	iState = ENextPart;
-	SetActive();
-	}
-
-/**
- *	Moves multipart iterator to the next part. If there is none,
- *  State: EDone will be set to complete this handler
- */
-void CMultiPartMixedContentHandler::NextPartL()
-	{
-	if (iMultiMessage->NextL())
-		iState = EHandlePart;
-	else
-		iState = EDone;
-
-	IdleComplete();
-	}
-
-#endif // __TEST_MULTIPART_MIX_SUPP
-
-/**
- * The Asynchronous entry point for this plug-in to handle the CPushMessage.
- *
- * Since we really didn't start an async event, make it look as though our
- * asynchronous request has been completed.
- *
- * @param aPushMsg A WAP binary multipart.mixed message that will be processed
- * @param aStatus The TRequestStatus of the caller indicating that this will
- *        be used aysnchronously
- */
-void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg,
-                                                    TRequestStatus& aStatus )
-	{
-	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-	iAcknowledge = ETrue;
-	iMessage = aPushMsg;
-	SetConfirmationStatus(aStatus);
-	iState = ELoadMsgData;
-	IdleComplete();
-#else // __TEST_MULTIPART_MIX_SUPP
-	iAcknowledge = ETrue;
-	iMessage = aPushMsg;
-	SetConfirmationStatus(aStatus);
-    // Drop all multipart/mixed messages.
-    iState = EDone;
-	IdleComplete();
-#endif // __TEST_MULTIPART_MIX_SUPP
-	}
-
-
-/**
- * The Synchronous entry point for this plug-in to handle the CPushMessage.
- *
- * @param aPushMsg A WAP binary multipart.mixed message that will be processed
- * @param aStatus The TRequestStatus of the caller indicating that this will be
- *        used aysnchronously
- */
-void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg )
-	{
-	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-	iAcknowledge = EFalse;
-	iMessage = aPushMsg;
-	iState = ELoadMsgData;
-	IdleComplete();
-#else // __TEST_MULTIPART_MIX_SUPP
-	iAcknowledge = EFalse;
-	iMessage = aPushMsg;
-    // Drop all multipart messages.
-    iState = EDone;
-	IdleComplete();
-#endif // __TEST_MULTIPART_MIX_SUPP
-	}
-
-/**
- * Cancels Asynronous requests on called handler.
- */
-void CMultiPartMixedContentHandler::CancelHandleMessage()
-	{
-    Cancel();
-	}
-
-void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved1()
-	{
-	User::Panic(KReserved, KErrNotSupported);
-	}
-
-void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved2()
-	{
-	User::Panic(KReserved, KErrNotSupported);
-	}
-
-/**
- * Cancels Asynronous requests on caller and completes self.
- */
-void CMultiPartMixedContentHandler::DoCancel()
-	{
-	if ( iContentHandler )
-        {
-		iContentHandler->CancelHandleMessage();
-        }
-	Complete( KErrCancel );
-	}
-
-/**
- * State machine to step through the multipart message until it is done
- *
- * State EHandlePart: Starts the processing of each part of the multipart
- * State ENextPart: Moves the interator to point to the next part of the multipart
- * when there are no more parts, EDone will be the next state
- * State EDone: Clean up and complete
- */
-void CMultiPartMixedContentHandler::RunL()
-	{
-	switch(iState)
-		{
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-
-        case ELoadMsgData:
-            {
-			LoadMultipartMsgL();
-			break;
-            }
-		case EHandlePart:
-            {
-			HandlePartL();
-			break;
-            }
-		case ENextPart:
-            {
-			NextPartL();
-			break;
-            }
-
-#endif // __TEST_MULTIPART_MIX_SUPP
-
-        case EDone:
-            {
-			Complete(KErrNone);
-			break;
-            }
-		default:
-            {
-			break;
-            }
-		}
-	}
-
-/**
- * Clean up
- */
-TInt CMultiPartMixedContentHandler::RunError(TInt aError)
-	{
-	iState=EDone;
-	Complete(aError);
-	return KErrNone;
-	}
-
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CMultiPartMixedContentHandler.
-*
-*/
-
-#ifndef __CMULTIPARTMIXEDCONTENTHANDLER_H__
-#define __CMULTIPARTMIXEDCONTENTHANDLER_H__
-
-// INCLUDE FILES
-
-#include "PushMtmDef.hrh"
-#include "PushContentHandlerDef.hrh"
-#include <push/ccontenthandlerbase.h>
-#include <E32Base.h>
-
-// CONSTANTS
-
-const TUid KUidPushMultiPartMixedContentHandler	= {
-           EUidPushMultiPartMixedContentHandler };
-_LIT(KMultiPartMixedContentHandlerData,
-     "application/vnd.wap.multipart.mixed||multipart/mixed");
-
-// FORWARD DECLARATIONS
-
-class CMultipartIteratorBase;
-
-// CLASS DECLARATION
-
-/**
-* The MultiPart/Mixed Content Handler
-*
-* Takes apart the mulitpart message, creating a new sub message from each
-* part, then calls on new Push Handlers to process each sub message.
-*
-* All multipart/mixed messages are dropped if __TEST_MULTIPART_MIX_SUPP
-* is not defined.
-*/
-class CMultiPartMixedContentHandler : public CContentHandlerBase
-	{
-    public: // Constructors and destructor
-
-	    static CMultiPartMixedContentHandler* NewL();
-
-	    virtual ~CMultiPartMixedContentHandler();
-
-    private: // Constructors
-
-	    CMultiPartMixedContentHandler();
-
-	    void ConstructL();
-
-    private: // New functions
-
-#ifdef __TEST_MULTIPART_MIX_SUPP
-
-	    void LoadMultipartMsgL();
-
-	    void HandlePartL();
-
-	    void NextPartL();
-
-#endif // __TEST_MULTIPART_MIX_SUPP
-
-    private:	// Methods from CPushHandlerBase
-
-	    void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
-
-	    void HandleMessageL(CPushMessage* aPushMsg);
-
-	    void CancelHandleMessage();
-
-	    void CPushHandlerBase_Reserved1();
-
-	    void CPushHandlerBase_Reserved2();
-
-    private:	// Methods from CActive
-
-	    void DoCancel();
-
-	    void RunL();
-
-	    TInt RunError(TInt aError);
-
-    private:	// Attributes
-
-	    enum TState
-            {
-            ELoadMsgData,
-            EHandlePart,
-            ENextPart,
-            EDone
-            };
-
-	    CMultipartIteratorBase*		iMultiMessage;
-
-	    CContentHandlerBase*		iContentHandler;
-
-	};
-
-
-#endif	// __CMULTIPARTMIXEDCONTENTHANDLER_H__
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CMultiPartRelAndAltContentHandler.
-*
-*/
-
-// INCLUDE FILES
-
-#include "CMultiPartRelAndAltContentHandler.h"
-#include <push/cmultipartiteratorbase.h>
-#include <msvids.h>
-
-// Constants
-
-_LIT(KReserved, "Reserved");
-
-/**
- * Static Factory Construction
- *
- * version of NewLC which leaves nothing
- * on the cleanup stack
- */
-CMultiPartRelAndAltContentHandler* CMultiPartRelAndAltContentHandler::NewL()
-	{
-	CMultiPartRelAndAltContentHandler* self = new (ELeave) CMultiPartRelAndAltContentHandler;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-/**
- * Default d'tor
- */
-CMultiPartRelAndAltContentHandler::~CMultiPartRelAndAltContentHandler()
-	{
-    Cancel();
-	delete iMultiMessage;
-    delete iMsvSession;
-	}
-
-/**
- * The Multipart Related Content handler 
- * Index number : ESLContentHandlerIndex 
- */ 
-CMultiPartRelAndAltContentHandler::CMultiPartRelAndAltContentHandler()
-:   CContentHandlerBase(), 
-    iSavedMsgId( KMsvNullIndexEntryId )
-	{
-	}
-
-/**
- *  This will complete initialization of the object
- */
-void CMultiPartRelAndAltContentHandler::ConstructL()
-	{
-    iMsvSession = CMsvSession::OpenSyncL( *this );
-	CActiveScheduler::Add(this);
-	}
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
-/**
-* Setup the multipart message.
-*/
-void CMultiPartRelAndAltContentHandler::LoadMultiPartMsgL()
-	{
-#ifdef _DEBUG
-	_LIT(KNullMsg,"NULL CPushMessage");
-	__ASSERT_DEBUG( iMessage != 0 , User::Panic(KNullMsg,0));
-#endif
-	TPtrC contentType;
-	iMessage->GetContentType(contentType);
-	if (!contentType.FindF(KMultipartText))
-		iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
-	else if (!contentType.FindF(KMultipartBin))
-		iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
-	else
-		User::Leave(KErrCorrupt);
-	iMultiMessage->FirstL();
-	IdleComplete();
-	}
-
-/**
- *	Saves message part to messaging server
- */
-void CMultiPartRelAndAltContentHandler::HandlePartL()
-	{
-	CPushMessage* msgPart = iMultiMessage->PartL();
-	CleanupStack::PushL(msgPart);
-
-	// Create a new Unknown Push Entry to hold the header and body data
-	CUnknownPushMsgEntry* msgEntry=CUnknownPushMsgEntry::NewL();
-	CleanupStack::PushL(msgEntry);
-	// Get the header
-	TPtrC8 header;
-	msgPart->GetHeader(header);
-	//Get the From field
-	TPtrC8 from;
-	if (!msgPart->GetBinaryHeaderField(EHttpFrom,from) &&
-		!msgPart->GetBinaryHeaderField(EHttpXWapInitiatorURI,from) &&
-		!msgPart->GetBinaryHeaderField(EHttpContentLocation,from) )
-		{
-		from.Set(KNullDesC8);
-		}
-	// Get the body
-	TPtrC8 body;
-	msgPart->GetMessageBody(body);
-	TPtrC content;
-	msgPart->GetContentType(content);
-
-	//Set fields of the Unknown Entry
-	msgEntry->SetHeaderL(header);
-	msgEntry->SetMessageDataL(body);	
-	msgEntry->SetFromL(from);
-	//Need this next  bit so UI knows what to do with the data in the Push Entry
-	msgEntry->SetContentTypeL( content );
-
-	msgEntry->SaveL( *iMsvSession, iSavedMsgId );
-	CleanupStack::PopAndDestroy( 2 ); //msgEntry, msgPart
-	
-	iState = ENextPart;
-	IdleComplete();
-
-	}
-
-/**
- *	Move multipart iterator to the next part
- */
-void CMultiPartRelAndAltContentHandler::NextPartL()
-	{
-	if (iMultiMessage->NextL())
-		{
-		iState = EHandlePart;
-		}
-	else 
-		{
-		iState = EDone;
-		}
-	IdleComplete();
-	}
-
-/**
- * 
- */
-void CMultiPartRelAndAltContentHandler::SaveMsgRootL()
-	{
-	TPtrC8 msgHeaderPtr;
-	iMessage->GetHeader(msgHeaderPtr);
-	CMultiPartPushMsgEntry* msgEntry=CMultiPartPushMsgEntry::NewL();
-	CleanupStack::PushL(msgEntry);
-	msgEntry->SetHeaderL(msgHeaderPtr); //Top level entry
-	TPtrC contentType;
-	iMessage->GetContentType(contentType);
-	msgEntry->SetContentTypeL(contentType);
-
-	iSavedMsgId = msgEntry->SaveL(*iMsvSession, 
-                                  KMsvGlobalInBoxIndexEntryId);
-	CleanupStack::PopAndDestroy();//msgEntry
-	}
-
-/**
- * Loads multipart data and creates multipart head entry in the message 
- * server index.
- * @throw KErrCorrupt - message data is corrupt 
- * @throw KErrNoMemory - insufficient free memory to complete operations
- */
-
-void CMultiPartRelAndAltContentHandler::LoadMsgDataL()
-	{
-	LoadMultiPartMsgL();
-	SaveMsgRootL();
-	iState = EHandlePart;
-	}
-
-void CMultiPartRelAndAltContentHandler::SetMsgCorruptFlagL()
-	{
-	CMsvEntry* msvEntry = iMsvSession->GetEntryL( iSavedMsgId );
-	CleanupStack::PushL( msvEntry );
-	TMsvEntry entry = msvEntry->Entry();
-	// get the iMtmData1 value & zero bits 0-3 then add new status
-	TInt32 mtmdata1 = ( entry.iMtmData1 & 0xFFFFFFF0 );
-	mtmdata1 += CPushMsgEntryBase::EPushMsgStatusCorrupt;
-	// Now set values for TMsvEntry and update the server entry
-	entry.iMtmData1 = mtmdata1;
-	msvEntry->ChangeL( entry );
-
-	CleanupStack::PopAndDestroy( msvEntry );
-	}
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
-/**
- * Async. Version
- */
-void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
-                                                        TRequestStatus& aStatus )
-	{
-#ifdef __TEST_MULTIPART_REL_SUPP
-	iAcknowledge=ETrue;
-	SetConfirmationStatus(aStatus);
-	iMessage = aPushMsg;
-	iState = ELoadMsgData;
-	IdleComplete();
-#else // __TEST_MULTIPART_REL_SUPP
-	iAcknowledge=ETrue;
-	SetConfirmationStatus(aStatus);
-	iMessage = aPushMsg;
-    // Drop all multipart messages.
-    iState = EDone;
-	IdleComplete();
-#endif // __TEST_MULTIPART_REL_SUPP
-	}
-
-/**
- * Sync. Version
- */
-void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg )
-	{
-#ifdef __TEST_MULTIPART_REL_SUPP
-	iAcknowledge=EFalse;
-	iMessage = aPushMsg;
-	iState = ELoadMsgData;
-	IdleComplete();
-#else // __TEST_MULTIPART_REL_SUPP
-	iAcknowledge=EFalse;
-	iMessage = aPushMsg;
-    // Drop all multipart messages.
-    iState = EDone;
-	IdleComplete();
-#endif // __TEST_MULTIPART_REL_SUPP
-	}
-
-void CMultiPartRelAndAltContentHandler::CancelHandleMessage()
-	{
-    Cancel();
-	}
-
-void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved1()
-	{
-	User::Panic(KReserved, KErrNotSupported);
-	}
-
-void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved2()
-	{
-	User::Panic(KReserved, KErrNotSupported);
-	}
-
-void CMultiPartRelAndAltContentHandler::DoCancel()
-	{
-	Complete( KErrCancel );
-	}
-
-/**
-*RunL handles each part separately
-*/
-void CMultiPartRelAndAltContentHandler::RunL()
-	{
-	switch(iState)
-		{
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
-        case ELoadMsgData:
-            {
-			LoadMsgDataL();
-			break;
-            }
-		case EHandlePart:
-            {
-			HandlePartL();
-			break;
-            }
-		case ENextPart:
-            {
-			NextPartL();
-			break;
-            }
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
-        case EDone:
-            {
-			Complete(KErrNone);
-			break;
-            }
-		default:
-            {
-			break;
-            }
-		}
-	}
-
-/** 
- * Clean up
- */
-TInt CMultiPartRelAndAltContentHandler::RunError(TInt aError)
-	{
-	iState=EDone;
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
-    if (iSavedMsgId != KMsvNullIndexEntryId)
-		{
-		TRAPD(error, SetMsgCorruptFlagL());
-		}
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
-	Complete(aError);
-	return KErrNone;
-	}
-
-// ---------------------------------------------------------
-// CMultiPartRelAndAltContentHandler::HandleSessionEventL
-// ---------------------------------------------------------
-//
-void CMultiPartRelAndAltContentHandler::HandleSessionEventL( 
-                                             TMsvSessionEvent /*aEvent*/, 
-                                             TAny* /*aArg1*/, 
-                                             TAny* /*aArg2*/, 
-                                             TAny* /*aArg3*/ )
-    {}
-
--- a/pushmtm/Plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CMultiPartRelAndAltContentHandler.
-*
-*/
-
-
-
-#ifndef __CMULTIPARTRELANDALTCONTENTHANDLER_H__
-#define __CMULTIPARTRELANDALTCONTENTHANDLER_H__
-
-// System includes
-//
-#include "PushMtmDef.hrh"
-#include "PushContentHandlerDef.hrh"
-#include <push/CContentHandlerBase.h>
-#include <E32Base.h>
-#include <msvstd.h>
-#include <msvapi.h>
-
-// Constants
-//
-const TUid KUidPushMultiPartRelAndAltContentHandler	= {
-           EUidPushMultiPartRelAndAltContentHandler };
-
-// Forward class declarations
-//
-class CMsvSession;
-class CMultipartIteratorBase;
-
-/**
-* The MultiPart/Alternative & Multipart/Alternative Content Handler
-*
-* Saves the whole message in the Message Server, each part getting saved as a child
-* entry to the main part.
-*
-* All multipart/rel+alt messages are dropped if __TEST_MULTIPART_REL_SUPP
-* is not defined.
-*/
-class CMultiPartRelAndAltContentHandler : public CContentHandlerBase,
-                                          public MMsvSessionObserver
-	{
-    public:	// Methods
-
-	    static CMultiPartRelAndAltContentHandler* NewL();
-
-	    virtual ~CMultiPartRelAndAltContentHandler();
-
-    private: // Constructors
-
-	    CMultiPartRelAndAltContentHandler();
-
-	    void ConstructL();
-
-    private: // New functions
-
-#ifdef __TEST_MULTIPART_REL_SUPP
-
-        void LoadMultiPartMsgL();
-
-	    void HandlePartL();
-
-	    void NextPartL();
-
-	    void SaveMsgRootL();
-
-	    void LoadMsgDataL();
-
-	    void SetMsgCorruptFlagL();
-
-#endif // __TEST_MULTIPART_REL_SUPP
-
-    private:	// Methods from CPushHandlerBase
-
-	    void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
-
-	    void HandleMessageL(CPushMessage* aPushMsg);
-
-	    void CancelHandleMessage();
-
-	    void CPushHandlerBase_Reserved1();
-
-	    void CPushHandlerBase_Reserved2();
-
-    private:	// Methods from CActive
-
-	    void DoCancel();
-
-	    void RunL();
-
-	    TInt RunError(TInt aError);
-
-    private: // from MMsvSessionObserver
-
-        void HandleSessionEventL( TMsvSessionEvent aEvent,
-                                  TAny* aArg1, TAny* aArg2, TAny* aArg3);
-
-    private:	// Attributes
-
-	    enum TState
-            {
-            ELoadMsgData,
-            EHandlePart,
-            EDone,
-            ENextPart
-            };
-
-        CMsvSession* iMsvSession; ///< Has.
-
-        TMsvId              iSavedMsgId;
-
-	    CMultipartIteratorBase*	iMultiMessage;
-    };
-
-#endif    // __CMULTIPARTRELANDALTCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CPushContentHandlerBase.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushMtmUtil.h"
-#include "PushMtmSettings.h"
-#include "PushInitiatorList.h"
-#include "PushInitiator.h"
-#include "PushMtmCommands.hrh"
-#include "PushMtmLog.h"
-#include "PushMtmUiDef.h"
-#include "StringResourceReader.h"
-#include "PushContentHandlerPanic.h"
-#include <PushEntry.h>
-#include <push/pushmessage.h>
-#include <msvstd.h>
-#include <mtclreg.h>
-#include <mtclbase.h>
-#include <data_caging_path_literals.hrh>
-#include <f32file.h>
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::CPushContentHandlerBase
-// ---------------------------------------------------------
-//
-CPushContentHandlerBase::CPushContentHandlerBase()
-:   CContentHandlerBase()
-	{
-	}
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::ConstructL
-// ---------------------------------------------------------
-//
-void CPushContentHandlerBase::ConstructL()
-	{
-    iMsvSession = CMsvSession::OpenSyncL( *this );
-    PUSHLOG_WRITE("CPushContentHandlerBase iMsvSession OK")
-	iWapPushUtils = CPushMtmUtil::NewL( *iMsvSession );
-    PUSHLOG_WRITE("CPushContentHandlerBase iWapPushUtils OK")
-    iMtmSettings = CPushMtmSettings::NewL();
-    PUSHLOG_WRITE("CPushContentHandlerBase iMtmSettings OK")
-
-    // Add resource file reader.
-    TParse* fileParser = new (ELeave) TParse;
-    CleanupStack::PushL( fileParser );
-    fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL ); 
-    iStrRscReader = new (ELeave) CStringResourceReader
-                    ( iMsvSession->FileSession(), fileParser->FullName() );
-    CleanupStack::PopAndDestroy( fileParser ); // fileParser
-    fileParser = NULL;
-    PUSHLOG_WRITE("CPushContentHandlerBase iStrRscReader OK")
-
-    CActiveScheduler::Add( this );
-	}
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::~CPushContentHandlerBase
-// ---------------------------------------------------------
-//
-CPushContentHandlerBase::~CPushContentHandlerBase()
-	{
-    PUSHLOG_ENTERFN("CPushContentHandlerBase::~CPushContentHandlerBase")
-
-    // Call Cancel() in derived classes!
-    delete iStrRscReader; // Must be deleted before iMsvSession.
-    delete iMtmSettings; // It has to be deleted before iMsvSession, because 
-    // it uses iMsvSession->FileSession().
-	delete iWapPushUtils;
-    delete iMsvSession;
-
-    PUSHLOG_LEAVEFN("CPushContentHandlerBase::~CPushContentHandlerBase")
-	}
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::DoCollectGarbageL
-// ---------------------------------------------------------
-//
-void CPushContentHandlerBase::DoCollectGarbageL()
-	{
-    PUSHLOG_ENTERFN("CPushContentHandlerBase::DoCollectGarbageL")
-
-    CClientMtmRegistry* clientReg = CClientMtmRegistry::NewL( *iMsvSession );
-    CleanupStack::PushL( clientReg );
-    PUSHLOG_WRITE("CPushContentHandlerBase clientReg OK")
-    CBaseMtm* pushMtm = clientReg->NewMtmL( KUidMtmWapPush );
-    CleanupStack::PushL( pushMtm );
-    PUSHLOG_WRITE("CPushContentHandlerBase pushMtm OK")
-    CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
-    CleanupStack::PushL( dummySel );
-    TBuf8<1> dummyPar;
-
-    pushMtm->InvokeSyncFunctionL( EPushMtmCmdCollectGarbage, 
-                                  *dummySel, dummyPar );
-
-    CleanupStack::PopAndDestroy( 3, clientReg );
-                                // dummySel, pushMtm, clientReg
-
-    PUSHLOG_LEAVEFN("CPushContentHandlerBase::DoCollectGarbageL")
-    }
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::FilterPushMsgL
-// ---------------------------------------------------------
-//
-TBool CPushContentHandlerBase::FilterPushMsgL()
-    {
-    PUSHLOG_ENTERFN("CPushContentHandlerBase::FilterPushMsgL")
-
-	TBool msgAccepted = ETrue;
-
-    if ( iMtmSettings->ServiceReception() == EFalse )
-        {
-        // Discard message.
-        msgAccepted = EFalse;
-        PUSHLOG_WRITE(" ServiceReception OFF")
-        }
-
-    PUSHLOG_WRITE_FORMAT(" msgAccepted <%d>",msgAccepted)
-    PUSHLOG_LEAVEFN("CPushContentHandlerBase::FilterPushMsgL")
-    return msgAccepted;
-    }
-
-// ---------------------------------------------------------
-// CPushContentHandlerBase::HandleSessionEventL
-// ---------------------------------------------------------
-//
-void CPushContentHandlerBase::HandleSessionEventL
-    ( 
-        TMsvSessionEvent /*aEvent*/, 
-        TAny* /*aArg1*/, 
-        TAny* /*aArg2*/, 
-        TAny* /*aArg3*/ 
-    )
-    {
-    }
--- a/pushmtm/Plugins/PushContentHandler/CPushContentHandlerBase.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CPushContentHandlerBase.
-*
-*/
-
-
-
-#ifndef __CPUSHCONTENTHANDLERBASE_H__
-#define __CPUSHCONTENTHANDLERBASE_H__
-
-
-// INCLUDE FILES
-
-#include <push/CContentHandlerBase.h>
-#include <E32Base.h>
-#include <msvstd.h>
-#include <msvapi.h>
-
-// FORWARD DECLARATIONS
-
-class CMsvSession;
-class CPushMtmUtil;
-class CPushMtmSettings;
-class CStringResourceReader;
-
-// CLASS DECLARATION
-
-/**
-* CPushContentHandlerBase class stands as a base class for almost all push
-* content handlers of the Push MTM. It collects the generic functionality of
-* a push content handler, such as garbage collection when receiving new
-* service message, supporting CMsvSession, CPushMtmUtil and CPushMtmSettings
-* objects.
-*/
-class CPushContentHandlerBase : public CContentHandlerBase,
-                                public MMsvSessionObserver
-	{
-    protected: // Constructors and destructor
-
-        /**
-        * Constructor.
-        */
-	    CPushContentHandlerBase();
-
-        /**
-        * Symbian OS constructor. CActiveScheduler::Add( this ) is called in
-        * this method!!
-        */
-	    void ConstructL();
-
-        /**
-        * Destructor.
-        */
-	    virtual ~CPushContentHandlerBase();
-
-    protected: // New functions
-
-        /**
-        * Do Garbage Collection synchronously.
-        * @return None.
-        */
-	    void DoCollectGarbageL();
-
-        /**
-        * Apply Push MTM settings on the message.
-        * @return ETrue if the message passed the filtering.
-        */
-        TBool FilterPushMsgL();
-
-    protected: // From MMsvSessionObserver
-
-        /**
-        * Msv session events are handled by this method. This implementation
-        * is empty.
-        * @return None.
-        */
-        void HandleSessionEventL( TMsvSessionEvent aEvent,
-                                  TAny* aArg1,
-                                  TAny* aArg2,
-                                  TAny* aArg3);
-
-    protected: // Data
-
-        CMsvSession* iMsvSession; ///< Session to Message Server. Has.
-        CPushMtmUtil* iWapPushUtils; ///< Push Utility. Has.
-        CPushMtmSettings* iMtmSettings; ///< Push Settings. Has.
-        /// Owned. It uses iMsvSession's RFs!
-        CStringResourceReader* iStrRscReader;
-    };
-
-#endif	// __CPUSHCONTENTHANDLERBASE_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CSIContentHandler.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1835 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CSIContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CSIContentHandler.h"
-#include "PushMtmUtil.h"
-#include "PushMtmSettings.h"
-#include "PushMtmLog.h"
-#include "PushMtmUiDef.h"
-#include "StringResourceReader.h"
-#include "PushContentHandlerPanic.h"
-#include "si_dict.h"
-#include "PushContentHandlerUtils.h"
-#include <push/CSIPushMsgEntry.h>
-#include <msvids.h>
-#include <PushMtmUi.rsg>
-#include <nw_dom_node.h>
-#include <nw_dom_document.h>
-#include <nw_dom_element.h>
-#include <nw_dom_text.h>
-#include <nw_wbxml_dictionary.h>
-#include <THttpFields.h>
-
-// CONSTANTS
-
-// si attributes / elements
-_LIT8( KSi,          "si" );
-_LIT8( KIndication,  "indication" );
-_LIT8( KHrefAttrib,  "href" );
-_LIT8( KSiIdAttrib,  "si-id" );
-_LIT8( KCreatedAttrib,   "created" );
-_LIT8( KExpiresAttrib,   "si-expires" );
-_LIT8( KActionAttrib,    "action" );
-
-// action attribute literals
-_LIT8( KDeleteAction,    "delete" );
-_LIT8( KSignalNone,      "signal-none" );
-_LIT8( KSignalLow,       "signal-low" );
-_LIT8( KSignalMedium,    "signal-medium" );
-_LIT8( KSignalHigh,      "signal-high" );
-
-_LIT( KSiTextContentType, "text/vnd.wap.si" );
-
-const TInt KValidMaxEncodedDateTimeSize = 7;
-const TInt KValidUTCLength = 20; // YYYY-MM-DDTHH:MM:SSZ
-const TInt KValidUTCNumericals = 14;
-const TInt KValidUTCYearBlockLength = 4;
-const TInt KValidUTCOtherBlockLength = 2;
-const TUint8 KAsciiZeroCharCode = 0x30;
-
-const TInt KValidTTimeMonthStart = 4;
-const TInt KValidTTimeDayStart = 6;
-const TInt KValidTTimeHourStart = 8;
-const TInt KValidTTimeMinuteStart = 10;
-const TInt KValidTTimeSecondStart = 12;
-const TInt KValidTTimeBlockLength = 2;
-
-const TInt KValidTTimeLength = 14; // YYYYMMDDHHMMSS
-
-const TInt KNoOfDictArrays = 1;
-
-_LIT( KCharMinus, "-" );
-_LIT( KCharT, "T" );
-_LIT( KCharColon, ":" );
-_LIT( KCharZ, "Z" );
-
-/// Conversion buffer size.
-LOCAL_D const TInt KPushConversionBufferSize = 256;
-/// Zero width non-breaking space character.
-LOCAL_D const TUint16 KPushZeroWidthNbsp = 0xfeff;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CSIContentHandler::NewL
-// ---------------------------------------------------------
-//
-CSIContentHandler* CSIContentHandler::NewL()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::NewL")
-
-	CSIContentHandler* self = new (ELeave) CSIContentHandler;
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::NewL")
-	return self;
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::~CSIContentHandler
-// ---------------------------------------------------------
-//
-CSIContentHandler::~CSIContentHandler()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::~CSIContentHandler")
-
-    Cancel();
-	delete iHrefBuf;
-	delete iSiIdBuf;
-	delete iData;
-    delete iCharacterSetConverter;
-    iCharacterSetConverter = NULL;
-    delete iCharacterSetsAvailable;
-    iCharacterSetsAvailable = NULL;
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::~CSIContentHandler")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::CSIContentHandler
-// ---------------------------------------------------------
-//
-CSIContentHandler::CSIContentHandler()
-:   CPushContentHandlerBase(),
-    iSavedMsgId( KMsvNullIndexEntryId ),
-    iPushMsgAction( KErrNotFound ),
-    iExpiresTime( Time::NullTTime() ),
-    iCreatedTime( Time::NullTTime() )
-	{
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ConstructL()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ConstructL")
-
-    CPushContentHandlerBase::ConstructL();
-    // Added to Active Scheduler.
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ConstructL")
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::CollectGarbageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CollectGarbageL()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::CollectGarbageL")
-
-    DoCollectGarbageL();
-
-    //Ready.
-    iState = EFilteringAndParsing;
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::CollectGarbageL")
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParsePushMsgL
-// Note that cXML parser dosn't do any validation!
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParsePushMsgL()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ParsePushMsgL")
-
-    TPtrC8 bodyPtr;
-    iMessage->GetMessageBody( bodyPtr );
-    // If there is no body in the message leave with an error
-    if ( bodyPtr.Size() == 0 )
-        {
-        PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: Empty body")
-        User::Leave( KErrCorrupt );
-        }
-
-    // Get content type. It will tell us wheather the msg body is encoded or
-    // textual.
-    TPtrC contentType;
-	iMessage->GetContentType( contentType );
-    PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: HTTP header - Content type <%S>",&contentType);
-
-    /*
-    TPtrC8 encodingPtr;
-    TBool encodingFound = iMessage->GetHeaderField
-                          ( EHttpContentEncoding, encodingPtr );
-    #ifdef __TEST_LOG__
-    TBuf<64> encodingBuf;
-    encodingBuf.Copy( encodingPtr );
-    PUSHLOG_WRITE_FORMAT(" HTTP header - Content encoding <%S>",&encodingBuf);
-    #endif // __TEST_LOG__
-    */
-
-    // Add SI dictionary.
-    NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
-        { (NW_WBXML_Dictionary_t*)&NW_SI_WBXMLDictionary };
-
-    NW_Status_t stat = NW_STAT_SUCCESS;
-
-    RWbxmlDictionary wbxmlDict;
-    wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
-    CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
-
-    NW_TinyDom_Handle_t domHandle;
-    NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
-    NW_Int32 length = (NW_Int32)bodyPtr.Size();
-    // Let's use the content type now.
-    NW_Bool encoded = ( contentType.CompareF( KSiTextContentType ) == 0 ) ?
-                                                         NW_FALSE : NW_TRUE;
-    // SI public identifier.
-    NW_Uint32 publicID = NW_SI_PublicId;
-    NW_Bool extTNotStringTable = NW_FALSE;
-    NW_DOM_NodeType_t type = 0;
-    /**********************************
-    *   Root of DOM
-    ***********************************/
-    CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
-    CleanupStack::PushL( docTreeOwner );
-    NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
-        (
-                            &domHandle,
-                            buffer,
-                            length,
-                            encoded,
-                            publicID,
-                            extTNotStringTable
-        );
-	if (!domNode)
-		{
-		PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is Null")
-		}
-    User::LeaveIfNull( domNode );
-	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is not Null") // to be deleted
-    // Let domNode be on the Cleanup Stack.
-    docTreeOwner->SetDocTree( domNode );
-
-    // It must be a document node.
-    type = NW_DOM_Node_getNodeType( domNode );
-    if ( type != NW_DOM_DOCUMENT_NODE )
-        {
-        PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not Document node <%d>",type)
-        User::Leave( KErrArgument );
-        }
-
-    // Get character encoding (NW_Uint32)
-    iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
-    PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
-
-    /**********************************
-    *   ELEMENT si
-    ***********************************/
-    // Get the first element of the document that must be an si.
-	// first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
-	TBool domNodeHasChildNodes = EFalse;
-	domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
-	PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
-	if (!domNodeHasChildNodes)
-        {
-        PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No SI element present in the dom tree. Message corrupted.")
-        User::Leave( KErrCorrupt );
-        }
-
-	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: before calling getDocumentElement")
-    NW_DOM_ElementNode_t* siElement =
-        NW_DOM_DocumentNode_getDocumentElement( domNode );
-	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: after calling getDocumentElement")
-	if (!siElement)
-		{
-		PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is Null")
-		}
-	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, before leaving")
-    User::LeaveIfNull( siElement );
-	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, after leaving if siElement is null")
-
-    type = NW_DOM_Node_getNodeType( siElement );
-
-    CStringOwner* stringOwner = new (ELeave) CStringOwner;
-    CleanupStack::PushL( stringOwner );
-
-    NW_String_t* name = NW_String_new();
-    User::LeaveIfNull( name );
-    // Let name be on the Cleanup Stack.
-    stringOwner->SetString( name );
-    stat = NW_DOM_Node_getNodeName( siElement, name );
-    User::LeaveIfError( NwxStatusToErrCode( stat ) );
-    NW_Byte*  nameBuf = NW_String_getStorage( name );
-    NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
-    TPtrC8 namePtr( nameBuf, nameLen );
-
-    // Now comes the validity check.
-    if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSi ) != 0 )
-        {
-        PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not si element node <%d>",type)
-        User::Leave( KErrArgument );
-        }
-
-    CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
-    /**********************************
-    *   ELEMENT indication
-    ***********************************/
-    if ( NW_DOM_Node_hasChildNodes( siElement ) )
-        {
-        NW_DOM_Node_t* node = NW_DOM_Node_getFirstChild( siElement );
-		if (!node)
-			{
-			PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: no si child nodes!")
-			}
-        User::LeaveIfNull( node );
-
-        // Find the indication element.
-        TBool indicationFound = EFalse;
-        do {
-            type = NW_DOM_Node_getNodeType( node );
-
-            CStringOwner* stringOwner = new (ELeave) CStringOwner;
-            CleanupStack::PushL( stringOwner );
-
-            NW_String_t* name = NW_String_new();
-            User::LeaveIfNull( name );
-            stringOwner->SetString( name );
-            stat = NW_DOM_Node_getNodeName( node, name );
-			PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
-            User::LeaveIfError( NwxStatusToErrCode( stat ) );
-            NW_Byte*  nameBuf = NW_String_getStorage( name );
-            NW_Uint16 nameLen = NW_String_getCharCount( name,
-                                                        iCharEncoding );
-            TPtrC8 namePtr( nameBuf, nameLen );
-
-            if ( type == NW_DOM_ELEMENT_NODE &&
-                 namePtr.CompareF( KIndication ) == 0 )
-                {
-                // We found the indication element. Parse it.
-                PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: indication under si found.")
-                indicationFound = ETrue;
-                NW_DOM_ElementNode_t* indicationElement =
-                    REINTERPRET_CAST( NW_DOM_ElementNode_t*, node );
-                ParseIndicationL( *indicationElement );
-                }
-
-            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
-            if ( !indicationFound )
-                {
-                // Iterate next.
-                node = NW_DOM_Node_getNextSibling( node );
-                if ( !node )
-                    {
-                    PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No more sibling.")
-                    break;
-                    }
-                }
-
-            } while ( !indicationFound );
-        }
-
-    // Cleanup.
-    CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
-
-    if ( !ActionFlag() )
-        {
-        // default if no action explicitly stated
-        iPushMsgAction = CSIPushMsgEntry::ESIPushMsgSignalMedium;
-        SetActionFlag( ETrue );
-        PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Defaulting to ActionFlag: %d",iPushMsgAction)
-        }
-
-    iState = EProcessing;
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ParsePushMsgL")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParseIndicationL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParseIndicationL( NW_DOM_ElementNode_t& aIndication )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ParseIndicationL")
-
-    NW_Status_t stat = NW_STAT_SUCCESS;
-    NW_DOM_NodeType_t type = 0;
-
-    if ( NW_DOM_ElementNode_hasAttributes( &aIndication ) )
-        {
-        NW_DOM_AttributeListIterator_t attrIter;
-        stat = NW_DOM_ElementNode_getAttributeListIterator
-                             ( &aIndication, &attrIter );
-		PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
-        User::LeaveIfError( NwxStatusToErrCode( stat ) );
-
-        NW_DOM_AttributeHandle_t attrHandle;
-        while ( NW_DOM_AttributeListIterator_getNextAttribute
-                ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
-            {
-            ParseIndAttributeL( attrHandle );
-            }
-        }
-
-    /**********************************
-    *   PCDATA of ELEMENT indication
-    ***********************************/
-    if ( NW_DOM_Node_hasChildNodes( &aIndication ) )
-        {
-        NW_DOM_TextNode_t* textNode =
-            NW_DOM_Node_getFirstChild( &aIndication );
-        User::LeaveIfNull( textNode );
-
-        type = NW_DOM_Node_getNodeType( textNode );
-        if ( type != NW_DOM_TEXT_NODE )
-            {
-            PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: Not text node <%d>",type)
-            User::Leave( KErrArgument );
-            }
-
-        ParseTextL( *textNode );
-        }
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndicationL")
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParseIndAttributeL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParseIndAttributeL( NW_DOM_AttributeHandle_t&
-                                            aAttrHandle )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ParseIndAttributeL")
-
-    NW_Status_t stat = NW_STAT_SUCCESS;
-
-    CStringOwner* stringOwner = new (ELeave) CStringOwner;
-    CleanupStack::PushL( stringOwner );
-
-    NW_String_t* attrName = NW_String_new();
-    User::LeaveIfNull( attrName );
-    stringOwner->SetString( attrName );
-
-    // Get the name of the attribute.
-    stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
-    User::LeaveIfError( NwxStatusToErrCode( stat ) );
-    NW_Byte*  attrNameBuf = NW_String_getStorage( attrName );
-    NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
-    TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
-
-    if ( attrNamePtr.CompareF( KCreatedAttrib ) == 0 )
-        {
-        if ( CreatedFlag() )
-            {
-            PUSHLOG_WRITE(" created redefinition")
-            User::Leave( KErrCorrupt );
-            }
-        else
-            {
-            TBool gotDate = AttributeToTTimeL( aAttrHandle, iCreatedTime );
-            SetCreatedFlag( gotDate );
-            PUSHLOG_WRITE_FORMAT(" iCreatedTime set %d",gotDate?1:0)
-            }
-        }
-    else if ( attrNamePtr.CompareF( KHrefAttrib ) == 0 )
-        {
-        if ( HrefFlag() )
-            {
-            PUSHLOG_WRITE(" href redefinition")
-            User::Leave( KErrCorrupt );
-            }
-        else
-            {
-            CStringOwner* stringOwner = new (ELeave) CStringOwner;
-            CleanupStack::PushL( stringOwner );
-
-            NW_String_t* val = NW_String_new();
-            User::LeaveIfNull( val );
-            stringOwner->SetString( val );
-            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
-            if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
-                {
-                User::LeaveIfError( NwxStatusToErrCode( stat ) );
-                NW_Byte* storage = NW_String_getStorage( val );
-                NW_Uint16 length = NW_String_getCharCount( val,
-                                                           iCharEncoding );
-                if ( length == 0 )
-                    {
-                    // Zero length href attribute is considered as missing.
-                    PUSHLOG_WRITE(" Zero length HrefFlag");
-                    }
-                else
-                    {
-                    TPtrC8 hrefPtr( storage, length );
-                    HBufC* tempHrefBuf = HBufC::NewMaxL( length );
-                    // No leavable after it!!! until...
-                    tempHrefBuf->Des().Copy( hrefPtr );
-                    iHrefBuf = tempHrefBuf; // ...until here.
-                    SetHrefFlag( ETrue );
-                    PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
-                    }
-                }
-
-            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-            }
-        }
-    else if ( attrNamePtr.CompareF( KExpiresAttrib ) == 0 )
-        {
-        if ( ExpiresFlag() )
-            {
-            PUSHLOG_WRITE(" expires redefinition")
-            User::Leave( KErrCorrupt );
-            }
-        else
-            {
-            TBool gotDate = AttributeToTTimeL( aAttrHandle, iExpiresTime );
-            SetExpiresFlag( gotDate );
-            PUSHLOG_WRITE_FORMAT(" iExpiresTime set %d",gotDate?1:0)
-            }
-        }
-    else if ( attrNamePtr.CompareF( KSiIdAttrib ) == 0 )
-        {
-        if ( SiIdFlag() )
-            {
-            PUSHLOG_WRITE(" si-id redefinition")
-            User::Leave( KErrCorrupt );
-            }
-        else
-            {
-            // It is expected to be String.
-            CStringOwner* stringOwner = new (ELeave) CStringOwner;
-            CleanupStack::PushL( stringOwner );
-
-            NW_String_t* val = NW_String_new();
-            User::LeaveIfNull( val );
-            stringOwner->SetString( val );
-            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
-            User::LeaveIfError( NwxStatusToErrCode( stat ) );
-            NW_Byte* storage = NW_String_getStorage( val );
-            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
-            TPtrC8 siidPtr( storage, length );
-
-            iSiIdBuf = HBufC::NewMaxL( siidPtr.Length() );
-            iSiIdBuf->Des().Copy( siidPtr );
-            SetSiIdFlag( ETrue );
-            PUSHLOG_WRITE_FORMAT(" SiIdFlag set <%S>",iSiIdBuf)
-
-            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-            }
-        }
-    else if ( attrNamePtr.CompareF( KActionAttrib ) == 0 )
-        {
-        if ( ActionFlag() )
-            {
-            PUSHLOG_WRITE(" action redefinition")
-            User::Leave( KErrCorrupt );
-            }
-        else
-            {
-            // It is expected to be String.
-            CStringOwner* stringOwner = new (ELeave) CStringOwner;
-            CleanupStack::PushL( stringOwner );
-
-            NW_String_t* val = NW_String_new();
-            User::LeaveIfNull( val );
-            stringOwner->SetString( val );
-            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
-            User::LeaveIfError( NwxStatusToErrCode( stat ) );
-            NW_Byte* storage = NW_String_getStorage( val );
-            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
-            TPtrC8 actionPtr( storage, length );
-
-            iPushMsgAction = ConvertActionString( actionPtr );
-            SetActionFlag( ETrue );
-            PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
-
-            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-            }
-        }
-    else
-        {
-        __ASSERT_DEBUG( EFalse,
-            ContHandPanic( EPushContHandPanUnexpSiToken ) );
-        }
-
-    CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndAttributeL")
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ParseTextL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ParseTextL( NW_DOM_TextNode_t& aTextNode )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ParseTextL")
-
-    if ( DataFlag() )
-        {
-        PUSHLOG_WRITE(" Data flag already set.")
-        }
-    else
-        {
-        CStringOwner* stringOwner = new (ELeave) CStringOwner;
-        CleanupStack::PushL( stringOwner );
-
-        NW_String_t* data = NW_String_new();
-        User::LeaveIfNull( data );
-        stringOwner->SetString( data );
-        NW_Status_t stat = NW_STAT_SUCCESS;
-        stat = NW_DOM_TextNode_getData( &aTextNode, data );
-        User::LeaveIfError( NwxStatusToErrCode( stat ) );
-
-        HBufC16* ucs2buffer = ConvertToUnicodeL( *data, iCharEncoding );
-        // Be careful: ucs2buffer is not on the CleanupStack!
-        __ASSERT_DEBUG( ucs2buffer != 0, ContHandPanic( EPushContHandPanNullUcs2Buf ) );
-
-        TPtrC16 ucs2ptrC( *ucs2buffer );
-        if ( ucs2ptrC.Length() == 0 )
-            {
-            // Zero length data is considered as nothing.
-            PUSHLOG_WRITE(" Zero length Data");
-            }
-        else
-            {
-            PUSHLOG_WRITE_FORMAT(" Data: <%S>",&ucs2ptrC);
-
-            #ifdef __TEST_LOG__
-            // Write out each unicode character identifier
-            TInt length = ucs2ptrC.Length();
-            for (TInt logI=0;logI<length;logI++)
-                {
-                TBuf16<1> currChar;
-                currChar.Copy( ucs2ptrC.Mid( logI, /*aLength*/1 ) );
-                PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
-                }
-            #endif // __TEST_LOG__
-
-            iData = ucs2buffer; // Ownership transferred.
-            ucs2buffer = NULL;
-            SetDataFlag( ETrue );
-            }
-
-        CleanupStack::PopAndDestroy( stringOwner );
-        }
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ParseTextL")
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertToUnicodeL
-// ---------------------------------------------------------
-//
-HBufC16* CSIContentHandler::ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
-
-    __ASSERT_DEBUG( aCharSetId != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
-
-    InitialiseCharacterSetConverterL();
-
-    HBufC16* ucs2buffer = NULL; // The return value.
-    TBool resultOnStack = EFalse;
-
-    #ifdef __TEST_LOG__
-    // Write out the original 8-bit buffer
-    TInt origiLength = aSrc.Length();
-    for (TInt origiLogI=0;origiLogI<origiLength;origiLogI++)
-        {
-        TBuf16<1> currChar; // Only 16-bit buffer can be written out.
-        currChar.Copy( aSrc.Mid( origiLogI, /*aLength*/1 ) );
-        PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
-        }
-    #endif // __TEST_LOG__
-
-    // Result
-    HBufC16* buffer = HBufC16::NewLC( KPushConversionBufferSize );
-    PUSHLOG_WRITE(" buffer allocated");
-    TPtr16 ptr( buffer->Des() );
-
-    // Prepare conversion for the given charset ID.
-    RFs& fs = iMsvSession->FileSession();
-    iCharacterSetConverter->PrepareToConvertToOrFromL
-        ( aCharSetId, *iCharacterSetsAvailable, fs );
-    PUSHLOG_WRITE(" PrepareToConvertToOrFromL OK");
-
-    TInt state = 0;
-    TInt remaining = iCharacterSetConverter->ConvertToUnicode( ptr, aSrc, state );
-    PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
-    while ( remaining >= 0 )
-        {
-        if ( ucs2buffer == NULL )
-            {
-            ucs2buffer = HBufC::NewLC( ptr.Length() );
-            resultOnStack = ETrue;
-            }
-        else
-            {
-            __ASSERT_DEBUG( resultOnStack,
-                ContHandPanic( EPushContHandPanSiResNotOnStack ) );
-            // This may change the address of ucs2buffer so we need to put
-            // it on the cleanup stack again!!
-            ucs2buffer = ucs2buffer->ReAllocL
-                ( ucs2buffer->Length() + ptr.Length() );
-            CleanupStack::Pop();    // old ucs2buffer
-            CleanupStack::PushL( ucs2buffer );  // possibly new copy
-            PUSHLOG_WRITE(" ucs2buffer reallocated");
-            }
-        TPtr16 ucs2ptr( ucs2buffer->Des() );
-        ucs2ptr.Append( ptr );
-        if ( remaining > 0 )
-            {
-            // Try to convert all remaining characters.
-            ptr.Zero();
-            remaining = iCharacterSetConverter->ConvertToUnicode
-                ( ptr, aSrc.Right( remaining ), state );
-            PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
-            }
-        else
-            {
-            PUSHLOG_WRITE(" break");
-            break;
-            }
-        }
-
-    if ( resultOnStack )
-        {
-        CleanupStack::Pop();    // ucs2buffer
-        resultOnStack = EFalse;
-        }
-
-    // ucs2buffer is not on the CleanupStack!
-
-    CleanupStack::PopAndDestroy( buffer ); // buffer
-
-    if ( ucs2buffer == NULL )
-        {
-        PUSHLOG_WRITE(" NULL ucs2buffer - allocating an empty buf");
-        ucs2buffer = KNullDesC().AllocL();
-        }
-    else
-        {
-        // Check if first character is a Zero-width nbsp.
-        TPtrC16 ucs2ptrC( *ucs2buffer );
-        if ( ucs2ptrC.Length() >= 1 && ucs2ptrC[0] == KPushZeroWidthNbsp )
-            {
-            // First character is a Zero-width NBSP. This character is used as
-            // BOM in some encodings and should not be present at this point.
-            // But we are tolerant and remove it.
-            // (Not expecting big-endianness here.)
-            HBufC16* temp = ucs2buffer;
-            CleanupStack::PushL( temp );
-            ucs2buffer = ucs2ptrC.Mid( 1 ).AllocL();
-            CleanupStack::PopAndDestroy( temp ); // temp
-            PUSHLOG_WRITE(" BOM removed");
-            }
-        else
-            {
-            PUSHLOG_WRITE(" No BOM");
-            }
-        }
-
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
-    return ucs2buffer;
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertToUnicodeL
-// ---------------------------------------------------------
-//
-HBufC16* CSIContentHandler::ConvertToUnicodeL
-    ( NW_String_t& aString, NW_Uint32 aCharEncoding )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
-
-    /* As cXmlLibrary does, we support only the following charsets:
-    #define HTTP_iso_10646_ucs_2        0x03E8
-    #define HTTP_iso_8859_1             0x04
-    #define HTTP_us_ascii               0x03
-    #define HTTP_utf_8                  0x6A
-    #define HTTP_utf_16                 1015
-    */
-    TUint id = 0;
-    if ( aCharEncoding == HTTP_iso_10646_ucs_2 )
-        {
-        id = KCharacterSetIdentifierUcs2;
-        PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
-        }
-    else if ( aCharEncoding == HTTP_iso_8859_1 )
-        {
-        id = KCharacterSetIdentifierIso88591;
-        PUSHLOG_WRITE(" KCharacterSetIdentifierIso88591")
-        }
-    else if ( aCharEncoding == HTTP_us_ascii )
-        {
-        id = KCharacterSetIdentifierAscii;
-        PUSHLOG_WRITE(" KCharacterSetIdentifierAscii")
-        }
-    else if ( aCharEncoding == HTTP_utf_8 )
-        {
-        id = KCharacterSetIdentifierUtf8;
-        PUSHLOG_WRITE(" KCharacterSetIdentifierUtf8")
-        }
-    else if ( aCharEncoding == HTTP_utf_16 ) // No such in CharConv.h
-        {
-        id = KCharacterSetIdentifierUcs2;
-        PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
-        }
-    else
-        {
-        id = KCharacterSetIdentifierUtf8; // Defaulting to UTF-8
-        PUSHLOG_WRITE(" DEFAULTING to KCharacterSetIdentifierUtf8");
-        }
-
-    PUSHLOG_WRITE_FORMAT(" id: 0x%x",id);
-    __ASSERT_DEBUG( id != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
-
-    // Source
-    PUSHLOG_WRITE_FORMAT(" Storage: 0x%x",NW_String_getStorage(&aString));
-    PUSHLOG_WRITE_FORMAT(" Byte count: %d",NW_String_getByteCount(&aString)-1);
-
-    // We will use NW_String_getByteCount(&aString)-1 as size, because
-    // NW_String_getByteCount(&aString) includes NULL terminator.
-    const TPtrC8 src( NW_String_getStorage(&aString),
-                      NW_String_getByteCount(&aString)-1 );
-    HBufC16* ucs2buffer = ConvertToUnicodeL( src, id );
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
-    return ucs2buffer;
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::InitialiseCharacterSetConverterL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::InitialiseCharacterSetConverterL()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::InitialiseCharacterSetConverterL")
-
-    iCharacterSetConverter = CCnvCharacterSetConverter::NewL();
-
-    RFs& fs = iMsvSession->FileSession();
-    iCharacterSetsAvailable =
-        CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL( fs );
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::InitialiseCharacterSetConverterL")
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertActionString
-// ---------------------------------------------------------
-//
-TUint CSIContentHandler::ConvertActionString
-                         ( const TDesC8& aActionString ) const
-	{
-	const TInt KMatchFound = 0;
-
-	// set to default signal value (to rid ourselves of build warning)
-	TUint actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
-
-	if ( aActionString.Compare( KDeleteAction ) == KMatchFound )
-        {
-		actionValue = CSIPushMsgEntry::ESIPushMsgDelete;
-        }
-	else if ( aActionString.Compare( KSignalNone ) == KMatchFound )
-        {
-		actionValue = CSIPushMsgEntry::ESIPushMsgSignalNone;
-        }
-	else if ( aActionString.Compare( KSignalLow ) == KMatchFound )
-        {
-		actionValue = CSIPushMsgEntry::ESIPushMsgSignalLow;
-        }
-	else if ( aActionString.Compare( KSignalMedium ) == KMatchFound )
-        {
-		actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
-        }
-	else if ( aActionString.Compare( KSignalHigh ) == KMatchFound )
-        {
-		actionValue = CSIPushMsgEntry::ESIPushMsgSignalHigh;
-        }
-
-	return actionValue;
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::SetSIPushMsgEntryFieldsL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::SetSIPushMsgEntryFieldsL( CSIPushMsgEntry&
-                                                  aSIPushMsgEntry )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
-
-	if ( SiIdFlag() || HrefFlag() )
-		{
-		if ( SiIdFlag() && ( HrefFlag() == EFalse ) )
-			{
-            // Message has only si-id but no href.
-            aSIPushMsgEntry.SetIdL( *iSiIdBuf );
-			}
-		else if ( HrefFlag() && ( SiIdFlag() == EFalse ) )
-			{
-            // If message has no si-id but does have a href, use href as si-id.
-            aSIPushMsgEntry.SetIdL( *iHrefBuf );
-            aSIPushMsgEntry.SetUrlL( *iHrefBuf );
-			}
-		else
-            {
-            // Use si-id and href as is.
-            aSIPushMsgEntry.SetIdL( *iSiIdBuf );
-            aSIPushMsgEntry.SetUrlL( *iHrefBuf );
-            }
-		}
-
-    __ASSERT_DEBUG( ActionFlag(),
-                    ContHandPanic( EPushContHandPanUnspecSiAction ) );
-	if ( ActionFlag() )
-        {
-		aSIPushMsgEntry.SetAction( iPushMsgAction );
-        }
-	else // default if no action explicitly stated
-        {
-		aSIPushMsgEntry.SetAction( CSIPushMsgEntry::ESIPushMsgSignalMedium );
-        }
-
-	// uses default null time value if no explicit date set in message
-	aSIPushMsgEntry.SetCreated( iCreatedTime );
-	aSIPushMsgEntry.SetExpires( iExpiresTime );
-
-	// PCDATA (text) from message
-	if ( DataFlag() )
-        {
-		aSIPushMsgEntry.SetTextL( *iData );
-        }
-
-	TPtrC8 msgHeaderPtr;
-	iMessage->GetHeader( msgHeaderPtr );
-	aSIPushMsgEntry.SetHeaderL( msgHeaderPtr );
-
-    // Get server address.
-    TPtrC8 srvAddress;
-    if ( iMessage->GetServerAddress( srvAddress ) )
-        {
-	    aSIPushMsgEntry.SetFromL( srvAddress );
-        }
-
-    // First line in Inbox: TMsvEntry::iDetails.
-    if ( srvAddress.Length() == 0 )
-        {
-        // Read from resource.
-        HBufC* details =
-            iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
-        aSIPushMsgEntry.SetMsgDetailsL( *details );
-        CleanupStack::PopAndDestroy( details );
-        }
-    else
-        {
-        // Convert the "From" information to the format required by the UI
-        // spec and then decode it.
-        HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
-        CleanupStack::PushL( details );
-        HBufC* convertedFrom =
-            CPushMtmUtil::ConvertUriToDisplayFormL( *details );
-        CleanupStack::PushL( convertedFrom );
-        //
-        aSIPushMsgEntry.SetMsgDetailsL( *convertedFrom );
-        //
-        CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
-        }
-
-    // Second line in Inbox: TMsvEntry::iDescription.
-	if ( DataFlag() )
-        {
-        // Display SI message.
-		aSIPushMsgEntry.SetMsgDescriptionL( *iData );
-        }
-    else
-        {
-        // Display URL.
-        __ASSERT_DEBUG( HrefFlag(),
-                        ContHandPanic( EPushContHandPanUnspecSiHref ) );
-        const TPtrC url = aSIPushMsgEntry.Url();
-        HBufC* convertedUrl = CPushMtmUtil::ConvertUriToDisplayFormL( url );
-        CleanupStack::PushL( convertedUrl );
-        //
-        aSIPushMsgEntry.SetMsgDescriptionL( *convertedUrl );
-        //
-        CleanupStack::PopAndDestroy( convertedUrl ); // convertedUrl
-        }
-
-    // ******** Push MTM specific processing *********
-
-    /*
-    * Unfortunately in CPushMsgEntryBase there is no such functionality
-    * with which we can reach TMsvEntry as non-const, but we have to
-    * modify the entry's iMtmData2 member somehow. We can do it
-    * with either casting or with modifying and saving the entry
-    * manually after it has been saved by CSIPushMsgEntry. The latter
-    * solution is more expensive so we choose the first.
-    */
-    TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSIPushMsgEntry.Entry() );
-    if ( HrefFlag() )
-        {
-        CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
-        }
-    else
-        {
-        CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
-        }
-
-    // *** Set the entry to unread and new state. ***
-
-    tEntry.SetNew( ETrue );
-    tEntry.SetUnread( ETrue );
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::ProcessingPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::ProcessingPushMsgEntryL()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ProcessingPushMsgEntryL")
-
-	TBool deletePushMsg( EFalse );
-
-    __ASSERT_DEBUG( ActionFlag(),
-                    ContHandPanic( EPushContHandPanUnspecSiAction ) );
-
-    // S60 requirement: if both the href and the message is empty then
-    // delete the msg.
-    if ( HrefFlag() == EFalse && DataFlag() == EFalse )
-        {
-        deletePushMsg = ETrue;
-        }
-
-    // Expiration.
-    if ( !deletePushMsg && ExpiresFlag() )
-        {
-	    TTime today;
-	    today.UniversalTime();
-#ifdef __TEST_LOG__
-        _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
-        _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
-        TBuf<32> dateHolder;
-        TBuf<32> timeHolder;
-        today.FormatL( dateHolder, KDateFormat );
-        today.FormatL( timeHolder, KTimeFormat );
-        PUSHLOG_WRITE_FORMAT(" now date: <%S>",&dateHolder)
-        PUSHLOG_WRITE_FORMAT(" now time: <%S>",&timeHolder)
-        iExpiresTime.FormatL( dateHolder, KDateFormat );
-        iExpiresTime.FormatL( timeHolder, KTimeFormat );
-        PUSHLOG_WRITE_FORMAT(" exp date: <%S>",&dateHolder)
-        PUSHLOG_WRITE_FORMAT(" exp time: <%S>",&timeHolder)
-#endif // __TEST_LOG__
-	    // check if message has expiry date before today's date
-	    if ( iExpiresTime < today )
-		    {
-            PUSHLOG_WRITE("CSIContentHandler already expired")
-		    deletePushMsg = ETrue;
-		    }
-        }
-
-	// An SI with the action attribute set to “delete” MUST have an
-    // explicitly assigned value for si-id.
-	if ( !deletePushMsg && ActionFlag() )
-		{
-		if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
-            {
-            if ( !SiIdFlag() || ( SiIdFlag() && iSiIdBuf->Length() == 0 ) )
-                {
-                deletePushMsg = ETrue;
-                }
-            }
-        }
-
-    // Handling out of order delivery & Replacement.
-    TMsvId matchingEntryId = KMsvNullIndexEntryId;
-
-    if ( !deletePushMsg && ( SiIdFlag() || HrefFlag() ) && CreatedFlag() )
-        {
-        deletePushMsg = HandleMsgOrderReceptionL( matchingEntryId );
-        }
-
-    if ( !deletePushMsg && ActionFlag() )
-        {
-        // SI with action=signal-none must not be presented to the end-user.
-        // Note. In S60 signal-none behaves the same as delete: the
-        // message is discarded after processing it!
-        if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgSignalNone )
-            {
-            deletePushMsg = ETrue;
-            }
-        // SI with action=delete must also be discarded.
-        else if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
-            {
-            deletePushMsg = ETrue;
-            }
-        }
-
-	// Store message if not marked for deletion.
-	if ( !deletePushMsg )
-        {
-		StoreSIMessageL( matchingEntryId );
-        }
-    else
-        {
-        // The new entry must be discarded.
-        // Delete the corresponding matching entry, too.
-        if ( matchingEntryId != KMsvNullIndexEntryId )
-            {
-            iWapPushUtils->DeleteEntryL( matchingEntryId );
-            }
-        }
-
-	iState = EDone;
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ProcessingPushMsgEntryL")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::StoreSIMessageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::StoreSIMessageL( TMsvId aMatchingEntryId )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::StoreSIMessageL")
-
-	CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
-	CleanupStack::PushL( siEntry );
-
-    if ( aMatchingEntryId != KMsvNullIndexEntryId )
-    {
-       PUSHLOG_WRITE("Matching SI found");
-       //Delete this old entry
-       iWapPushUtils->DeleteEntryL( aMatchingEntryId );
-    }
-
-    SetSIPushMsgEntryFieldsL( *siEntry );
-    iSavedMsgId = siEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
-
-#ifdef __TEST_LOG__
-        _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
-        _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
-        TBuf<32> dateHolder;
-        TBuf<32> timeHolder;
-        TTime recDateTime = siEntry->ReceivedDate();
-        recDateTime.FormatL( dateHolder, KDateFormat );
-        recDateTime.FormatL( timeHolder, KTimeFormat );
-        PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
-        PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
-#endif // __TEST_LOG__
-
-	CleanupStack::PopAndDestroy( siEntry ); // siEntry
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::StoreSIMessageL")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::HandleMsgOrderReceptionL
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::HandleMsgOrderReceptionL")
-
-    __ASSERT_DEBUG( ( SiIdFlag() || HrefFlag() ),
-            ContHandPanic( EPushContHandPanNoSiIdOrHrefAttr ) );
-    __ASSERT_DEBUG( CreatedFlag(),
-            ContHandPanic( EPushContHandPanNoCreatedAttr ) );
-
-    CMsvEntrySelection* matchingIdList = NULL;
-	TBool discardPushMsg( EFalse );
-
-	// Get list of matching stored SI messages.
-	if ( SiIdFlag() && iSiIdBuf->Length() != 0 )
-        {
-		matchingIdList = iWapPushUtils->FindSiIdLC( *iSiIdBuf );
-        }
-	else // HrefFlag()
-        {
-        // Use href as si-id.
-		matchingIdList = iWapPushUtils->FindSiIdLC( *iHrefBuf );
-        }
-    const TInt matchingListCount( matchingIdList->Count() );
-    // Note that the count can be greater than 1.
-
-    PUSHLOG_WRITE_FORMAT("CSIContentHandler Count: %d",matchingListCount)
-
-	if ( 0 < matchingListCount && CreatedFlag() )
-		{
-		CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
-		CleanupStack::PushL( siEntry );
-
-		// Delete older stored messages and/or mark current message for
-        // deletion if same date or older than stored messages
-        TBool foundOneToBeReplaced = EFalse;
-		for ( TInt count = 0; count < matchingListCount; ++count )
-			{
-			TMsvId matchingSiMsgEntryId( matchingIdList->At(count) );
-
-            siEntry->RetrieveL( *iMsvSession, matchingSiMsgEntryId );
-
-			// Skip date comparisons if creation date not valid -
-            // SI without created attribute never gets replaced.
-			TTime existingSiCreatedTime( siEntry->Created() );
-
-			if ( existingSiCreatedTime == Time::NullTTime() )
-                {
-				// continue;
-                }
-            else
-                {
-                __ASSERT_DEBUG( !foundOneToBeReplaced,
-                                ContHandPanic( EPushContHandPanTooManySi ) );
-                if ( foundOneToBeReplaced )
-                    {
-                    PUSHLOG_WRITE(" Already found one")
-                    // Only one SI has to be found.
-                    // If the program runs into it, then make a
-                    // garbage collection to ensure consistency and
-                    // remove other messages found.
-                    iWapPushUtils->DeleteEntryL( matchingSiMsgEntryId );
-                    // After the 'for' only one SI is allowed that has created
-                    // attribute.
-                    }
-                else
-                    {
-                    foundOneToBeReplaced = ETrue; // A match was found.
-                    // Check if received SI is newer than existing stored Si
-                    // (out of order).
-                    if ( iCreatedTime > existingSiCreatedTime )
-	                    {
-                        PUSHLOG_WRITE(" Replacing...")
-                        // The new SI replaces the existing.
-                        aMatchingEntryId = matchingSiMsgEntryId;
-                        discardPushMsg = EFalse;
-	                    }
-                    else if ( iCreatedTime <= existingSiCreatedTime )
-                        {
-                        PUSHLOG_WRITE(" Discarding...")
-                        // Received SI is older than existing stored Si.
-                        discardPushMsg = ETrue;
-                        }
-                    }
-                }
-			}
-
-		CleanupStack::PopAndDestroy( siEntry ); // siEntry
-		}
-
-	CleanupStack::PopAndDestroy( matchingIdList ); // matchingIdList
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::HandleMsgOrderReceptionL")
-    return discardPushMsg;
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertDateTimeL
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::ConvertDateTimeL( const TDesC& aDateTime,
-                                           TTime& aConvertedDate ) const
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ConvertDateTimeL")
-
-	TTime convertedTime = Time::NullTTime();
-	TBool convertedOK = EFalse;
-
-    // check supplied descriptor is the correct length
-	if ( aDateTime.Length() != KValidUTCLength )
-        {
-        PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
-        User::Leave( KErrCorrupt );
-        }
-    else
-		{
-		TBuf<KValidUTCLength> str = aDateTime;
-        PUSHLOG_WRITE_FORMAT(" datetime str: <%S>",&str)
-		if ( !IsValidUTCTime( str ) )
-            {
-            // The UTC time is invalid.
-            PUSHLOG_WRITE(" invalid UTC time")
-            User::Leave( KErrCorrupt );
-            }
-        else
-			{
-            // Now 'str' is in format YYYYMMDD:HHMMSS
-			// Adjust UTC time to zero offset TTime. Only month and day
-            // is effected.
-			const TInt KFirstMonthChar = KValidTTimeMonthStart;
-			const TInt KSecondMonthChar = KFirstMonthChar + 1;
-			const TInt KFirstDayChar = KValidTTimeDayStart;
-			const TInt KSecondDayChar = KFirstDayChar + 1;
-            // Month.
-			// check for special case of month = 10 which becomes 09
-			if ( str[KFirstMonthChar] == '1' && str[KSecondMonthChar] == '0' )
-				{
-				str[KFirstMonthChar] = '0';
-				str[KSecondMonthChar] = '9';
-				}
-			else
-                {
-				// month value is either 11, 12 or less than 10, ie 1 - 9.
-				// reduce day by one, eg 11 becomes 10, 12 becomes 11, 09 becomes 08
-				str[KSecondMonthChar]--;
-                }
-
-            // Day.
-			// check for special cases 10, 20, 30
-			if ( str[KSecondDayChar] == '0' )
-				{
-				// reduce day by 1, ie 10 becomes 09, 20 becomes 19 ...
-				str[KSecondDayChar] = '9';
-				str[KFirstDayChar]--;
-				}
-			else
-                {
-				// day value is between 1 and 9 so reduce day by one
-				// eg 29 becomes 28, 11 bcomes 10, 31 becomes 30
-				str[KSecondDayChar]--;
-                }
-
-			// string is now syntaxically correct, but Set() will return an
-            // error if it's semantically incorrect.
-            User::LeaveIfError( convertedTime.Set( str ) );
-			convertedOK = ETrue;
-			}
-		}
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertDateTimeL")
-	aConvertedDate = convertedTime;
-	return convertedOK;
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::ConvertOpaqueToUtcL
-// ---------------------------------------------------------
-//
-HBufC* CSIContentHandler::ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::ConvertOpaqueToUtcL")
-
-    const TInt opaqueSize = aOpaque.Size();
-    if ( KValidMaxEncodedDateTimeSize < opaqueSize )
-        {
-        PUSHLOG_WRITE_FORMAT(" Bad OPAQUE size: <%d>",opaqueSize)
-        User::Leave( KErrCorrupt );
-        }
-
-    HBufC* converted = HBufC::NewMaxLC( KValidUTCLength );
-    TPtr convertedPtr = converted->Des();
-    convertedPtr.SetLength( 0 ); // Reset.
-
-    // Split up each opaque byte to two bytes.
-    TUint8 byte( 0x00 );
-    TUint8 high( 0x00 );
-    TUint8 low( 0x00 );
-    TInt i = 0;
-    for ( i = 0; i < opaqueSize; ++i )
-        {
-        byte = aOpaque[i];
-        high = (TUint8)( (byte & 0xF0) >> 4 );
-        low  = (TUint8)(  byte & 0x0F );
-        // Check high and low if they are in the range [0-9].
-        if ( 9 < high || 9 < low )
-            {
-            PUSHLOG_WRITE_FORMAT2(" Overflow: <%d, %d>",high,low)
-            User::Leave( KErrOverflow );
-            }
-        convertedPtr.Append( TChar(KAsciiZeroCharCode + high) );
-        convertedPtr.Append( TChar(KAsciiZeroCharCode + low) );
-        }
-
-    // A valid UTC %Datetime contains 14 numerical characters and 6
-    // non-numerical: “1999-04-30T06:40:00Z”.
-    // So fill the remaining bytes with zeros.
-    for ( i = convertedPtr.Length(); i < KValidUTCNumericals; ++i )
-        {
-        convertedPtr.Append( TChar('0') );
-        }
-
-    // Insert the necessary non-numerical boundary characters.
-    i = 0;
-    // Skip year and insert '-'. (Don't forget to increase i with 1 each time!)
-    i += KValidUTCYearBlockLength;
-    convertedPtr.Insert( i++, KCharMinus );
-    // Skip month and insert '-'.
-    i += KValidUTCOtherBlockLength;
-    convertedPtr.Insert( i++, KCharMinus );
-    // Skip day and insert 'T'.
-    i += KValidUTCOtherBlockLength;
-    convertedPtr.Insert( i++, KCharT );
-    // Skip hour and insert ':'.
-    i += KValidUTCOtherBlockLength;
-    convertedPtr.Insert( i++, KCharColon );
-    // Skip minute and insert ':'.
-    i += KValidUTCOtherBlockLength;
-    convertedPtr.Insert( i++, KCharColon );
-    // Skip second and insert 'Z'.
-    i += KValidUTCOtherBlockLength;
-    convertedPtr.Insert( i++, KCharZ );
-
-    CleanupStack::Pop( converted ); // converted
-    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertOpaqueToUtcL")
-	return converted;
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::IsValidUTCTime
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::IsValidUTCTime( TDes& aDateTime ) const
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::IsValidUTCTime")
-
-    TBool isValid( ETrue ); // Return value.
-
-    // Now aDateTime has to be in format YYYY-MM-DDTHH:MM:SSZ
-
-    // check supplied descriptor is the correct length
-	if ( aDateTime.Length() != KValidUTCLength )
-        {
-        PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
-        isValid = EFalse;
-        }
-    else
-        {
-	    // strip out formatting characters
-	    TInt formatCharPos = 4;
-	    aDateTime.Delete( formatCharPos, 1 );
-	    // now move through two characters at a time and remove other chars
-	    // to just leave digits
-	    const TInt KRemainingFormatChars = 5;
-        TInt i( 0 );
-	    for ( i = 0; i < KRemainingFormatChars; ++i )
-		    {
-		    formatCharPos += 2;
-		    aDateTime.Delete( formatCharPos, 1 );
-		    }
-
-        // Now aDateTime has to be in format YYYYMMDDHHMMSS
-
-        __ASSERT_DEBUG( aDateTime.Length() == KValidTTimeLength,
-                        ContHandPanic( EPushContHandPanBadTTimeLength ) );
-
-        // now have UTC string stripped of format characters - check remaining
-        // characters are all digits - YYYYMMDDHHMMSS
-        TChar ch;
-        for ( i = 0; i < KValidTTimeLength; ++i )
-		    {
-		    ch = aDateTime[i];
-		    if ( ch.IsDigit() == EFalse )
-                {
-                PUSHLOG_WRITE_FORMAT(" not digit <%d>",i)
-                isValid = EFalse;
-                }
-		    }
-
-        if ( isValid )
-            {
-            /*
-            In YYYYMMDDHHMMSS
-            YYYY = 4 digit year ("0000" ... "9999")
-            MM = 2 digit month ("01"=January, "02"=February ... "12"=December)
-            DD = 2 digit day ("01", "02" ... "31")
-            HH = 2 digit hour, 24-hour timekeeping system ("00" ... "23")
-            MM = 2 digit minute ("00" ... "59")
-            SS = 2 digit second ("00" ... "59")
-            */
-            TInt err;
-            TUint val;
-            // Do not check year. There are no restrictions.
-            // Check month.
-            TLex parser( aDateTime.Mid( KValidTTimeMonthStart,
-                                        KValidTTimeBlockLength ) );
-            err = parser.Val( val, EDecimal );
-            if ( err )
-                {
-                isValid = EFalse;
-                PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
-                }
-            else
-                {
-                PUSHLOG_WRITE_FORMAT(" month: <%d>",val)
-                if ( val < 1 || 12 < val )
-                    {
-                    isValid = EFalse;
-                    }
-                }
-            // Check day.
-            if ( isValid )
-                {
-                parser = aDateTime.Mid( KValidTTimeDayStart,
-                                        KValidTTimeBlockLength );
-                err = parser.Val( val, EDecimal );
-                if ( err )
-                    {
-                    isValid = EFalse;
-                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
-                    }
-                else
-                    {
-                    PUSHLOG_WRITE_FORMAT(" day: <%d>",val)
-                    if ( val < 1 || 31 < val )
-                        {
-                        isValid = EFalse;
-                        }
-                    }
-                }
-            // Check hour.
-            if ( isValid )
-                {
-                parser = aDateTime.Mid( KValidTTimeHourStart,
-                                        KValidTTimeBlockLength );
-                err = parser.Val( val, EDecimal );
-                if ( err )
-                    {
-                    isValid = EFalse;
-                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
-                    }
-                else
-                    {
-                    PUSHLOG_WRITE_FORMAT(" hour: <%d>",val)
-                    if ( 23 < val )
-                        {
-                        isValid = EFalse;
-                        }
-                    }
-                }
-            // Check minute.
-            if ( isValid )
-                {
-                parser = aDateTime.Mid( KValidTTimeMinuteStart,
-                                        KValidTTimeBlockLength );
-                err = parser.Val( val, EDecimal );
-                if ( err )
-                    {
-                    isValid = EFalse;
-                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
-                    }
-                else
-                    {
-                    PUSHLOG_WRITE_FORMAT(" min: <%d>",val)
-                    if ( 59 < val )
-                        {
-                        isValid = EFalse;
-                        }
-                    }
-                }
-            // Check second.
-            if ( isValid )
-                {
-                parser = aDateTime.Mid( KValidTTimeSecondStart,
-                                        KValidTTimeBlockLength );
-                err = parser.Val( val, EDecimal );
-                if ( err )
-                    {
-                    isValid = EFalse;
-                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
-                    }
-                else
-                    {
-                    PUSHLOG_WRITE_FORMAT(" sec: <%d>",val)
-                    if ( 59 < val )
-                        {
-                        isValid = EFalse;
-                        }
-                    }
-                }
-
-	        // insert colon seperating date from time
-	        const TInt KColonPosition = 8;
-	        aDateTime.Insert( KColonPosition, KCharColon );
-
-            // Now aDateTime has to be in format YYYYMMDD:HHMMSS
-            }
-        }
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::IsValidUTCTime")
-	return isValid; // aDateTime contains a modified buffer.
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::AttributeToTTimeL
-// ---------------------------------------------------------
-//
-TBool CSIContentHandler::AttributeToTTimeL
-                        ( NW_DOM_AttributeHandle_t& aAttrHandle,
-                          TTime& aConvertedDate ) const
-    {
-    PUSHLOG_ENTERFN("CSIContentHandler::AttributeToTTimeL")
-
-    TBool gotDate = EFalse;
-    NW_Status_t stat = NW_STAT_SUCCESS;
-    NW_DOM_AttrVal_t attrVal;
-
-    // It is expected to be String or Opaque.
-    // It may be Opaque, to which we will need a NW_DOM_AttrVal_t structure.
-    stat = NW_DOM_AttributeHandle_getNextVal( &aAttrHandle, &attrVal );
-
-    if ( stat != NW_STAT_WBXML_ITERATE_MORE )
-        {
-        User::LeaveIfError( NwxStatusToErrCode( stat ) );
-        }
-    else
-        {
-        NW_Uint16 valType = NW_DOM_AttrVal_getType( &attrVal );
-
-        if ( valType == NW_DOM_ATTR_VAL_STRING )
-            {
-            CStringOwner* stringOwner = new (ELeave) CStringOwner;
-            CleanupStack::PushL( stringOwner );
-
-            NW_String_t* val = NW_String_new();
-            User::LeaveIfNull( val );
-            stringOwner->SetString( val );
-            //
-            stat = NW_DOM_AttrVal_toString( &attrVal, val, iCharEncoding );
-            User::LeaveIfError( NwxStatusToErrCode( stat ) );
-            NW_Byte* storage = NW_String_getStorage( val );
-            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
-            TPtrC8 dataPtr( storage, length );
-            HBufC* dataBuf = HBufC::NewMaxLC( dataPtr.Length() );
-            dataBuf->Des().Copy( dataPtr );
-            gotDate = ConvertDateTimeL( *dataBuf, aConvertedDate );
-
-            CleanupStack::PopAndDestroy( 2, stringOwner ); // dataBuf,
-                                                           // stringOwner
-            }
-        else if ( valType == NW_DOM_ATTR_VAL_OPAQUE )
-            {
-            NW_Uint32 len = 0;
-            NW_Byte* data = NW_DOM_AttrVal_getOpaque( &attrVal, &len );
-            User::LeaveIfNull( data );
-            TPtrC8 dataPtr( data, len );
-
-            HBufC* dateTime = ConvertOpaqueToUtcL( dataPtr );
-            CleanupStack::PushL( dateTime );
-            gotDate = ConvertDateTimeL( *dateTime, aConvertedDate );
-            CleanupStack::PopAndDestroy( dateTime ); // dateTime
-            }
-        else
-            {
-            User::Leave( KErrNotSupported );
-            }
-        }
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::AttributeToTTimeL")
-    return gotDate; // aConvertedDate contains the result.
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg,
-                                        TRequestStatus& aStatus )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
-
-    __ASSERT_DEBUG( aPushMsg != NULL,
-                    ContHandPanic( EPushContHandPanMsgNull ) );
-
-#ifdef __TEST_LOG__
-    TPtrC8 bodyPtr;
-    aPushMsg->GetMessageBody( bodyPtr );
-    PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
-	iMessage = aPushMsg;
-	iAcknowledge = ETrue;
-	SetConfirmationStatus( aStatus );
-
-	iState = EGarbageCollecting;
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg )
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
-
-    __ASSERT_DEBUG( aPushMsg != NULL,
-                    ContHandPanic( EPushContHandPanMsgNull ) );
-
-#ifdef __TEST_LOG__
-    TPtrC8 bodyPtr;
-    aPushMsg->GetMessageBody( bodyPtr );
-    PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
-    iAcknowledge = EFalse;
-	iMessage = aPushMsg;
-
-	iState = EGarbageCollecting;
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CancelHandleMessage()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::CancelHandleMessage")
-    Cancel();
-    PUSHLOG_LEAVEFN("CSIContentHandler::CancelHandleMessage")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CPushHandlerBase_Reserved1()
-    {
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::CPushHandlerBase_Reserved2
-// ---------------------------------------------------------
-//
-void CSIContentHandler::CPushHandlerBase_Reserved2()
-    {
-    }
-
-// ---------------------------------------------------------
-// CSIContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CSIContentHandler::DoCancel()
-	{
-    PUSHLOG_ENTERFN("CSIContentHandler::DoCancel")
-	Complete( KErrCancel );
-    PUSHLOG_LEAVEFN("CSIContentHandler::DoCancel")
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CSIContentHandler::RunL()
-	{
-    // Handle errors in RunError().
-    PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
-    User::LeaveIfError( iStatus.Int() );
-
-	// use active state machine routine to manage activites:
-	switch ( iState )
-		{
-	    case EGarbageCollecting:
-            {
-		    CollectGarbageL();
-		    break;
-            }
-	    case EFilteringAndParsing:
-            {
-            if ( !FilterPushMsgL() )
-                {
-                // It did not pass the filter. Done.
-	            iState = EDone;
-	            IdleComplete();
-                }
-            else
-                {
-                // Continue.
-		        TInt ret = KErrNone;
-				PUSHLOG_WRITE("CSIContentHandler::RunL : before trapping parsing.")
-				TRAP(ret, ParsePushMsgL());
-				PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunL : after trapping parsing. ret = %d", ret)
-				if ( ret != KErrNone)
-					{
-					PUSHLOG_WRITE("CSIContentHandler::RunL : Parsing failed. discarding message.")
-					iState = EDone;
-					IdleComplete();
-					}
-                }
-		    break;
-            }
-	    case EProcessing:
-            {
-		    ProcessingPushMsgEntryL();
-		    break;
-            }
-	    case EDone:
-            {
-            PUSHLOG_WRITE("CSIContentHandler EDone")
-		    Complete( KErrNone );
-		    break;
-            }
-	    default:
-            {
-            // JIC.
-            PUSHLOG_WRITE("CSIContentHandler default Done")
-		    Complete( KErrNone );
-		    break;
-            }
-		}
-	}
-
-// ---------------------------------------------------------
-// CSIContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CSIContentHandler::RunError( TInt aError )
-	{
-    PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunError: %d",aError)
-
-	iState = EDone;
-	Complete( aError );
-	return KErrNone;
-	}
-
--- a/pushmtm/Plugins/PushContentHandler/CSIContentHandler.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CSIContentHandler.
-*
-*/
-
-
-
-#ifndef __CSICONTENTHANDLER_H__
-#define __CSICONTENTHANDLER_H__
-
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushContentHandlerDef.hrh"
-#include <E32Base.h>
-#include <msvstd.h>
-#include <nw_dom_attribute.h>
-#include <CharConv.h>
-
-// CONSTANTS
-
-const TUid KUidPushSIContentHandler	= { EUidPushSIContentHandler };
-_LIT(KSIContentHandlerData,"text/vnd.wap.si||application/vnd.wap.sic");
-
-// FORWARD DECLARATIONS
-
-class CSIPushMsgEntry;
-
-// CLASS DECLARATION
-
-/** 
-* CSIContentHandler handles Service Indication content  
-*
-* This handler takes ownership of the SI message and processes it
-* according to the Reception rules 
-* [WAP Service Indication version 31-July-2001]
-* and either stores the message or deletes it.
-* Also S60 specific requirements are applied.
-*
-* OVERVIEW:
-*	The main body of this class and its functionality lies within
-*	HandleMessage (asynchonous). This :
-*		1. takes ownership of the push message
-*		2. validates the message and generates a parsed document tree
-*		3. extracts the message attribute values from document tree 
-*		4. processes the received message
-*		5. finishes
-*
-* NB: A received message with no creation date will be stored (unless 
-* its action is set to delete or the expiry condition is met). This 
-* means that the si-id in the message store will not be unique.
-*/
-class CSIContentHandler : public CPushContentHandlerBase
-	{
-    public: // Constructors and destructor
-
-        /**
-        * Two-phased constructor. Leaves on failure.
-        * @return The constructed object.
-        */
-	    static CSIContentHandler* NewL();
-
-        /**
-        * Destructor.
-        */
-	    virtual ~CSIContentHandler();
-
-    private: // Constructors
-
-        /**
-        * Constructor.
-        */
-	    CSIContentHandler();
-
-        /**
-        * Symbian OS constructor.
-        */
-	    void  ConstructL();
-
-    private: // New functions
-
-        /**
-        * Do Garbage Collection synchronously.
-        * @return None.
-        */
-	    void  CollectGarbageL();
-
-        /**
-        * Parse the current message. If the SI is wbxml encoded then it is 
-        * decoded first to XML format. Then the message details (attributes) 
-        * are earned from the XML tree.
-        * @return None.
-        */
-	    void  ParsePushMsgL();
-
-        /**
-        * Parse the indication element.
-        * @param aIndication The element to be parsed.
-        * @return None.
-        */
-	    void  ParseIndicationL( NW_DOM_ElementNode_t& aIndication );
-
-        /**
-        * Parse an attribute of the indication element.
-        * @param aAttrHandle The attribute to be parsed.
-        * @return None.
-        */
-	    void  ParseIndAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
-
-        /**
-        * Parse the text of the indication element.
-        * @param aTextNode The text node to be parsed.
-        * @return None.
-        */
-	    void  ParseTextL( NW_DOM_TextNode_t& aTextNode );
-
-
-        /**
-        * Converts the given buffer to unicode (UCS-2).
-        * @param aSrc Source text.
-        * @param aCharSetId Character set ID.
-        * @return The UCS-2 unicode buffer.
-        */
-	    HBufC16*  ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId );
-
-        /**
-        * Converts the given buffer to unicode (UCS-2).
-        * @param aString Source text.
-        * @param aCharEncoding Character encoding.
-        * @return The UCS-2 unicode buffer.
-        */
-	    HBufC16*  ConvertToUnicodeL( NW_String_t& aString, NW_Uint32 aCharEncoding );
-
-        /**
-        * Initialise the converter. 
-        * @return None.
-        */
-        void InitialiseCharacterSetConverterL();
-
-
-        /**
-        * Convert the action string to a representative numeric value to 
-        * facilitate storing the message.
-        * @param aActionString The attribute value indicating the action level 
-        *        eg 'signal-high'
-        * @return TUint: a value representing the action type.
-        */
-	    TUint ConvertActionString( const TDesC8& aActionString ) const;
-
-        /**
-        * The entry fields are set to the correct values.
-        * @return None.
-        */
-	    void  SetSIPushMsgEntryFieldsL( CSIPushMsgEntry& aSIPushMsgEntry );
-
-        /**
-        * Do the final processing of the message according to the OMA and S60 
-        * requirements.
-        * @return None.
-        */
-	    void  ProcessingPushMsgEntryL();
-
-        /**
-        * Store the new message to Messaging.
-        * @param aMatchingEntryId ID of the matching SI entry.
-        * @return None.
-        */
-	    void StoreSIMessageL( TMsvId aMatchingEntryId );
-
-        /**
-        * Handle message order reception.
-        * NB: A received message with no creation date will be stored (unless 
-        * its action is set to delete or the expiry condition is met). This 
-        * means that the si-id in the message store will not be unique.
-        * @param aMatchingEntryId ID of the matching SI entry.
-        *        It is changed only if the function returns EFalse (replace)!
-        * @return ETrue if the entry has to be discarded.
-        */
-	    TBool HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId );
-
-	    // conversion utilities
-
-        /** 
-        * Convert UTC date time into native TTime format. Method can leave.
-        * @param aDateTime The UTC string representing the date and time.
-        * @param aConvertedDate Member date variable passed in to accept 
-        *        converted UTC date as TTime varaible.
-        * @return TBool indicates if conversion successful (ETrue) or 
-        *         conversion failed (EFalse)
-        */
-	    TBool ConvertDateTimeL( const TDesC& aDateTime, 
-                                TTime& aConvertedDate ) const;
-
-        /** 
-        * Convert OPAQUE data to UTC date time as specified in SI spec.
-        * @param aOpaque OPAQUE data.
-        * @return The UTC time.
-        */
-	    HBufC* ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const;
-
-        /**
-        * Check given UTC time string conforms to expected format:
-        * YYYY-MM-DDTHH:MM:SSZ and strip out formatting characters
-        * then validate the remaining characters are all digits.
-        * If validated then add TTime formating character so final
-        * string returned will be of the format YYYYMMDD:HHMMSS.
-        * @param aDateTime UTC string which is validated and returned.
-        * @return boolean: indicates if given date is valid (ETrue) 
-        *         or not (EFalse)
-        */
-	    TBool IsValidUTCTime( TDes& aDateTime ) const;
-
-        /** 
-        * Convert OPAQUE or STRING attribute to TTime.
-        * @param aAttrHandle Handle to the attribute.
-        * @param aConvertedDate The resulted TTime.
-        * @return ETrue if the conversion succeeded.
-        */
-	    TBool AttributeToTTimeL( NW_DOM_AttributeHandle_t& aAttrHandle, 
-                                 TTime& aConvertedDate ) const;
-
-	    // Attribute flags
-
-        /**
-        * Flag whether message has an action attribute
-        * @param aAction boolean to set flag to - 
-        *                ETrue for action attrib present
-        *                EFalse for no action attrib.
-        */ 
-	    inline void SetActionFlag( TBool aAction );
-
-        /**
-        * Check status of action flag to see if message has an action 
-        * attribute.
-        * @return TBool ETrue - action attribute present in message
-        *               EFalse - no action attribute.
-        */
-	    inline TBool ActionFlag() const;
-
-        /**
-        * Flag whether message has a created date attribute.
-        * @param aCreated boolean to set flag to - 
-        *                 ETrue for si-created attrib present
-        *                 EFalse for no si-created attrib
-        */ 
-	    inline void SetCreatedFlag( TBool aCreated );
-
-        /**
-        * Check status of created flag to see if message has a si-created 
-        * attribute.
-        * @return TBool ETrue - si-created attribute present in message
-        *               EFalse - no si-created attribute
-        */
-	    inline TBool CreatedFlag() const;
-
-        /**
-        * Flag whether message has a Href attribute
-        * @param aHref boolean to set flag to - 
-        *              ETrue for Href attrib present
-        *              EFalse for no href attrib
-        */ 
-	    inline void SetHrefFlag( TBool aHref );
-
-        /**
-        * Check status of href flag to see if message has an href attribute.
-        * @return TBool
-        *         ETrue - href attribute present in message
-        *         EFalse - no href attribute
-        */
-	    inline TBool HrefFlag() const;
-
-        /**
-        * Flag whether message has an expiry date attribute (si-expires).
-        * @param aExpires boolean to set flag to - 
-        *                 ETrue for si-expires present
-        *                 EFalse for no si-expires date
-        */ 
-	    inline void SetExpiresFlag( TBool aExpires );
-
-        /**
-        * Check status of flag to see if message has an expiry date attribute.
-        * @return TBool
-        *         ETrue - si-expires attribute present in message
-        *         EFalse - no si-expires attribute
-        */
-	    inline TBool ExpiresFlag() const;
-	    
-        /**
-        * Flag whether message has a si-id attribute
-        * @param aSiId boolean to set flag to - 
-        *              ETrue for si-id attrib present
-        *              EFalse for no si-id attrib
-        */ 
-	    inline void SetSiIdFlag( TBool aSiId );
-
-        /**
-        * Check status of flag to see if message has an si-id attribute.
-        * @return TBool
-        *         ETrue - si-id attribute present in message
-        *         EFalse - no si-id attribute
-        */
-	    inline TBool SiIdFlag() const;
-
-        /**
-        * Flag whether message has a Data attribute (text)
-        * @param aData
-        *        boolean to set flag to - ETrue for data attrib present
-        *                                 EFalse for no data attrib
-        */ 
-	    inline void SetDataFlag( TBool aData );
-
-        /**
-        * Check status of data flag to see if message has any data.
-        * @return TBool
-        *         ETrue - data attribute present in message
-        *         EFalse - no data attribute
-        */
-	    inline TBool DataFlag() const;
-
-    private: // Methods from CPushHandlerBase
-	    
-        /**
-        * HandleMessage Async. Version. Takes ownership of Push Message and 
-        * sets self active to continue processing message.
-        * @param aPushMsg CPushMessage to process.
-        * @param aStatus Request status variable for use in asynchronous 
-        *        operations.
-        * @return None.
-        */
-	    void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
-
-        /**
-        * HandleMessage Sync. Version. Takes ownership of Push Message and 
-        * sets self active to continue processing message.
-        * Initial State: Set data members then go to the next state 
-        * @param aPushMsg CPushMessage to process.
-        */
-	    void HandleMessageL( CPushMessage* aPushMsg );
-
-        /** 
-        * Same functionality as DoCancel()
-        */
-	    void CancelHandleMessage();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved1();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved2();
-
-    private: // Methods from CActive
-
-        /**
-        * Terminates any activity
-        * @return None.
-        */
-	    void DoCancel();
-
-        /**
-        * Step through the various representative states for handling a message 
-        * States:
-        *  EGarbageCollecting - Deleting expired SI msgs from messaging
-        *  EFilteringAndParsing - Filter push msg according to Service message 
-        *                settings and Parses SI push message (retrieving the 
-        *                attributes)
-        *  EProcessing - Processing the current entry. OMA and S60 rules are 
-        *                applied, then save or update SI msg in the Msg store
-        *  EDone - Clean up, complete observer
-        * @return None.
-        */
-	    void RunL();
-
-        /**
-        * This is invoked when RunL Leaves with an error so clean up and 
-        * return.
-        * @return Error code to scheduler.
-        */
-	    TInt RunError(TInt aError);
-
-    private: // Data
-
-	    enum
-            {
-            EAction = 0x01, 
-            ECreated = 0x02, 
-            EHref = 0x04, 
-            EExpires = 0x08, 
-            ESiId = 0x10, 
-            EData = 0x20
-            };
-
-	    enum TState
-            {
-            EGarbageCollecting, 
-            EFilteringAndParsing, 
-            EProcessing, 
-            EDone
-            };
-
-        TMsvId          iSavedMsgId; ///< ID of the message saved.
-	    TUint32         iAttributes; ///< Attribute indication (set or not).
-	    TInt            iPushMsgAction;	///< Action attribute
-	    HBufC*          iHrefBuf; ///< Href attribute. Has.
-	    HBufC*          iSiIdBuf; ///< Si-id attribute. Has.
-	    TTime           iExpiresTime; ///< Expiration attribute.
-	    TTime           iCreatedTime; ///< Created attribute.
-	    HBufC*          iData; ///< Message text. Has.
-
-        NW_Uint32       iCharEncoding; ///< Char encoding of the current msg.
-
-        //
-        CCnvCharacterSetConverter* iCharacterSetConverter; ///< Owned.
-        CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* iCharacterSetsAvailable; ///< Owned.
-    };
-
-#include "CSIContentHandler.inl"
-
-#endif	// __CSICONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CSIContentHandler.inl	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Inline functions.
-*
-*/
-
-
-
-inline void CSIContentHandler::SetActionFlag(TBool aAction)      
-	{
-	if ( aAction )
-        {
-		iAttributes |= EAction;
-        }
-	else
-        {
-		iAttributes &=~ EAction;
-        }
-	}
-
-inline TBool CSIContentHandler::ActionFlag() const
-	{
-	return iAttributes & EAction;
-	}
-
-inline void CSIContentHandler::SetCreatedFlag( TBool aCreated )
-	{
-	if ( aCreated )
-        {
-		iAttributes |= ECreated;
-        }
-	else
-        {
-		iAttributes &=~ ECreated;
-        }
-	}
-
-inline TBool CSIContentHandler::CreatedFlag() const
-	{
-	return iAttributes & ECreated;
-	}
-
-inline void CSIContentHandler::SetHrefFlag( TBool aHref )
-	{
-	if ( aHref )
-        {
-		iAttributes |= EHref;
-        }
-	else
-        {
-		iAttributes &=~ EHref;
-        }
-	}
-
-inline TBool CSIContentHandler::HrefFlag() const
-	{
-	return iAttributes & EHref;
-	}
-
-inline void CSIContentHandler::SetExpiresFlag( TBool aExpires )
-	{
-	if ( aExpires )
-        {
-		iAttributes |= EExpires;
-        }
-	else
-        {
-		iAttributes &=~ EExpires;
-        }
-	}
-
-inline TBool CSIContentHandler::ExpiresFlag() const
-	{
-	return iAttributes & EExpires;
-	}
-
-inline void CSIContentHandler::SetSiIdFlag( TBool aSiId )
-	{
-	if ( aSiId )
-        {
-		iAttributes |= ESiId;
-        }
-	else
-        {
-		iAttributes &=~ ESiId;
-        }
-	}
-
-inline TBool CSIContentHandler::SiIdFlag() const
-	{
-	return iAttributes & ESiId;
-	}
-
-inline void CSIContentHandler::SetDataFlag( TBool aData )
-	{
-	if ( aData )
-        {
-		iAttributes |= EData;
-        }
-	else
-        {
-		iAttributes &=~ EData;
-        }
-	}
-
-inline TBool CSIContentHandler::DataFlag() const
-	{
-	return iAttributes & EData;
-	}
-
--- a/pushmtm/Plugins/PushContentHandler/CSLContentHandler.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1221 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CSLContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CSLContentHandler.h"
-#include "PushMtmUtil.h"
-#include "PushMtmSettings.h"
-#include "PushAuthenticationUtilities.h"
-#include "PushMtmLog.h"
-#include "PushContentHandlerPanic.h"
-#include "PushMtmAutoFetchOperation.h"
-#include "PushMtmUiDef.h"
-#include "StringResourceReader.h"
-#include "sl_dict.h"
-#include "PushContentHandlerUtils.h"
-#include <push/cslpushmsgentry.h>
-#include <msvids.h>
-#include <apgtask.h>
-#include <apgcli.h>
-#include <w32std.h>
-#include <PushMtmUi.rsg>
-#include <nw_dom_node.h>
-#include <nw_dom_document.h>
-#include <nw_dom_element.h>
-#include <nw_dom_text.h>
-#include <nw_wbxml_dictionary.h>
-#include <nw_string_char.h>
-#include "PushMtmPrivateCRKeys.h"
-#include <centralrepository.h> 
-
-// CONSTANTS
-
-// sl attributes / elements
-_LIT8( KSl,      "sl" );
-_LIT8( KHref,    "href" );
-_LIT8( KAction,  "action" );
-
-// action attribute literals
-_LIT8( KExecHigh,"execute-high" );  
-_LIT8( KExecLow, "execute-low" );
-_LIT8( KCache,   "cache" );
-
-// Text SL MIME type
-_LIT( KSlTextContentType, "text/vnd.wap.sl" );
-
-// Browser command to fetch an URL. See Browser API Specification!
-_LIT( KBrowserCmdFetchUrl, "4 " );
-const TUid KBrowserAppUid = { 0x10008D39 };
-
-const TInt KNoOfDictArrays = 1;
-
-/// Autofetch time delay in seconds.
-const TInt KAutofetchDelayInSec = 5;
-
-// file monitored by browser
-_LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CSLContentHandler::NewL
-// ---------------------------------------------------------
-//
-CSLContentHandler* CSLContentHandler::NewL()
-	{
-	CSLContentHandler* self = new (ELeave) CSLContentHandler;
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-	return self;
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::~CSLContentHandler
-// ---------------------------------------------------------
-//
-CSLContentHandler::~CSLContentHandler()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::~CSLContentHandler")
-
-    Cancel();
-    delete iFetchOp;
-    delete iHrefBuf;
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::~CSLContentHandler")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CSLContentHandler
-// ---------------------------------------------------------
-//
-CSLContentHandler::CSLContentHandler()
-:   CPushContentHandlerBase(), 
-    iSavedMsgId( KMsvNullIndexEntryId ), 
-    iPushMsgAction( KErrNotFound ), 
-    iSaveAsRead( EFalse )
-	{
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ConstructL()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::ConstructL")
-    
-    CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
-    CleanupStack::PushL( PushSL );
-    User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
-    CleanupStack::PopAndDestroy( PushSL ); 
-    
-    CPushContentHandlerBase::ConstructL();
-    // Added to Active Scheduler.
-    PUSHLOG_LEAVEFN("CSLContentHandler::ConstructL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CollectGarbageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CollectGarbageL()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::CollectGarbageL")
-
-    DoCollectGarbageL();
-
-	if(iPushSLEnabled)
-	    iState = EFilteringAndParsing;
-	else
-	    iState = EDone;
-	
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::CollectGarbageL")
-    }
-
-
-// ---------------------------------------------------------
-// CSLContentHandler::ParsePushMsgL
-// Note that cXML parser dosn't do any validation!
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ParsePushMsgL()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::ParsePushMsgL")
-
-    TPtrC8 bodyPtr;
-    iMessage->GetMessageBody( bodyPtr );
-    // If there is no body in the message leave with an error
-    if ( bodyPtr.Size() == 0 )
-        {
-        PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: Empty body")
-        User::Leave( KErrCorrupt );
-        }
-
-    TPtrC contentType;
-    iMessage->GetContentType( contentType );
-    PUSHLOG_WRITE_FORMAT(" Content type <%S>",&contentType)
-
-    // Add SL dictionary.
-    NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] = 
-        { (NW_WBXML_Dictionary_t*)&NW_SL_WBXMLDictionary };
-
-    NW_Status_t stat = NW_STAT_SUCCESS;
-
-    RWbxmlDictionary wbxmlDict;
-    wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
-    CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
-
-    NW_TinyDom_Handle_t domHandle;
-    NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
-    NW_Int32 length = (NW_Int32)bodyPtr.Size();
-    NW_Bool encoded = ( contentType.CompareF( KSlTextContentType ) == 0 ) ? 
-                                                         NW_FALSE : NW_TRUE;
-    NW_Uint32 publicID = NW_SL_PublicId;
-    NW_Bool extTNotStringTable = NW_FALSE; // What is this?
-    NW_DOM_NodeType_t type = 0;
-    /**********************************
-    *   Root of DOM
-    ***********************************/
-    CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
-    CleanupStack::PushL( docTreeOwner );
-    NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
-        ( 
-                            &domHandle, 
-                            buffer, 
-                            length, 
-                            encoded, 
-                            publicID, 
-                            extTNotStringTable 
-        );
-	if (!domNode)
-		{
-		PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: domNode is Null")
-		}
-    User::LeaveIfNull( domNode );
-    docTreeOwner->SetDocTree( domNode );
-
-    type = NW_DOM_Node_getNodeType( domNode );
-    if ( type != NW_DOM_DOCUMENT_NODE )
-        {
-        PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not Document node <%d>",type)
-        User::Leave( KErrArgument );
-        }
-
-    iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
-    PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
-
-    /**********************************
-    *   ELEMENT sl
-    ***********************************/
-	// first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
-	TBool domNodeHasChildNodes = EFalse;
-	domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
-	PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
-	if (!domNodeHasChildNodes)
-        {
-        PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: No SL element present in the dom tree. Message corrupted.")
-        User::Leave( KErrCorrupt );
-        }
-
-	PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: before calling getDocumentElement")
-    NW_DOM_ElementNode_t* slElement = 
-        NW_DOM_DocumentNode_getDocumentElement( domNode );
-	if (!slElement)
-		{
-		PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: slElement is Null")
-		}
-    User::LeaveIfNull( slElement );
-
-    type = NW_DOM_Node_getNodeType( slElement );
-
-    CStringOwner* stringOwner = new (ELeave) CStringOwner;
-    CleanupStack::PushL( stringOwner );
-
-    NW_String_t* name = NW_String_new();
-    User::LeaveIfNull( name );
-    stringOwner->SetString( name );
-    stat = NW_DOM_Node_getNodeName( slElement, name );
-	PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
-    User::LeaveIfError( NwxStatusToErrCode( stat ) );
-    NW_Byte*  nameBuf = NW_String_getStorage( name );
-    NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
-    TPtrC8 namePtr( nameBuf, nameLen );
-
-    if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSl ) != 0 )
-        {
-        PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not sl element node <%d>",type)
-        User::Leave( KErrArgument );
-        }
-
-    CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
-
-    /**********************************
-    *   Attributes of ELEMENT sl
-    ***********************************/
-    if ( NW_DOM_ElementNode_hasAttributes( slElement ) )
-        {
-        NW_DOM_AttributeListIterator_t attrIter;
-        stat = NW_DOM_ElementNode_getAttributeListIterator
-                             ( slElement, &attrIter );
-		PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
-        User::LeaveIfError( NwxStatusToErrCode( stat ) );
-
-        NW_DOM_AttributeHandle_t attrHandle;
-        while( NW_DOM_AttributeListIterator_getNextAttribute
-               ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
-            {
-            ParseSlAttributeL( attrHandle );
-            }
-        }
-
-    // Cleanup.
-    CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
-
-    // if 'action' attribute not specified, the value 'execute-low' is used.
-	if ( !ActionFlag() )
-        {
-		iPushMsgAction = CSLPushMsgEntry::ESLPushMsgExecuteLow;
-        SetActionFlag( ETrue );
-        PUSHLOG_WRITE_FORMAT(" Defaulting to ActionFlag: %d",iPushMsgAction)
-        }
-
-    iState = EProcessing;
-    IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::ParsePushMsgL")
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::ParseSlAttributeL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ParseSlAttributeL
-                        ( NW_DOM_AttributeHandle_t& aAttrHandle )
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::ParseSlAttributeL")
-
-    NW_Status_t stat = NW_STAT_SUCCESS;
-
-    CStringOwner* attrNameOwner = new (ELeave) CStringOwner;
-    CleanupStack::PushL( attrNameOwner );
-
-    NW_String_t* attrName = NW_String_new();
-    User::LeaveIfNull( attrName );
-    attrNameOwner->SetString( attrName );
-
-    // Get the name of the attribute.
-    stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
-    User::LeaveIfError( NwxStatusToErrCode( stat ) );
-    NW_Byte*  attrNameBuf = NW_String_getStorage( attrName );
-    NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
-    TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
-
-    if ( attrNamePtr.CompareF( KHref ) == 0 )
-        {
-        if ( !HrefFlag() )
-            {
-            HBufC* tempHrefBuf = NULL;
-
-            CStringOwner* valOwner = new (ELeave) CStringOwner;
-            CleanupStack::PushL( valOwner );
-
-            NW_String_t* val = NW_String_new();
-            User::LeaveIfNull( val );
-            valOwner->SetString( val );
-            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
-            if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
-                {
-                User::LeaveIfError( NwxStatusToErrCode( stat ) );
-                NW_Byte* storage = NW_String_getStorage( val );
-                NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
-                TPtrC8 prefixPtr( storage, length );
-                tempHrefBuf = HBufC::NewMaxL( length );
-                // No leavable after it!!! until...
-                tempHrefBuf->Des().Copy( prefixPtr );
-                }
-
-            CleanupStack::PopAndDestroy( valOwner ); // valOwner
-
-            if ( tempHrefBuf )
-                {
-                if ( tempHrefBuf->Length() == 0 )
-                    {
-                    // Zero length Href is considered as nothing.
-                    PUSHLOG_WRITE(" Zero length HrefFlag");
-                    }
-                else
-                    {
-                    iHrefBuf = tempHrefBuf; // ...until here.
-                    SetHrefFlag( ETrue );
-                    PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
-                    }
-                }
-            }
-        }
-    else if ( attrNamePtr.CompareF( KAction ) == 0 )
-        {
-        if ( !ActionFlag() )
-            {
-            CStringOwner* stringOwner = new (ELeave) CStringOwner;
-            CleanupStack::PushL( stringOwner );
-
-            NW_String_t* val = NW_String_new();
-            User::LeaveIfNull( val );
-            stringOwner->SetString( val );
-            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val ); 
-            User::LeaveIfError( NwxStatusToErrCode( stat ) );
-            NW_Byte* storage = NW_String_getStorage( val );
-            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
-            TPtrC8 actionPtr( storage, length );
-
-            iPushMsgAction = ConvertActionString( actionPtr );
-            SetActionFlag( ETrue );
-            PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
-
-            CleanupStack::PopAndDestroy( stringOwner );
-            }
-        }
-    else
-        {
-        __ASSERT_DEBUG( EFalse, 
-            ContHandPanic( EPushContHandPanUnexpSlToken ) );
-        }
-
-    CleanupStack::PopAndDestroy( attrNameOwner ); // attrNameOwner
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::ParseSlAttributeL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::ConvertActionString
-// ---------------------------------------------------------
-//
-TUint CSLContentHandler::ConvertActionString
-                         ( const TDesC8& aActionString ) const
-	{
-	const TInt KMatchFound = 0;
-
-	// if 'action' attribute not specified, the value 'execute-low' is used.
-	TUint actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
-
-	if ( aActionString.Compare( KExecHigh ) == KMatchFound )
-        {
-		actionValue = CSLPushMsgEntry::ESLPushMsgExecuteHigh;
-        }
-	else if ( aActionString.Compare( KExecLow ) == KMatchFound )
-        {
-		actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
-        }
-	else if ( aActionString.Compare( KCache ) == KMatchFound )
-        {
-		actionValue = CSLPushMsgEntry::ESLPushMsgExecuteCache;
-        }
-
-	return actionValue;
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::SetSlPushMsgEntryFieldsL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& 
-                                                  aSlPushMsgEntry ) const
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
-
-	// Set URL and Action fields.
-    if ( HrefFlag() )
-        {
-	    aSlPushMsgEntry.SetUrlL( *iHrefBuf );
-        }
-
-    __ASSERT_DEBUG( ActionFlag(), 
-                    ContHandPanic( EPushContHandPanUnspecSlAction ) );
-    if ( ActionFlag() )
-        {
-	    aSlPushMsgEntry.SetAction( iPushMsgAction );
-        }
-    else // if not specified, the value 'execute-low' is used.
-        {
-        aSlPushMsgEntry.SetAction( CSLPushMsgEntry::ESLPushMsgExecuteLow );
-        }
-
-	// Set all the relevant header fields.
-	TPtrC8 msgHeaderPtr;
-	iMessage->GetHeader( msgHeaderPtr );
-	aSlPushMsgEntry.SetHeaderL( msgHeaderPtr );
-
-    // Get server address.
-    TPtrC8 srvAddress;
-    if ( iMessage->GetServerAddress( srvAddress ) )
-        {
-	    aSlPushMsgEntry.SetFromL( srvAddress );
-        }
-
-    // First line in Inbox: TMsvEntry::iDetails.
-    if ( srvAddress.Length() == 0 )
-        {
-        // Read from resource.
-        HBufC* details = 
-            iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
-        aSlPushMsgEntry.SetMsgDetailsL( *details );
-        CleanupStack::PopAndDestroy( details );
-        }
-    else
-        {
-        // Convert the "From" information to the format required by the UI 
-        // spec and then decode it.
-        HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
-        CleanupStack::PushL( details );
-        HBufC* convertedFrom = 
-            CPushMtmUtil::ConvertUriToDisplayFormL( *details );
-        CleanupStack::PushL( convertedFrom );
-        //
-        aSlPushMsgEntry.SetMsgDetailsL( *convertedFrom );
-        //
-        CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
-        }
-
-    // Second line in Inbox: TMsvEntry::iDescription.
-    // Read from resource.
-    HBufC* description = 
-        iStrRscReader->AllocReadResourceLC( R_PUSHMISC_INBOX_SERV_MSG );
-    aSlPushMsgEntry.SetMsgDescriptionL( *description );
-    CleanupStack::PopAndDestroy( description );
-
-    // ******** Push MTM specific processing *********
-
-    /*
-    * Unfortunately in CPushMsgEntryBase there is no such functionality 
-    * with which we can reach TMsvEntry as non-const, but we have to 
-    * modify the entry's iMtmData2 member somehow. We can do it 
-    * with either casting or with modifying and saving the entry 
-    * manually after it has been saved by CSLPushMsgEntry. The latter 
-    * solution is more expensive so we choose the first.
-    */
-    TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSlPushMsgEntry.Entry() );
-    if ( HrefFlag() )
-        {
-        CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
-        }
-    else
-        {
-        CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
-        }
-
-    // Indication is required if the entry is saved as 'read' (delete & 
-    // replacement notification). It can happen only in case of SL message.
-    // Otherwise the flag has to be cleared!
-    if ( !iSaveAsRead )
-        {
-        // Saving as unread & new.
-        tEntry.SetNew( ETrue );
-        tEntry.SetUnread( ETrue );
-        CPushMtmUtil::ResetAttrs( tEntry, EPushMtmReadButContentChanged );
-        }
-    else
-        {
-        // Saving as read.
-        tEntry.SetNew( EFalse );
-        tEntry.SetUnread( EFalse );
-        CPushMtmUtil::SetAttrs( tEntry, EPushMtmReadButContentChanged );
-        }
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::ProcessingPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::ProcessingPushMsgEntryL()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::ProcessingPushMsgEntryL")
-
-    TBool discardPushMsg( EFalse );
-
-    __ASSERT_DEBUG( ActionFlag(), 
-                    ContHandPanic( EPushContHandPanUnspecSlAction ) );
-
-    // S60 requirement: if the href is empty then delete (discard) the msg.
-    if ( HrefFlag() == EFalse )
-        {
-        PUSHLOG_WRITE(" No SL Href.")
-        discardPushMsg = ETrue;
-        }
-    else
-        {
-        __ASSERT_DEBUG( HrefFlag() && iHrefBuf, 
-                        ContHandPanic( EPushContHandPanUnspecSlHref ) );
-
-        // The message will not be discarded
-        discardPushMsg = EFalse;
-
-        CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
-                                              ( *iHrefBuf, KUidWapPushMsgSL );
-        TInt matchingListCount = matchingUrlList->Count();
-        PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
-
-        // Only one SL is allowed with the same Url, so leave the first and 
-        // delete the others.
-        if ( 1 < matchingListCount )
-            {
-            for ( TInt count = 1; count < matchingListCount; ++count )
-                {
-                iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
-                }
-            matchingListCount = 1; // Only one remains.
-            }
-
-	    if ( 0 < matchingListCount )
-		    {
-		    // Find msg of the same href and discard it if it has a lower or 
-            // the same action value.
-            CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
-	        CleanupStack::PushL( matchingSl );
-
-            const TMsvId matchingId = matchingUrlList->At(0);
-            matchingSl->RetrieveL( *iMsvSession, matchingId );
-
-            if ( iPushMsgAction <= matchingSl->Action() ) 
-			    {
-                PUSHLOG_WRITE(" SL: not higher action")
-                discardPushMsg = ETrue;
-                }
-
-            CleanupStack::PopAndDestroy( matchingSl ); // matchingSl, 
-            }
-
-	    CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
-        }
-
-    if ( discardPushMsg )
-        {
-        // Nothing to do.
-        PUSHLOG_WRITE(" SL discarded.")
-        iState = EDone;
-        IdleComplete();
-        }
-    else
-        {
-        iState = HandleServiceInvocationL();
-        IdleComplete();
-        }
-
-    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
-                    ContHandPanic( EPushContHandPanSlMsgIdSet ) );
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::ProcessingPushMsgEntryL")
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::HandleServiceInvocationL
-// ---------------------------------------------------------
-//
-TInt CSLContentHandler::HandleServiceInvocationL() const
-    {
-    PUSHLOG_ENTERFN("CSLContentHandler::HandleServiceInvocationL")
-
-    TInt nextState = ESavePushMsgEntry;
-
-    if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
-        {
-        PUSHLOG_WRITE(" SL cache");
-        TBool isAuthenticated = TPushAuthenticationUtil::
-            AuthenticateMsgL( *iMtmSettings, *iMessage );
-		if ( !isAuthenticated )
-            {
-            PUSHLOG_WRITE(" Not authenticated");
-            // The message is placed to Inbox.
-            nextState = ESavePushMsgEntry;
-            }
-        else
-            {
-            // Authenticated. Fetch SL-cache.
-            nextState = EFetching;
-            }
-        }
-
-    else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteLow )
-        {
-        PUSHLOG_WRITE(" SL execute-low")
-        // It is independent from Automatic/Manual setting and WL 
-        // authentication is not applied. The message is placed to Inbox 
-        // for manual downloading.
-        nextState = ESavePushMsgEntry;
-        }
-
-    else // ESLPushMsgExecuteHigh
-        {
-        PUSHLOG_WRITE(" SL execute-high");
-        // If the settings is Manual or it does not pass the WL authentication 
-		// then it is placed to Inbox for manual downloading.
-        // If the setting is Automatic and it passes the WL authentication, 
-        // the Browser is started standalone to download the URL without any 
-		// user interaction.
-        if ( iMtmSettings->ServiceLoadingType() == 
-			               CPushMtmSettings::EManual )
-            {
-            PUSHLOG_WRITE(" Manual setting")
-            // The message is placed to Inbox.
-            nextState = ESavePushMsgEntry;
-            }
-        else // Automatic loading
-            {
-            PUSHLOG_WRITE(" Automatic setting");
-            // Authenticate the message.
-            TBool isAuthenticated = TPushAuthenticationUtil::
-                AuthenticateMsgL( *iMtmSettings, *iMessage );
-            if ( !isAuthenticated )
-	            {
-                PUSHLOG_WRITE(" Not authenticated");
-	            // The message is placed to Inbox.
-	            nextState = ESavePushMsgEntry;
-	            }
-            else
-	            {
-	            // Authenticated - start downloading.
-	            nextState = EFetching;
-	            }
-            }
-        }
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::HandleServiceInvocationL")
-    return nextState;
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::FetchPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::FetchPushMsgEntryL()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::FetchPushMsgEntryL")
-
-    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
-                    ContHandPanic( EPushContHandPanAlreadyInitialized ) );
-    __ASSERT_DEBUG( HrefFlag() && iHrefBuf, 
-                    ContHandPanic( EPushContHandPanUnspecSlHref ) );
-
-    /* 
-    * In case of execute-high use the Browser to download the service.
-    * In case of cache use the fetch operation to download the service 
-    * silently. 
-    */
-
-    if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteHigh )
-        {
-        PUSHLOG_WRITE(" Start Browser")
-        // Launch the Browser with the URI, then save the message.
-        // Trap errors. If Browser's launching fails, then save the 
-        // message as 'unread'. In case of an error, it is not forwarded.
-        TRAPD( err, StartBrowserL() );
-        iState = ESavePushMsgEntry;
-        // Mark it 'read' after succesfull Browser startup.
-        iSaveAsRead = err ? EFalse : ETrue;
-        IdleComplete();
-        }
-    else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
-        {
-        // Fetch the service inside the content handler.
-        iStatus = KRequestPending;
-        SetActive();
-        __ASSERT_DEBUG( !iFetchOp, 
-                        ContHandPanic( EPushContHandPanFetchAlreadyInit ) );
-
-        iFetchOp = CPushMtmAutoFetchOperation::NewL( *iHrefBuf, 
-                                                     KAutofetchDelayInSec, 
-                                                     iStatus );
-        iFetchOp->StartL();
-        PUSHLOG_WRITE(" Fetch op started")
-        iState = EFetchCompleted; // Next state.
-        // Fetch completes it.
-        }
-    else
-        {
-        __ASSERT_DEBUG( EFalse, 
-                        ContHandPanic( EPushContHandPanBadActionValue ) );
-        User::Leave( KErrNotSupported );
-        }
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::FetchPushMsgEntryL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::StartBrowserL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::StartBrowserL()
-    {
-    PUSHLOG_ENTERFN("CSLContentHandler::StartBrowserL")
-
-    // Parameters are separated by space
-    // 1st parameter: type of the further parameters
-    // 2nd parameter: URL
-    //
-    HBufC* param = HBufC::NewLC( KBrowserCmdFetchUrl().Length() + 
-                                 iHrefBuf->Length() );
-    TPtr paramPtr = param->Des();
-    paramPtr.Copy( KBrowserCmdFetchUrl );
-    paramPtr.Append( *iHrefBuf );
-
-    RWsSession wsSession;
-    User::LeaveIfError( wsSession.Connect() );
-    CleanupClosePushL<RWsSession>( wsSession );
-    TApaTaskList taskList( wsSession );
-    TApaTask task = taskList.FindApp( KBrowserAppUid );
-
-    if ( task.Exists() )
-        {
-        PUSHLOG_WRITE("CSLContentHandler Browser::SendMessage")
-
-        RFs             rfs;
-        RFile           file;
-        TPtrC8          param8Ptr;
-        // 8-bit buffer is required.
-        HBufC8* param8 = HBufC8::NewLC( param->Length() );
-        param8->Des().Copy( *param );
-        param8Ptr.Set(param8->Des());
-
-        // Open the file.
-        User::LeaveIfError(rfs.Connect());
-        CleanupClosePushL(rfs);
-
-        // Replace file if exists or Create file if not exist yet
-        User::LeaveIfError( file.Replace( rfs, KPushMtmUrl, EFileWrite | EFileShareExclusive ) );
-        CleanupClosePushL(file);
-
-        // Write to file      
-        User::LeaveIfError( file.Write( param8Ptr ) );
-        
-        // Clean up.
-        CleanupStack::PopAndDestroy(/*file*/);
-        CleanupStack::PopAndDestroy(/*rfs*/);
-        CleanupStack::PopAndDestroy( /*param8*/ );
-        }
-    else 
-        {
-        PUSHLOG_WRITE("CSLContentHandler Browser::StartDocument")
-        RApaLsSession appArcSession;
-        User::LeaveIfError( appArcSession.Connect() );
-        CleanupClosePushL<RApaLsSession>( appArcSession );
-        TThreadId id;
-        User::LeaveIfError
-            (
-                appArcSession.StartDocument( *param, KBrowserAppUid, id )
-            );
-        CleanupStack::PopAndDestroy( &appArcSession );
-        }
-
-    CleanupStack::PopAndDestroy( &wsSession );
-    CleanupStack::PopAndDestroy( param );
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::StartBrowserL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::FetchCompletedL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::FetchCompletedL()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::FetchCompletedL")
-
-    __ASSERT_DEBUG( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache, 
-                    ContHandPanic( EPushContHandPanBadActionValue ) );
-    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
-                    ContHandPanic( EPushContHandPanAlreadyInitialized ) );
-    __ASSERT_DEBUG( iFetchOp, ContHandPanic( EPushContHandPanNoFetchOp ) );
-
-    const TInt fetchRes = iStatus.Int();
-    PUSHLOG_WRITE_FORMAT(" fetchRes <%d>",fetchRes)
-
-    if ( fetchRes != KErrNone )
-        {
-        // Downloading failed. Save the message.
-        iState = ESavePushMsgEntry;
-        }
-    else
-        {
-        // Silent fetching has completed successfully.
-        // The message should not be saved.
-        iState = EDone;
-        }
-
-    // Next state set. Complete.
-    IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::FetchCompletedL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::SavePushMsgEntryL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::SavePushMsgEntryL()
-    {
-    PUSHLOG_ENTERFN("CSLContentHandler::SavePushMsgEntryL")
-
-    __ASSERT_DEBUG( ActionFlag(), 
-                    ContHandPanic( EPushContHandPanUnspecSlAction ) );
-    __ASSERT_DEBUG( HrefFlag() && iHrefBuf, 
-                    ContHandPanic( EPushContHandPanUnspecSlHref ) );
-    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
-                    ContHandPanic( EPushContHandPanAlreadyInitialized ) );
-
-    CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
-                                          ( *iHrefBuf, KUidWapPushMsgSL );
-    TInt matchingListCount = matchingUrlList->Count();
-    PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
-
-    // Only one SL is allowed with the same Url, so leave the first and 
-    // delete the others.
-    __ASSERT_DEBUG( matchingListCount <= 1, 
-                    ContHandPanic( EPushContHandPanTooManySl ) );
-    if ( 1 < matchingListCount )
-        {
-        for ( TInt count = 1; count < matchingListCount; ++count )
-            {
-            iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
-            }
-        matchingListCount = 1; // Only one remains.
-        }
-
-    TBool saveNewMsg = ETrue; // Save by default.
-    TMsvId matchingEntryId = KMsvNullIndexEntryId;
-
-    // Apply reception rules.
-    if ( matchingListCount == 0 )
-        {
-        // Nothing to do.
-        saveNewMsg = ETrue;
-        }
-    else
-        {
-        CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
-        CleanupStack::PushL( matchingSl );
-
-        matchingEntryId = matchingUrlList->At(0);
-        matchingSl->RetrieveL( *iMsvSession, matchingEntryId );
-
-        if ( iPushMsgAction <= matchingSl->Action() ) 
-            {
-            // Discard the new SL: it does not have higher 
-            // action value as the existing.
-            PUSHLOG_WRITE(" SL not higher action - discarded")
-            saveNewMsg = EFalse;
-            }
-        else
-            {
-            // The new has greater action attribute. 
-            // Update the old SL with the new data.
-            saveNewMsg = ETrue;
-            }
-
-        CleanupStack::PopAndDestroy( matchingSl ); // matchingSl
-        }
-
-    CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
-
-    // Store message if not marked for deletion.
-    if ( saveNewMsg )
-        {
-		StoreSLMessageL( matchingEntryId );
-		}
-
-    iState = EDone;
-    IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::SavePushMsgEntryL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::StoreSLMessageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::StoreSLMessageL( TMsvId aMatchingEntryId )
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::StoreSLMessageL")
-
-	CSLPushMsgEntry* slEntry = CSLPushMsgEntry::NewL();
-	CleanupStack::PushL( slEntry );
-
-    if ( aMatchingEntryId == KMsvNullIndexEntryId )
-        {
-        PUSHLOG_WRITE(" No matching SL")
-        // Save new to Inbox.
-        SetSlPushMsgEntryFieldsL( *slEntry );
-	    iSavedMsgId = 
-            slEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
-        // Set the entry to read and *not* new state depending on iSaveAsRead.
-        if ( !iSaveAsRead )
-            {
-            // Do nothing SaveL saves it as unread.
-            }
-        else
-            {
-            // SaveL owerrides the read settings (iEntry.SetUnread(ETrue);) 
-            // that we set in SetSlPushMsgEntryFieldsL, thus the read status 
-            // has to be reset manually here:
-            iWapPushUtils->MarkServiceUnreadL( iSavedMsgId, EFalse );
-            }
-        }
-    else
-        {
-        PUSHLOG_WRITE(" Matching SL")
-        slEntry->RetrieveL( *iMsvSession, aMatchingEntryId );
-        SetSlPushMsgEntryFieldsL( *slEntry );
-
-        slEntry->UpdateL( *iMsvSession );
-        iSavedMsgId = aMatchingEntryId;
-        // Note that UpdateL does not change the read/unread status.
-
-        // Move the updated msg back to Inbox.
-        TMsvId parentId = slEntry->Entry().Parent();
-        if ( parentId != KMsvGlobalInBoxIndexEntryId )
-	        {
-            PUSHLOG_WRITE(" Moving back to Inbox")
-            CMsvEntry* cParent = iMsvSession->GetEntryL( parentId );
-            CleanupStack::PushL( cParent );
-	        cParent->MoveL( iSavedMsgId, KMsvGlobalInBoxIndexEntryId );
-            CleanupStack::PopAndDestroy( cParent ); // cParent
-	        }
-        }
-
-#ifdef __TEST_LOG__
-        _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
-        _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
-        TBuf<32> dateHolder;
-        TBuf<32> timeHolder;
-        TTime recDateTime = slEntry->ReceivedDate();
-        recDateTime.FormatL( dateHolder, KDateFormat );
-        recDateTime.FormatL( timeHolder, KTimeFormat );
-        PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
-        PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
-#endif // __TEST_LOG__
-
-	CleanupStack::PopAndDestroy( slEntry ); // slEntry
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::StoreSLMessageL")
-	}
-
-
-// ---------------------------------------------------------
-// CSLContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
-                                        TRequestStatus& aStatus )
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 2")
-
-    __ASSERT_DEBUG( aPushMsg != NULL, 
-                    ContHandPanic( EPushContHandPanMsgNull ) );
-
-#ifdef __TEST_LOG__
-    TPtrC8 bodyPtr;
-    aPushMsg->GetMessageBody( bodyPtr );
-    PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
-	iMessage = aPushMsg;
-	iAcknowledge = ETrue;
-	SetConfirmationStatus( aStatus );
-
-	iState = EGarbageCollecting;
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 2")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg )
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 1")
-
-    __ASSERT_DEBUG( aPushMsg != NULL, 
-                    ContHandPanic( EPushContHandPanMsgNull ) );
-	
-#ifdef __TEST_LOG__
-    TPtrC8 bodyPtr;
-    aPushMsg->GetMessageBody( bodyPtr );
-    PUSHLOG_HEXDUMP( bodyPtr )
-#endif // __TEST_LOG__
-
-	iAcknowledge = EFalse;
-	iMessage = aPushMsg;
-
-	iState = EGarbageCollecting;
-	IdleComplete();
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 1")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CancelHandleMessage()
-	{
-    Cancel();
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CPushHandlerBase_Reserved1()
-	{
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CSLContentHandler::CPushHandlerBase_Reserved2()
-	{
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CSLContentHandler::DoCancel()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::DoCancel")
-    // TODO Cancel outstanding requests!
-	Complete( KErrCancel );
-    PUSHLOG_LEAVEFN("CSLContentHandler::DoCancel")
-	}
-
-// ---------------------------------------------------------
-// CSLContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CSLContentHandler::RunL()
-	{
-    PUSHLOG_ENTERFN("CSLContentHandler::RunL")
-
-    // Handle errors in RunError().
-    PUSHLOG_WRITE_FORMAT(" iStatus.Int(): %d",iStatus.Int())
-
-	switch ( iState )
-		{
-	    case EGarbageCollecting:
-            {
-		    CollectGarbageL();
-		    break;
-            }
-
-
-        case EFilteringAndParsing:
-            {
-            if(iPushSLEnabled)
-                {
-                if ( !FilterPushMsgL() )
-                    {
-                    // It did not pass the filter. Done.
-                    iState = EDone;
-                    IdleComplete();
-                    }
-                else
-                    {
-                    // Continue.
-                    TInt ret = KErrNone;
-                    PUSHLOG_WRITE("CSLContentHandler::RunL : before trapping parsing.")
-                    TRAP(ret, ParsePushMsgL());
-                    PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunL : after trapping parsing. ret = %d", ret)
-                    if ( ret != KErrNone)
-                        {
-                        PUSHLOG_WRITE("CSLContentHandler::RunL : Parsing failed. discarding message.")
-                        iState = EDone;
-                        IdleComplete();
-                        }
-                    }
-                }
-			break;
-            }
-
-        case EProcessing:
-            {
-            if(iPushSLEnabled)
-			ProcessingPushMsgEntryL();
-			break;
-            }
-
-		case EFetching:
-            {
-            if(iPushSLEnabled)
-			FetchPushMsgEntryL();
-			break;
-            }
-
-		case EFetchCompleted:
-            {
-            if(iPushSLEnabled)
-			FetchCompletedL();
-			break;
-            }
-
-		case ESavePushMsgEntry:
-            {
-            if(iPushSLEnabled)
-			SavePushMsgEntryL();
-			break;
-            }
-
-
-        case EDone:
-            {
-            PUSHLOG_WRITE("CSLContentHandler EDone")
-			Complete( KErrNone );
-			break;
-            }
-		default:
-            {
-            // JIC.
-            PUSHLOG_WRITE("CSLContentHandler default EDone")
-			Complete( KErrNone );
-			break;
-            }
-		}
-
-    PUSHLOG_LEAVEFN("CSLContentHandler::RunL")
-    }
-
-// ---------------------------------------------------------
-// CSLContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CSLContentHandler::RunError( TInt aError )
-	{
-    PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunError: %d",aError)
-
-	iState = EDone;
-	Complete( aError );
-	return KErrNone;
-	}
-
--- a/pushmtm/Plugins/PushContentHandler/CSLContentHandler.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,303 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CSLContentHandler.
-*
-*/
-
-
-
-#ifndef __CSLCONTENTHANDLER_H__
-#define __CSLCONTENTHANDLER_H__
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushMtmDef.hrh"
-#include "PushContentHandlerDef.hrh"
-#include <E32Base.h>
-#include <bldvariant.hrh>
-#include <nw_dom_attribute.h>
-
-// CONSTANTS
-
-const TUid KUidPushSLContentHandler	= { EUidPushSLContentHandler };
-_LIT( KSLContentHandlerData, "text/vnd.wap.sl||application/vnd.wap.slc" );
-
-// FORWARD DECLARATIONS
-
-class CSLPushMsgEntry;
-class CPushMtmAutoFetchOperation;
-
-// CLASS DECLARATION
-
-/** 
-* CSLContentHandler Handles Service Loading Content  
-*
-* This handler takes ownership of the SL message and processes it
-* according to the Reception rules 
-* [WAP Service Loading version 31-July-2001]
-* and either stores the message or deletes it.
-* Also S60 specific requirements are applied.
-*
-* NB. If __SERIES60_PUSH_SL is not defined, then all SL push messages are 
-*     discarded!
-*/
-class CSLContentHandler : public CPushContentHandlerBase
-	{
-    public: // Constructors and destructor
-
-        /**
-        * Two-phased constructor. Leaves on failure.
-        * @return The constructed object.
-        */
-	    static CSLContentHandler* NewL();
-
-        /**
-        * D'tor.
-        */
-	    virtual ~CSLContentHandler();
-
-    private: // Constructors
-
-        /**
-        * Constructor.
-        */
-	    CSLContentHandler();
-
-        /**
-        * Symbian OS constructor.
-        */
-	    void ConstructL();
-
-    private: // New functions
-
-        /**
-        * Do Garbage Collection synchronously when a new message arrives.
-        * @return None.
-        */
-	    void  CollectGarbageL();
-
-
-        /**
-        * Parse the Push SL message using XML parser.
-        * If Push Message is an SLC then convert it first to text using 
-        * CWbxmlConverterUtil class.
-        * @return None.
-        */
-	    void ParsePushMsgL();
-
-        /**
-        * Parse an attribute of the sl element.
-        * @param aAttrHandle The attribute to be parsed.
-        * @return None.
-        */
-	    void  ParseSlAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
-
-        /**
-        * Convert the action string to a representative numeric value to 
-        * facilitate storing the message.
-        * @param aActionString The attribute value indicating the action level 
-        *        eg 'execute-high'
-        * @return TUint: a value representing the action type.
-        */
-	    TUint ConvertActionString( const TDesC8& aActionString ) const;
-
-        /**
-        * Set SL entry fields prior to storing message.
-        * @param aSlPushMsgEntry Entry represents message format to use when 
-        *        storing it.
-        * @return None.
-        */
-	    void SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& aSlPushMsgEntry ) const;
-
-        /**
-        * Check if the message has to be discarded due to empty Href or 
-        * there is a message with higher acton value.
-        * @return None.
-        */
-	    void ProcessingPushMsgEntryL();
-
-        /**
-        * Handle Service invocation: decide what to do next according to 
-        * action value and push settings.
-        * @return Next state.
-        */
-	    TInt HandleServiceInvocationL() const;
-
-        /**
-        * Download the indicated content.
-        * In case of execute-high use the Browser to download the service.
-        * In case of cache use the fetch operation to download the service 
-        * silently.
-        * @return None.
-        */
-	    void FetchPushMsgEntryL();
-
-        /**
-        * Start the Browser and instruct it to download the content 
-        * indicated by the Sl's URI.
-        * @return None.
-        */
-	    void StartBrowserL();
-
-        /**
-        * Check the result of the SL-cache downloading. If it fails, save the 
-        * message. If it succeeds, discard the message.
-        * @return None.
-        */
-	    void FetchCompletedL();
-
-        /**
-        * Apply reception rules and save the push message. 
-        * If a message already exists with the same URL, 
-        * it is saved only if it has a higher action value.
-        * @return None.
-        */
-	    void SavePushMsgEntryL();
-
-        /**
-        * Store the new message to Messaging.
-        * @param aMatchingEntryId ID of the matching SI entry.
-        * @return None.
-        */
-	    void StoreSLMessageL( TMsvId aMatchingEntryId );
-
-	    // Attribute flags
-
-        /**
-        * Flag whether message has an action attribute
-        * @param aAction boolean to set flag to - 
-        *                ETrue for action attrib present
-        *                EFalse for no action attrib.
-        */ 
-	    inline void SetActionFlag( TBool aAction );
-
-        /**
-        * Check status of action flag to see if message has an action 
-        * attribute.
-        * @return TBool ETrue - action attribute present in message
-        *               EFalse - no action attribute.
-        */
-	    inline TBool ActionFlag() const;
-
-        /**
-        * Flag whether message has a Href attribute
-        * @param aHref boolean to set flag to - 
-        *              ETrue for Href attrib present
-        *              EFalse for no href attrib
-        */ 
-	    inline void SetHrefFlag( TBool aHref );
-
-        /**
-        * Check status of href flag to see if message has an href attribute.
-        * @return TBool
-        *         ETrue - href attribute present in message
-        *         EFalse - no href attribute
-        */
-	    inline TBool HrefFlag() const;
-
-
-    private: // Methods from CPushHandlerBase
-	    
-        /**
-        * HandleMessage Async. Version. Takes ownership of Push Message and 
-        * sets self active to continue processing message.
-        * @param aPushMsg CPushMessage to process.
-        * @param aStatus Request status variable for use in asynchronous 
-        *        operations.
-        * @return None.
-        */
-	    void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
-
-        /**
-        * HandleMessage Sync. Version. Takes ownership of Push Message and 
-        * sets self active to continue processing message.
-        * Initial State: Set data members then go to the next state 
-        * @param aPushMsg CPushMessage to process.
-        */
-	    void HandleMessageL(CPushMessage* aPushMsg);
-
-        /** 
-        * Same functionality as DoCancel()
-        */
-	    void CancelHandleMessage();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved1();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved2();
-
-    private: // Methods from CActive
-
-        /**
-        * Terminates any activity.
-        * @return None.
-        */
-	    void DoCancel();
-
-        /**
-        * Step through the various representative states for handling a 
-        * message.
-        * @return None.
-        */
-	    void RunL();
-
-        /**
-        * This is invoked when RunL Leaves with an error so clean up and 
-        * return.
-        * @return Error code to scheduler.
-        */
-	    TInt RunError( TInt aError );
-
-    private: // Data
-
-	    enum
-            {
-            EAction = 0x01, 
-            EHref = 0x02
-            };
-
-	    enum TState                 ///< States of this state machine.
-            {
-            EGarbageCollecting, 
-            EFilteringAndParsing,
-            EProcessing, 
-            EFetching, 
-            EFetchCompleted, 
-            ESavePushMsgEntry, 
-            EDone
-            };
-
-        TMsvId          iSavedMsgId; ///< ID of the saved message.
-        TUint32         iAttributes; ///< Attribute indication (set or not).
-	    TInt            iPushMsgAction; ///< SL action.
-	    HBufC*          iHrefBuf; ///< Href attribute. Has.
-
-        /// Asynchronous fetch operation that downloads the SL-cache. Owned.
-        CPushMtmAutoFetchOperation* iFetchOp;
-
-        NW_Uint32       iCharEncoding; ///< Char encoding of the current msg.
-        TBool           iSaveAsRead; ///< Mark the message 'read' after saving.
-        TInt            iPushSLEnabled;
-    };
-
-#include "CSLContentHandler.inl"
-
-#endif	// __CSLCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/CSLContentHandler.inl	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Inline functions.
-*
-*/
-
-
-
-
-inline void CSLContentHandler::SetActionFlag( TBool aAction )
-	{
-	if ( aAction )
-        {
-		iAttributes |= EAction;
-        }
-	else
-        {
-		iAttributes &=~ EAction;
-        }
-	}
-
-inline TBool CSLContentHandler::ActionFlag() const
-	{
-	return iAttributes & EAction;
-	}
-
-inline void CSLContentHandler::SetHrefFlag( TBool aHref )
-	{
-	if ( aHref )
-        {
-		iAttributes |= EHref;
-        }
-	else
-        {
-		iAttributes &=~ EHref;
-        }
-	}
-
-inline TBool CSLContentHandler::HrefFlag() const
-	{
-	return iAttributes & EHref;
-	}
-
-
--- a/pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,694 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CUnknownContentHandler.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "CUnknownContentHandler.h"
-#include "PushMtmUtil.h"
-#include "PushMtmLog.h"
-#include "PushContentHandlerPanic.h"
-#include "StringResourceReader.h"
-#include <msvids.h>
-#ifdef __SERIES60_PUSH_SP 
-#include <CUnknownPushMsgEntry.h>
-#include <BioDB.h>        // BIO Message Database and message query methods
-#include <gsmubuf.h>    // CSmsBuffer class
-#include <gsmumsg.h>    // CSmsMessage class
-#include <smuthdr.h>    // CSmsHeader class
-#include <smut.h>        // TSmsUtilities class
-#include <txtrich.h>    // CRichText class
-#include <biouids.h>    // KUidBioMessageTypeMtm const
-#include <apgcli.h>
-#include <apmrec.h>
-#include <DocumentHandler.h>
-#include <Uri16.h>
-#include <UriUtils.h>
-#include <msvuids.h>    // KUidMsvMessageEntry const
-#include <PushMtmUi.rsg>
-
-// SMUT Unbranch
-#include <csmsgetdetdescinterface.h>
-
-#endif // __SERIES60_PUSH_SP 
-
-// CONSTANTS
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::NewL
-// ---------------------------------------------------------
-//
-CUnknownContentHandler* CUnknownContentHandler::NewL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::NewL")
-
-    CUnknownContentHandler* self = new (ELeave) CUnknownContentHandler; 
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::NewL")
-    return self;
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::~CUnknownContentHandler
-// ---------------------------------------------------------
-//
-CUnknownContentHandler::~CUnknownContentHandler()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::~CUnknownContentHandler")
-
-    Cancel();
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::~CUnknownContentHandler")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CUnknownContentHandler
-// ---------------------------------------------------------
-//
-CUnknownContentHandler::CUnknownContentHandler()
-:   CPushContentHandlerBase(), 
-    iSavedMsgId( KMsvNullIndexEntryId )
-    {
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::ConstructL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::ConstructL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::ConstructL")
-
-    CPushContentHandlerBase::ConstructL();
-    // Added to Active Scheduler.
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::ConstructL")
-    }
-
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CollectGarbageL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CollectGarbageL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::CollectGarbageL")
-
-    DoCollectGarbageL();
-
-#ifdef __SERIES60_PUSH_SP
-    iState = EFilteringAndProcessing;
-#else // __SERIES60_PUSH_SP
-    // Do nothing - message is discarded.
-    iState = EDone;
-#endif // __SERIES60_PUSH_SP
-    IdleComplete();
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::CollectGarbageL")
-    }
-
-#ifdef __SERIES60_PUSH_SP
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::ProcessingPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::ProcessingPushMsgEntryL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
-
-    const TBool bioMsg( BioMessageTypeL() );
-    if ( bioMsg )
-        {
-        PUSHLOG_WRITE(" BIO message");
-        // convert to bio format & save
-        SaveBioMessageEntryL();
-        }
-    else
-        {
-        PUSHLOG_WRITE(" Not BIO message");
-
-        // Check if the received content is supported.
-        RApaLsSession apaLs;
-        User::LeaveIfError( apaLs.Connect() );
-        CleanupClosePushL<RApaLsSession>( apaLs );
-
-        // Try to find out the data type.
-        TPtrC contentTypePtr;
-        iMessage->GetContentType( contentTypePtr );
-        HBufC8* contentT8 = HBufC8::NewMaxLC( contentTypePtr.Length() );
-        contentT8->Des().Copy( contentTypePtr );
-        TDataRecognitionResult result;
-        User::LeaveIfError( apaLs.RecognizeData( KNullDesC(), 
-                                                 *contentT8, 
-                                                 result ) );
-        CleanupStack::PopAndDestroy( contentT8 ); // contentT8
-
-        CDocumentHandler* docHandler = CDocumentHandler::NewLC( NULL );
-        TBool supported = docHandler->CanOpenL( result.iDataType );
-
-        CleanupStack::PopAndDestroy( 2, &apaLs ); // docHandler, apaLs
-
-        // Save only supported msg.
-        if ( supported )
-            {
-                // create unknown push message entry and save
-                SaveUnknownPushMsgEntryL();
-            }
-        }
-
-    iState = EDone;
-    IdleComplete();
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::BioMessageTypeL
-// ---------------------------------------------------------
-//
-TBool CUnknownContentHandler::BioMessageTypeL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::BioMessageTypeL")
-
-    // need to create local RFs for BIO otherwise raises exception
-    RFs localFS;
-    CleanupClosePushL( localFS );
-    User::LeaveIfError( localFS.Connect() );
-    CBIODatabase* bioDB = CBIODatabase::NewLC( localFS );
-
-    TPtrC contentTypePtr;
-    iMessage->GetContentType( contentTypePtr );
-
-    iBioMsgUID = KNullUid;
-    TBool isBio = EFalse;
-    // IsBioMessageL returns KErrNone if found or KErrNotFound if not found 
-    if ( bioDB->IsBioMessageL( EBioMsgIdIana, 
-                           contentTypePtr, 
-                           NULL, 
-                           iBioMsgUID ) == KErrNone )
-        {
-        isBio = ETrue;
-        }
-
-    CleanupStack::PopAndDestroy( 2 ); // bioDB, localFS
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::BioMessageTypeL")
-    return isBio;
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SaveBioMessageEntryL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::SaveBioMessageEntryL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::SaveBioMessageEntryL")
-
-    // create sms message from CPushMessage and then save message
-    RFs fileSession;
-    User::LeaveIfError(fileSession.Connect());
-    CleanupClosePushL(fileSession);
-    CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
-    CleanupStack::PushL(smsBuffer);
-
-    CSmsMessage* smsMessage = CSmsMessage::NewL( fileSession, 
-                                                 CSmsPDU::ESmsDeliver, 
-                                                 smsBuffer );
-    CleanupStack::PushL( smsMessage );
-
-    smsMessage->SmsPDU().SetAlphabet( TSmsDataCodingScheme::ESmsAlphabet8Bit );
-
-    TPtrC8 fieldValue;
-
-    if ( iMessage->GetBinaryHeaderField( EHttpFrom, fieldValue ) ||
-     iMessage->GetBinaryHeaderField( EHttpXWapInitiatorURI, fieldValue ) ||
-     iMessage->GetBinaryHeaderField( EHttpContentLocation, fieldValue ) )
-        {
-        // Convert 8 bit to 16 bit
-        HBufC* tempAddr = HBufC::NewLC( fieldValue.Length() );
-        tempAddr->Des().Copy( fieldValue );
-
-        smsMessage->SmsPDU().SetToFromAddressL( *tempAddr );
-        CleanupStack::PopAndDestroy( tempAddr );
-        }
-
-    if ( iMessage->GetMessageBody( fieldValue ) )
-        {
-        HBufC* tempBody = HBufC::NewLC( fieldValue.Length() );
-        tempBody->Des().Copy( fieldValue );
-
-        smsBuffer->InsertL( 0, *tempBody );
-        CleanupStack::PopAndDestroy( tempBody );
-        }
-
-    CleanupStack::Pop( 2 ); //smsBuffer, smsMessage
-
-    StoreMsgL( smsMessage ); // destroys CSmsMessage (contains smsBuffer)
-    CleanupStack::PopAndDestroy( &fileSession );
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveBioMessageEntryL")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::StoreMsgL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::StoreMsgL( CSmsMessage* aSmsMsg )
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::StoreMsgL")
-
-    CleanupStack::PushL( aSmsMsg );
-
-    // Create a CSmsHeader based on this message. smsHdr takes ownership of aSmsMsg
-    CSmsHeader* smsHdr = CSmsHeader::NewL( aSmsMsg );
-    CleanupStack::Pop( aSmsMsg );
-    CleanupStack::PushL( smsHdr );
-
-    // get root entry
-    CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
-    CleanupStack::PushL( msvEntry );
-
-    // create an invisible blank entry 
-    TMsvEntry entry;
-    entry.iType = KUidMsvMessageEntry;
-    entry.SetVisible( EFalse );
-    entry.SetInPreparation( ETrue );
-    entry.SetReadOnly( EFalse );
-    entry.SetUnread( ETrue );
-
-    TMsvId serviceId = SetBioServiceIdL();
-    TBuf<KSmsDescriptionLength> description;    
-
-// SMUT Unbranch
-    CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
-    CleanupStack::PushL( smsPlugin );
-
-    if ( iBioMsgUID != KNullUid )
-        {
-        // sets entry with values passed in
-        TSmsUtilities::PopulateMsgEntry( entry, 
-                                         *aSmsMsg, 
-                                         serviceId, 
-                                         KUidBIOMessageTypeMtm );
-        entry.iBioType = iBioMsgUID.iUid;
-
-        // Look up and set the description
-        TInt index;
-        CBIODatabase* bioDB = CBIODatabase::NewLC( msvEntry->Session().FileSession() );
-        bioDB->GetBioIndexWithMsgIDL( iBioMsgUID, index );
-        description.Copy( bioDB->BifReader(index).Description() );
-        entry.iDescription.Set( description );
-        CleanupStack::PopAndDestroy(); // bioDB
-        }
-    else
-        {
-        // sets entry with values passed in
-        TSmsUtilities::PopulateMsgEntry( entry, *aSmsMsg, serviceId );
-
-        // Look up and set the description
-// SMUT Unbranch
-        smsPlugin->GetDescription( *aSmsMsg, description );
-        entry.iDescription.Set( description );
-        }
-    
-    // Set the details
-    TBuf<KSmsDetailsLength> details;    
-    TInt err = smsPlugin->GetDetails( msvEntry->Session().FileSession(), 
-                                          *aSmsMsg, 
-                                          details );
-    if ( !err )
-        {
-        entry.iDetails.Set( details );
-        }
-
-// SMUT Unbranch
-    CleanupStack::PopAndDestroy( smsPlugin );
-
-    // Store entry in inbox
-    msvEntry->SetEntryL( KMsvGlobalInBoxIndexEntryId );
-    msvEntry->CreateL( entry );
-    msvEntry->Session().CleanupEntryPushL( entry.Id() );
-    msvEntry->SetEntryL( entry.Id() );
-
-    // Save the message
-    CMsvStore* store = msvEntry->EditStoreL();
-    CleanupStack::PushL( store );
-
-    // Save off the CSmsHdr
-    smsHdr->StoreL( *store );
-
-    // Save the body
-    
-    // Create and fill a CRichText object to save to store..
-    CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
-    CleanupStack::PushL( paraFormatLayer );
-    CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
-    CleanupStack::PushL( charFormatLayer );
-    CRichText* richText = CRichText::NewL( paraFormatLayer, charFormatLayer );
-    CleanupStack::PushL( richText );
-    HBufC* bufBody=HBufC::NewLC( aSmsMsg->Buffer().Length() );
-    TPtr bufBodyPtr = bufBody->Des();
-    aSmsMsg->Buffer().Extract( bufBodyPtr, 0, aSmsMsg->Buffer().Length() );
-    richText->InsertL( 0, bufBodyPtr ); 
-    store->StoreBodyTextL( *richText );
-    CleanupStack::PopAndDestroy( 4 ); //bufBody, richText, charFormatLayer, paraFormatLayer
-    
-    store->CommitL();
-    entry.SetReadOnly( ETrue );
-    entry.SetVisible( ETrue );
-    entry.SetInPreparation( EFalse );
-    msvEntry->ChangeL( entry );
-
-    CleanupStack::PopAndDestroy(); //store
-    msvEntry->Session().CleanupEntryPop(); //entry
-    CleanupStack::PopAndDestroy( 2 ); //msvEntry, smsHdr
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::StoreMsgL")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SetBioServiceIdL
-// ---------------------------------------------------------
-//
-TMsvId CUnknownContentHandler::SetBioServiceIdL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::SetBioServiceIdL")
-
-    CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
-
-    CleanupStack::PushL( msvEntry );
-    
-    TMsvId serviceId = KMsvNullIndexEntryId; 
-    TRAPD( err, TSmsUtilities::ServiceIdL( *msvEntry, 
-                                           serviceId, 
-                                           KUidBIOMessageTypeMtm ) );
-    if ( err == KErrNotFound )
-        {
-        serviceId = KMsvLocalServiceIndexEntryId;
-        err = KErrNone;
-        }
-    
-    CleanupStack::PopAndDestroy(); //msvEntry
-    User::LeaveIfError( err );
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::SetBioServiceIdL")
-    return serviceId;
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SaveUnknownPushMsgEntryL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::SaveUnknownPushMsgEntryL()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
-
-    CUnknownPushMsgEntry* unknownPushMsgEntry = 
-                          CUnknownPushMsgEntry::NewL();
-    CleanupStack::PushL( unknownPushMsgEntry );
-
-    SetUnknownPushMsgEntryFieldsL( *unknownPushMsgEntry );
-
-    iSavedMsgId = unknownPushMsgEntry->SaveL( *iMsvSession, 
-                                              KMsvGlobalInBoxIndexEntryId );
-
-    CleanupStack::PopAndDestroy( unknownPushMsgEntry ); // unknownPushMsgEntry
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
-                             ( CUnknownPushMsgEntry& aUnknownPushMsgEntry )
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
-
-    // Set all the relevant fields
-
-    // Get server address.
-    TPtrC8 srvAddress;
-    if ( iMessage->GetServerAddress( srvAddress ) )
-        {
-        aUnknownPushMsgEntry.SetFromL( srvAddress );
-        }
-
-    TPtrC contentTypePtr;
-    iMessage->GetContentType( contentTypePtr );
-    aUnknownPushMsgEntry.SetContentTypeL( contentTypePtr );
-
-    TPtrC8 msgBodyPtr;
-    iMessage->GetMessageBody( msgBodyPtr );
-    aUnknownPushMsgEntry.SetMessageDataL( msgBodyPtr );
-
-    // First line in Inbox: TMsvEntry::iDetails.
-    if ( srvAddress.Length() == 0 )
-        {
-        // Read from resource.
-        HBufC* details = 
-            iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
-        aUnknownPushMsgEntry.SetMsgDetailsL( *details );
-        CleanupStack::PopAndDestroy( details );
-        }
-    else
-        {
-        // Convert the "From" information to the format required by the UI 
-        // spec and then decode it.
-        HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
-        CleanupStack::PushL( details );
-        HBufC* convertedFrom = 
-            CPushMtmUtil::ConvertUriToDisplayFormL( *details );
-        CleanupStack::PushL( convertedFrom );
-        //
-        aUnknownPushMsgEntry.SetMsgDetailsL( *convertedFrom );
-        //
-        CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
-        }
-
-    // Second line in Inbox: TMsvEntry::iDescription.
-    TPtrC8 contentUriPtr;
-    iMessage->GetBinaryHeaderField( EHttpXWapContentURI, contentUriPtr );
-    // Copy the 8-bit descriptor into a unicode one.
-    HBufC* contentUri = HBufC::NewMaxLC( contentUriPtr.Length() );
-    contentUri->Des().Copy( contentUriPtr );
-    // Extract file name from X-wap-content-uri.
-    HBufC* fileName = FileNameFromUriL( *contentUri );
-    CleanupStack::PopAndDestroy( contentUri ); // contentUri
-    CleanupStack::PushL( fileName );
-
-    if ( fileName->Length() == 0 )
-        {
-        // TODO: Read from resource.
-        //"Unknown content type" qtn_wap_push_msg_content_not_supported
-        }
-    else
-        {
-        aUnknownPushMsgEntry.SetMsgDescriptionL( *fileName );
-        }
-
-    CleanupStack::PopAndDestroy( fileName ); // fileName
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::FileNameFromUriL
-// ---------------------------------------------------------
-//
-HBufC* CUnknownContentHandler::FileNameFromUriL( const TDesC& aUri ) const
-    {
-    TUriParser pars;
-    User::LeaveIfError( pars.Parse( aUri ) );
-
-    HBufC* res = NULL;
-    if ( pars.IsPresent( EUriPath ) )
-        {
-        TPtrC path = pars.Extract( EUriPath );
-        // Extract the remaining text after the last slash character.
-        // If the path contains a file name, then it has to contain 
-        // a slash also, so if there is no slash then it's sure that there 
-        // is no file name in it.
-        TInt index = path.LocateReverse( TChar('/') );
-        if ( index < 0 )
-            {
-            // No file name.
-            }
-        else if ( ++index < path.Length() ) // If not at the end...
-            {
-            // Last slash found. Extract the text after the slash.
-            res = path.Mid( index ).AllocL();
-            }
-        }
-
-    if ( !res )
-        {
-        res = KNullDesC().AllocL();
-        }
-
-    return res;
-    }
-
-#endif // __SERIES60_PUSH_SP
-
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
-                                             TRequestStatus& aStatus )
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
-
-    __ASSERT_DEBUG( aPushMsg != NULL, 
-                    ContHandPanic( EPushContHandPanMsgNull ) );
-
-    iMessage = aPushMsg;
-    iAcknowledge = ETrue;
-    SetConfirmationStatus( aStatus );
-    iState = EGarbageCollecting;
-    IdleComplete();
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::HandleMessageL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg )
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
-
-    __ASSERT_DEBUG( aPushMsg != NULL, 
-                    ContHandPanic( EPushContHandPanMsgNull ) );
-
-    iAcknowledge = EFalse;
-    iMessage = aPushMsg;
-    iState = EGarbageCollecting;
-    IdleComplete();
-
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::HandleMessageL")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CancelHandleMessage
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CancelHandleMessage()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::CancelHandleMessage")
-    Cancel();
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::CancelHandleMessage")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CPushHandlerBase_Reserved1
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CPushHandlerBase_Reserved1()
-    {
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::CPushHandlerBase_Reserved2
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::CPushHandlerBase_Reserved2()
-    {
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::DoCancel
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::DoCancel()
-    {
-    PUSHLOG_ENTERFN("CUnknownContentHandler::DoCancel")
-    Complete( KErrCancel );
-    PUSHLOG_LEAVEFN("CUnknownContentHandler::DoCancel")
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::RunL
-// ---------------------------------------------------------
-//
-void CUnknownContentHandler::RunL()
-    {
-    // Handle errors in RunError().
-    PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
-    User::LeaveIfError( iStatus.Int() );
-
-    // use active state machine routine to manage activites:
-    switch ( iState )
-        {
-        case EGarbageCollecting:
-            {
-            CollectGarbageL();
-            break;
-            }
-
-#ifdef __SERIES60_PUSH_SP
-
-        case EFilteringAndProcessing:
-            {
-            if ( !FilterPushMsgL() )
-                {
-                // It did not pass the filter. Done.
-                iState = EDone;
-                IdleComplete();
-                }
-            else
-                {
-                // Continue.
-                ProcessingPushMsgEntryL();
-                }
-            break;
-            }
-        
-#endif // __SERIES60_PUSH_SP
-
-        default:
-            {
-            PUSHLOG_WRITE("CUnknownContentHandler default EDone")
-            Complete( KErrNone );
-            break;
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// CUnknownContentHandler::RunError
-// ---------------------------------------------------------
-//
-TInt CUnknownContentHandler::RunError( TInt aError )
-    {
-    PUSHLOG_WRITE_FORMAT("CUnknownContentHandler::RunError: %d",aError)
-
-    iState = EDone;
-    Complete( aError );
-    return KErrNone;
-    }
-
--- a/pushmtm/Plugins/PushContentHandler/CUnknownContentHandler.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CUnknownContentHandler.
-*
-*/
-
-
-
-#ifndef __CUNKNOWNCONTENTHANDLER_H__
-#define __CUNKNOWNCONTENTHANDLER_H__
-
-
-// INCLUDE FILES
-
-#include "CPushContentHandlerBase.h"
-#include "PushContentHandlerDef.hrh"
-#include <E32Base.h>
-#include <bldvariant.hrh>
-
-// CONSTANTS
-
-const TUid KUidPushUnknownContentHandler = { EUidPushUnknownContentHandler };
-_LIT( KUnknownContentHandlerData, "*" );
-
-// FORWARD DECLARATIONS
-
-class CSmsMessage;
-class CUnknownPushMsgEntry;
-
-// CLASS DECLARATION
-
-/**
-* CUnknownContentHandler provides the default plugin when the 
-* specific plugin for a data type cannot be matched.
-*
-* If the feature flag __SERIES60_PUSH_SP is defined, then all this 
-* kind of messages are discarded on reception.
-*/ 
-class CUnknownContentHandler : public CPushContentHandlerBase
-	{
-    public: // Constructors and destructor
-
-        /**
-        * Two-phased constructor. Leaves on failure.
-        * @return The constructed object.
-        */
-	    static CUnknownContentHandler* NewL();
-
-        /**
-        * Destructor.
-        */
-	    virtual ~CUnknownContentHandler();
-
-    private: // Constructors
-
-        /**
-        * Constructor.
-        */
-	    CUnknownContentHandler();
-
-        /**
-        * Symbian OS constructor.
-        */
-	    void ConstructL();
-
-    private: // New functions
-
-        /**
-        * Do Garbage Collection synchronously.
-        * @return None.
-        */
-	    void  CollectGarbageL();
-
-#ifdef __SERIES60_PUSH_SP
-
-        /**
-        * Create/Saving Push Msg Entry in the appropriate message store.
-        * First query the type of push message to check if it is a known BIO
-        * message type: 
-        *   If it is then 
-        *		save Push Message as appropriate BIO message
-        *	else
-        *		save as UnknownPushMsgEntry.
-        * @return None.
-        */
-	    void  ProcessingPushMsgEntryL();
-
-        /**
-        * Check if the given Push Message, which is now owned by the handler,
-        * is a BIO Messsage (setting the member variable iBioMsgUID if it is)
-        * and returning a boolean to indicate success (ETrue) or EFalse otherwise.
-        * @return TBool
-        *  ETrue - push message is a BIO message
-        *  EFalse - push message is not BIO message
-        */
-	    TBool BioMessageTypeL();
-
-        /**
-        * Save CPushMessage as the relevant BIO message type.
-        * Firstly create SMS message and use CPushMessage as
-        * source to populate SMS. Then save SMS message.
-        * @return None.
-        */
-	    void  SaveBioMessageEntryL();
-
-        /**
-        * Create CMsvEntry for sms messsage, stores the entry and 
-        * then delete entry once done.
-        * @param aMessage CSmsMessage which embodies details of CPushMessage.
-        */
-	    void  StoreMsgL( CSmsMessage* aSmsMsg );
-
-        /**
-        * Set the service id for Bio messaging
-        * @return TMsvId The service id for the message store.
-        */
-	    TMsvId SetBioServiceIdL();
-
-        /** 
-        * Save CPushMessage as a CUnknownPushMsgEntry
-        * @return None.
-        */
-	    void  SaveUnknownPushMsgEntryL();
-
-        /**
-        * Sets the Unknown Push Message Entry Fields from the data in
-        * the received CPushMessage:
-        * @param aUnknownPushMsgEntry CUnknownPushMsgEntry to populate with 
-        *        CPushMessage details.
-        */
-	    void  SetUnknownPushMsgEntryFieldsL( CUnknownPushMsgEntry& 
-                                             aUnknownPushMsgEntry );
-
-        /**
-        * Extract the file name from the URI.
-        * @param aUri The URI.
-        * @return The file name part or an empty string.
-        */
-	    HBufC* FileNameFromUriL( const TDesC& aUri ) const;
-
-#endif // __SERIES60_PUSH_SP
-
-    private: // Methods from CPushHandlerBase
-
-        /**
-        * HandleMessage Async. Version. Takes ownership of Push Message and 
-        * sets self active to continue processing message.
-        * @param aPushMsg CPushMessage to process.
-        * @param aStatus Request status variable for use in asynchronous 
-        *        operations.
-        * @return None.
-        */
-	    void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
-
-        /**
-        * HandleMessage Sync. Version. Takes ownership of Push Message and 
-        * sets self active to continue processing message.
-        * Initial State: Set data members then go to the next state 
-        * @param aPushMsg CPushMessage to process.
-        */
-	    void HandleMessageL( CPushMessage* aPushMsg );
-
-        /**
-        * Same functionality as DoCancel()
-        */
-	    void  CancelHandleMessage();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved1();
-
-        /**
-        * Reserved function.
-        */
-	    void CPushHandlerBase_Reserved2();
-	    
-    private: // Methods from CActive
-
-        /**
-        * Cancels the handling of the message and revokes the active status
-        * of the handler 
-        */
-	    void DoCancel();
-
-        /**
-        * Handler States:
-        *    EFilteringAndProcessing - Filter new msg according to Service 
-        *                  message settings and Convert CPushMessage to a 
-        *                  format to save and save the message (either as Bio 
-        *                  msg or UnknownPushMsgEntry)
-        *	 EDone		- Clean up, complete observer
-        */
-	    void RunL();
-
-        /**
-        * This is invoked when RunL Leaves with an error.
-        * Cleans up and returns.
-        * @param aError Error passed into this function
-        */
-	    TInt RunError( TInt aError );
-
-    private: // Data
-
-	    enum TState
-            {
-            EGarbageCollecting, 
-            EFilteringAndProcessing,
-            EDone
-            };
-
-        TMsvId              iSavedMsgId; ///< ID of the saved message.
-	    TUid				iBioMsgUID; ///< BIO msg UID.
-    };
-
-#endif	// __CUNKNOWNCONTENTHANDLER_H__
-
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerDef.hrh	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Macro definitions and enums for the Push Content Handlers.
-*
-*/
-
-
-
-#ifndef PUSHCONTENTHANDLERDEF_HRH
-#define PUSHCONTENTHANDLERDEF_HRH
-
-
-/// PushContentHandler DLL.
-#define EUidPushContentHandlerDll 0x101F854C
-
-/// Implementation UIDs.
-#define EUidPushUnknownContentHandler 0x101F854D
-#define EUidPushSIContentHandler 0x101F854E
-#define EUidPushSLContentHandler 0x101F854F
-#define EUidPushCOContentHandler 0x10008D47
-#define EUidPushMultiPartMixedContentHandler 0x101F8550
-#define EUidPushMultiPartRelAndAltContentHandler 0x101F8551
-
-/** PushContentHandler Interface UID (defined by Symbian).
-* See CContentHandlerBase.h, KUidPushContentHandlerBase. */
-#define EUidPushContentHandlerBase 0x101F3E5E
-
-
-#endif // PUSHCONTENTHANDLERDEF_HRH
-
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Proxy definition.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushContentHandlerDef.hrh"
-#include "CUnknownContentHandler.h"
-#include "CSIContentHandler.h"
-#include "CSLContentHandler.h"
-#include "CCOContentHandler.h"
-#include "CMultiPartMixedContentHandler.h"
-#include "CMultiPartRelAndAltContentHandler.h"
-#include <e32std.h>
-#include <ecom/implementationproxy.h>
-
-
-const TImplementationProxy ImplementationTable[] = 
-	{
-        IMPLEMENTATION_PROXY_ENTRY( EUidPushUnknownContentHandler, CUnknownContentHandler::NewL ),
-        IMPLEMENTATION_PROXY_ENTRY( EUidPushSIContentHandler, CSIContentHandler::NewL ),
-        IMPLEMENTATION_PROXY_ENTRY( EUidPushSLContentHandler, CSLContentHandler::NewL ),
-        IMPLEMENTATION_PROXY_ENTRY( EUidPushCOContentHandler, CCOContentHandler::NewL ),
-        IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartMixedContentHandler, CMultiPartMixedContentHandler::NewL ),
-        IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartRelAndAltContentHandler, CMultiPartRelAndAltContentHandler::NewL )
-	};
-
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
-	{
-	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
-
-	return ImplementationTable;
-	}
-
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Panic utility
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushContentHandlerPanic.h"
-
-// LOCAL CONSTANTS AND MACROS
-
-_LIT( KContHandPanicString, "PushContentHandler(MTM)" );
-
-// ---------------------------------------------------------
-// ContHandPanic
-// ---------------------------------------------------------
-//
-GLDEF_C void ContHandPanic( TPushContentHandlerPanic aReason )
-	{
-	User::Panic( KContHandPanicString, aReason );
-	}
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerPanic.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Panic utility
-*
-*/
-
-
-
-#ifndef PUSHCONTENTHANDLERPANIC_H
-#define PUSHCONTENTHANDLERPANIC_H
-
-// INCLUDE FILES
-
-#include <e32std.h>
-
-enum TPushContentHandlerPanic
-	{
-    EPushContHandPanCommandNotSupported = 1, ///< Not supported command.
-    EPushContHandPanBadType, ///< Unsupported message type for an operation.
-    EPushContHandPanFoldersNotSupported, ///< MTM loaded with bad message entry.
-    EPushContHandPanEmptySelection, ///< Entry selection is empty.
-    EPushContHandPanNotInitUrl,
-    EPushContHandPanNoContext,
-    EPushContHandPanAlreadyInitialized,
-    EPushContHandPanBadActionValue,
-    EPushContHandPanBadState, 
-    EPushContHandPanNoFetchOp,
-    EPushContHandPanBadTransaction,
-    EPushContHandPanNoSiIdAttr,
-    EPushContHandPanNoCreatedAttr,
-    EPushContHandPanNoActionAttr,
-    EPushContHandPanTooManySi,
-    EPushContHandPanTooManySl,
-    EPushContHandPanMsgNull,
-    EPushContHandPanBadCreatedType,
-    EPushContHandPanExpiresNotOpaque,
-    EPushContHandPanHrefNotString,
-    EPushContHandPanClassTokenReached,
-    EPushContHandPanUnexpHrefAttrVal,
-    EPushContHandPanUnexpSiToken,
-    EPushContHandPanUnexpSlToken,
-    EPushContHandPanUnspecSiAction,
-    EPushContHandPanUnspecSlAction,
-    EPushContHandPanUnexpectedTimeType,
-    EPushContHandPanBadExpiresType,
-    EPushContHandPanBadTTimeLength,
-    EPushContHandPanNoSiIdOrHrefAttr,
-    EPushContHandPanUnspecSiHref,
-    EPushContHandPanUnspecSlHref,
-    EPushContHandPanSlMsgIdSet,
-    EPushContHandPanSlMsgIdNotSet,
-    EPushContHandPanFetchAlreadyInit,
-    EPushContHandPanAutBadState,
-    EPushContHandPanSiResNotOnStack,
-    EPushContHandPanNullCharSetId,
-    EPushContHandPanNullUcs2Buf
-	};
-
-GLREF_C void ContHandPanic( TPushContentHandlerPanic aReason );
-
-#endif // PUSHCONTENTHANDLERPANIC_H
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Utilities
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushContentHandlerUtils.h"
-#include <e32std.h>
-#include <nw_dom_document.h>
-
-// ---------------------------------------------------------
-// NwxStatusToErrCode
-// ---------------------------------------------------------
-//
-TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode )
-    {
-    TInt ret( KErrGeneral );
-
-    switch ( aNwxErrorCode )
-        {
-        case NW_STAT_SUCCESS:
-            {
-            ret = KErrNone;
-            break;
-            }
-        case NW_STAT_OUT_OF_MEMORY:
-            {
-            ret = KErrNoMemory;
-            break;
-            }
-        case NW_STAT_CANCELLED:
-        case NW_STAT_CONN_CANCELLED:
-            {
-            ret = KErrCancel;
-            break;
-            }
-        default:
-            {
-            ret = KErrGeneral;
-            break;
-            }
-        }
-
-    return ret;
-    }
-
-// ---------------------------------------------------------
-// RWbxmlDictionary::InitializeL
-// ---------------------------------------------------------
-//
-void RWbxmlDictionary::InitializeL( NW_Int32 aCount, 
-                                    NW_WBXML_Dictionary_t* aDictArray[] )
-    {
-    NW_Status_t stat = NW_STAT_SUCCESS;
-    stat = NW_WBXML_Dictionary_initialize( aCount, aDictArray );
-    User::LeaveIfError( NwxStatusToErrCode( stat ) );
-    }
-
-// ---------------------------------------------------------
-// RWbxmlDictionary::Close
-// ---------------------------------------------------------
-//
-void RWbxmlDictionary::Close()
-    {
-    NW_WBXML_Dictionary_destroy();
-    }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::CDocumentTreeOwner
-// ---------------------------------------------------------
-//
-CDocumentTreeOwner::CDocumentTreeOwner() 
-:   iDocTree( NULL )
-    {
-    }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::CDocumentTreeOwner
-// ---------------------------------------------------------
-//
-CDocumentTreeOwner::CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree ) 
-:   iDocTree( aDocTree )
-    {
-    }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::~CDocumentTreeOwner
-// ---------------------------------------------------------
-//
-CDocumentTreeOwner::~CDocumentTreeOwner() 
-    {
-    if ( iDocTree )
-        {
-        NW_DOM_DocumentNode_Delete( iDocTree );
-        }
-    }
-
-// ---------------------------------------------------------
-// CDocumentTreeOwner::SetDocTree
-// ---------------------------------------------------------
-//
-void CDocumentTreeOwner::SetDocTree( NW_DOM_DocumentNode_t* aDocTree ) 
-    {
-    iDocTree = aDocTree;
-    }
-
-// ---------------------------------------------------------
-// CStringOwner::CStringOwner
-// ---------------------------------------------------------
-//
-CStringOwner::CStringOwner() 
-:   iString( NULL )
-    {
-    }
-
-// ---------------------------------------------------------
-// CStringOwner::CStringOwner
-// ---------------------------------------------------------
-//
-CStringOwner::CStringOwner( NW_String_t* aString ) 
-:   iString( aString )
-    {
-    }
-
-// ---------------------------------------------------------
-// CStringOwner::~CStringOwner
-// ---------------------------------------------------------
-//
-CStringOwner::~CStringOwner() 
-    {
-    if ( iString )
-        {
-        NW_String_delete( iString );
-        }
-    }
-
-// ---------------------------------------------------------
-// CStringOwner::SetString
-// ---------------------------------------------------------
-//
-void CStringOwner::SetString( NW_String_t* aString ) 
-    {
-    iString = aString;
-    }
--- a/pushmtm/Plugins/PushContentHandler/PushContentHandlerUtils.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Utilities
-*
-*/
-
-
-
-#ifndef PUSHCONTENTHANDLERUTILS_H
-#define PUSHCONTENTHANDLERUTILS_H
-
-// INCLUDE FILES
-
-#include <e32def.h>
-#include <e32base.h>
-#include <nwx_status.h>
-#include <nw_wbxml_dictionary.h>
-#include <nw_encoder_stringtable.h>
-#include <nw_string_string.h>
-
-/**
-* Convert cXML status code to Symbian OS error code.
-* @param aNwxErrorCode cXML status.
-* @return Symbian OS error code.
-*/
-TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode );
-
-/*
-*   The following tiny classes have been introduced to help putting C-style 
-*   Browser Engine structures to the Cleanup Stack, so that we can implement 
-*   a LEAVE-safe code.
-*/
-
-/**
-* Encapsulate WBXML dictionary initialization.
-*/
-class RWbxmlDictionary
-    {
-    public:
-        void InitializeL( NW_Int32 aCount, NW_WBXML_Dictionary_t* aDictArray[] );
-        void Close();
-    };
-
-/**
-* Encapsulate a WBXML document tree.
-*/
-class CDocumentTreeOwner : public CBase
-    {
-    public:
-        CDocumentTreeOwner();
-        CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree );
-        ~CDocumentTreeOwner();
-    public:
-        void SetDocTree( NW_DOM_DocumentNode_t* aDocTree );
-    private:
-        NW_DOM_DocumentNode_t* iDocTree; ///< Owned.
-    };
-
-/**
-* Encapsulate an NW_String_t.
-*/
-class CStringOwner : public CBase
-    {
-    public:
-        CStringOwner();
-        CStringOwner( NW_String_t* aString );
-        ~CStringOwner();
-    public:
-        void SetString( NW_String_t* aString );
-    private:
-        NW_String_t* iString; ///< Owned.
-    };
-
-#endif // PUSHCONTENTHANDLERUTILS_H
-
--- a/pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,235 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CPushMtmAutoFetchOperation.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushMtmAutoFetchOperation.h"
-#include "PushMtmFetchOperation.h"
-#include "PushContentHandlerPanic.h"
-#include "PushMtmLog.h"
-
-// CONSTANTS
-
-/// Max retry.
-LOCAL_D const TInt KMaxTry = 2;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::NewL
-// ---------------------------------------------------------
-//
-CPushMtmAutoFetchOperation* CPushMtmAutoFetchOperation::NewL
-            (
-                const TDesC& aRequestedUrl, 
-                TInt aTimeDelayInSec, 
-                TRequestStatus& aObserverRequestStatus 
-            )
-    {
-    CPushMtmAutoFetchOperation* op = 
-        new (ELeave) CPushMtmAutoFetchOperation
-            ( aTimeDelayInSec, aObserverRequestStatus );
-    CleanupStack::PushL( op );
-    op->ConstructL( aRequestedUrl );
-    CleanupStack::Pop(); // op
-    return op;
-    }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation()
-    {
-    Cancel();
-    delete iFetchOp;
-    delete iRequestedUrl;
-	iTimer.Close();
-    }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::StartL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::StartL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::StartL")
-
-    Cancel();
-
-    iTry = 0;
-    iState = EFetch;
-
-	SetActive();
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, KErrNone );
-
-    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::StartL")
-	}
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
-                            
-        ( 
-            TInt aTimeDelayInSec, 
-            TRequestStatus& aObserverRequestStatus 
-        )
-:   CActive( EPriorityStandard ), 
-    iObserver( aObserverRequestStatus ),
-    iState( EInit ), 
-    iTimeDelayInSec( aTimeDelayInSec )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::ConstructL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::ConstructL( const TDesC& aRequestedUrl )
-    {
-    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::ConstructL")
-
-    iRequestedUrl = HBufC::NewMaxL( aRequestedUrl.Length() );
-    iRequestedUrl->Des().Copy( aRequestedUrl );
-
-    User::LeaveIfError( iTimer.CreateLocal() );
-
-    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::ConstructL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::FetchL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::FetchL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::FetchL")
-
-    delete iFetchOp;
-    iFetchOp = NULL;
-    iStatus = KRequestPending;
-    SetActive();
-    iFetchOp = CPushMtmFetchOperation::NewL( *iRequestedUrl, iStatus );
-    PUSHLOG_WRITE(" Fetch op created")
-
-    ++iTry; // Increase indicator.
-    PUSHLOG_WRITE_FORMAT(" Try: %d",iTry)
-    iFetchOp->StartL();
-    iState = ECheck; // Next state.
-    PUSHLOG_WRITE(" Fetch op started")
-
-    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::FetchL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::DoCancel
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::DoCancel()
-    {
-    if ( iFetchOp )
-        {
-        iFetchOp->Cancel();
-        }
-
-    iTimer.Cancel();
-
-    TRequestStatus* status = &iObserver;
-    User::RequestComplete( status, KErrCancel );
-    }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::RunL
-// ---------------------------------------------------------
-//
-void CPushMtmAutoFetchOperation::RunL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::RunL")
-
-    __ASSERT_DEBUG( iState != EInit && iState != EDone, 
-                    ContHandPanic( EPushContHandPanAutBadState ) );
-
-    switch ( iState )
-        {
-        case EFetch:
-            {
-            PUSHLOG_WRITE(" EFetch")
-            FetchL();
-            break;
-            }
-
-        case ECheck:
-            {
-            PUSHLOG_WRITE_FORMAT2(" ECheck: %d,%d",iStatus.Int(),iTry)
-            if ( iStatus.Int() != KErrNone && iTry < KMaxTry )
-                {
-                // Wait and Retry.
-                iTimer.Cancel();
-                iStatus = KRequestPending;
-                SetActive();
-                TTimeIntervalMicroSeconds32 delayInMSec = 
-                                            iTimeDelayInSec * 1000000;
-                iTimer.After( iStatus, delayInMSec );
-                iState = EFetch;
-                }
-            else
-                {
-                // No error or no more trial allowed.
-                iState = EDone;
-                PUSHLOG_WRITE_FORMAT(" SignalObs: %d",iStatus.Int());
-                TRequestStatus* status = &iObserver;
-                User::RequestComplete( status, iStatus.Int() );
-                }
-            break;
-            }
-
-        default:
-            {
-            PUSHLOG_WRITE(" default")
-            // JIC.
-            iState = EDone;
-            TRequestStatus* status = &iObserver;
-            User::RequestComplete( status, KErrNone );
-            break;
-            }
-        }
-
-    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::RunL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmAutoFetchOperation::RunError
-// ---------------------------------------------------------
-//
-TInt CPushMtmAutoFetchOperation::RunError( TInt aError )
-    {
-    PUSHLOG_WRITE_FORMAT("CPushMtmAutoFetchOperation::RunError <%d>",aError);
-
-    // Signal the observer that a leave has occured.
-    TRequestStatus* status = &iObserver;
-    User::RequestComplete( status, aError );
-
-    return KErrNone;
-    }
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmAutoFetchOperation.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of PushMtmAutoFetchOperation.
-*
-*/
-
-
-
-#ifndef PUSHMTMAUTOFETCHOPERATION_H
-#define PUSHMTMAUTOFETCHOPERATION_H
-
-// INCLUDE FILES
-
-#include <e32base.h>
-
-// FORWARD DECLARATIONS
-
-class CPushMtmFetchOperation;
-
-// CLASS DECLARATION
-
-/**
-* Asynchronous fetch operation that runs in silent mode and in addition to the 
-* services of CPushMtmFetchOperation it retries downloading of the indicated 
-* service if the first try fails.
-*/
-class CPushMtmAutoFetchOperation : public CActive
-    {
-    public: // Constructors and destructor
-
-        /**
-        * Two-phased constructor. Leaves on failure.
-        * @param aRequestedUrl The requested URL.
-        * @param aTimeDelayInSec Time delay between fetches in seconds.
-        * @param aObserverRequestStatus Completion status.
-        * @return The constructed client.
-        */
-        static CPushMtmAutoFetchOperation* NewL
-            (
-                const TDesC& aRequestedUrl, 
-                TInt aTimeDelayInSec, 
-                TRequestStatus& aObserverRequestStatus 
-            );
-
-        /**
-        * Destructor.
-        */
-        virtual ~CPushMtmAutoFetchOperation();
-
-    public: // Functions from base classes
-
-        /**
-        * Start or restart the operation.
-        */
-        void StartL();
-
-    protected: // Constructors 
-
-        /**
-        * Constructor.
-        * @param aTimeDelayInSec Time delay between fetches in seconds.
-        * @param aObserverRequestStatus Completion status.
-        */
-        CPushMtmAutoFetchOperation( TInt aTimeDelayInSec, 
-                                    TRequestStatus& aObserverRequestStatus );
-
-        /**
-        * Second phase constructor.
-        * @param aRequestedUrl The requested URL.
-        */
-        void ConstructL( const TDesC& aRequestedUrl );
-
-    protected: // New functions
-
-        /**
-        * Issue fetching.
-        */
-        void FetchL();
-
-    protected: // Functions from base classes
-
-        /**
-        * Cancel fetching.
-        * @return None.
-        */
-        void DoCancel();
-
-        /**
-        * Start fetching and make an entry into the operation mapper.
-        * @return None.
-        */
-        void RunL();
-
-        /**
-        * Leave handler protocol implementation: it is called when 
-        * RunL leaves.
-        */
-        TInt RunError( TInt aError );
-
-    protected: // Data
-
-        TRequestStatus& iObserver;  ///< Observer's status.
-        HBufC* iRequestedUrl;       ///< Request URI or NULL. Owned.
-
-        enum TState    ///< State.
-            {
-            EInit,     ///< Initial state.
-            EFetch,    ///< Fetch.
-            ECheck,    ///< Check the result of the fetching.
-            EDone      ///< Operation done.
-            };
-
-        TState iState; ///< Current state of the state machine.
-
-        /// The operation that does downloading. Owned.
-        CPushMtmFetchOperation* iFetchOp;
-        RTimer iTimer; ///< Timer for waiting.
-        TInt iTimeDelayInSec; ///< Time delay between downloadings in seconds.
-        TInt iTry; ///< How many times we have tried downloading so far?
-    };
-
-#endif // PUSHMTMAUTOFETCHOPERATION_H
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Data supplier for responses loaded from cache
-*
-*/
-
-
-
-// INCLUDE FILES
-#include "PushMtmCacheDataSupplier.h"
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier(
-    HBufC8* aBody ) 
-    : iBody( aBody )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheDataSupplier::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheDataSupplier* CPushMtmCacheDataSupplier::NewL(
-    HBufC8* aBody )
-    {
-    CPushMtmCacheDataSupplier* self = new(ELeave) CPushMtmCacheDataSupplier( aBody );
-    return self;
-    }
-
-// Destructor
-CPushMtmCacheDataSupplier::~CPushMtmCacheDataSupplier()
-    {
-    ReleaseData();
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheDataSupplier::GetNextDataPart
-// Return the next chunk of response body from the Cache
-// -----------------------------------------------------------------------------
-//
-TBool CPushMtmCacheDataSupplier::GetNextDataPart(
-    TPtrC8 &aDataChunk )
-    {
-    aDataChunk.Set( *iBody );
-    return ETrue;
-    }
-
-//  End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheDataSupplier.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  
-*
-*/
-/*
-* ==============================================================================
-*  Name        : PushMtmCacheDataSupplier.h
-*  Part of     : PushMtm
-*  Interface   : 
-*  Description : 
-*  Version     : 3.1
-*/
-
-
-#ifndef CPUSHMTMCACHEDATASUPPLIER_H
-#define CPUSHMTMCACHEDATASUPPLIER_H
-
-//  INCLUDES
-#include <http/MHTTPDataSupplier.h>
-
-// CONSTANTS
-
-// MACROS
-
-// DATA TYPES
-
-// FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// CLASS DECLARATION
-
-/**
- *  Data supplier to supply response body if the url is loaded
- *  from cache
- *
- *  @lib 
- *  @since 3.1
- */
-class CPushMtmCacheDataSupplier : public CBase, public MHTTPDataSupplier
-    {
-    public:  // Constructors and destructor
-        
-        /**
-        * Two-phased constructor.
-        */
-        static CPushMtmCacheDataSupplier* NewL( HBufC8* aBody );
-        
-        /**
-        * Destructor.
-        */
-        virtual ~CPushMtmCacheDataSupplier();      
-     
-    public: // from MHTTPDataSupplier
-        
-        /**
-        * From MHTTPDataSupplier. Free the data chunk that was requested.
-        * @since 2.0
-        */
-        virtual void ReleaseData() { delete iBody; iBody = NULL;}
-        
-        /**
-        * From MHTTPDataSupplier. It is not possible to know
-        * the data size, so return KErrNotFound
-        * @since 2.0
-        */
-        virtual TInt OverallDataSize () { return KErrNotFound; }
-        
-        /**
-        * From MHTTPDataSupplier. Get the next data part of the response body
-        * @since 2.0
-        */
-        virtual TBool GetNextDataPart( TPtrC8& aDataPart );
-        
-        /**
-        * From MHTTPDataSupplier. Not Supported
-        * @since 2.0
-        */
-        virtual TInt Reset() { return KErrNotFound; }
-        
-    private:
-        
-        /**
-        * C++ default constructor.
-        */
-        CPushMtmCacheDataSupplier( HBufC8* aBody );
-        
-    private:    // Data
-        
-        //owned by datasupplier and is destroyed 
-        //when the releasedata function is called
-        HBufC8* iBody;        
-    };
-
-#endif      // CPUSHMTMCACHEDATASUPPLIER_H
-
-// End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,363 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CPushMtmCacheSupply
-*
-*/
-
-
-// INCLUDE FILES
-#include "PushMtmCacheSupply.h"
-#include "httpcachemanager.h"
-#include "PushMtmCacheDataSupplier.h"
-
-#include <http/RHTTPTransaction.h>
-#include <http/mhttpdatasupplier.h>
-#include <http/rhttpsession.h>
-#include <httperr.h>
-
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-const TInt KResponseTimeout = 0;
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::CPushMtmCacheSupply
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheSupply::CPushMtmCacheSupply(MCacheSupplyCallbacks* aCacheSupplyCallbacks ):
-      // closed by default
-      iReponseState( THTTPEvent::EClosed )
-    {
-    iCacheEntry.iCacheHandler = NULL;
-    iCacheEntry.iCacheEntry = NULL;
-    iCacheSupplyCallbacks = aCacheSupplyCallbacks;
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::ConstructL(CHttpCacheManager* aCacheMgr)
-    {
-    iCacheManager = aCacheMgr;
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPushMtmCacheSupply* CPushMtmCacheSupply::NewL(CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks  )
-    {
-    CPushMtmCacheSupply* self = new( ELeave ) CPushMtmCacheSupply( aCacheSupplyCallbacks);
-
-    CleanupStack::PushL( self );
-    self->ConstructL(aCacheMgr);
-    CleanupStack::Pop();
-
-    return self;
-    }
-
-// Destructor
-CPushMtmCacheSupply::~CPushMtmCacheSupply()
-    {
-    delete iDataSupplier;
-    CloseRequest();
-    if (iResponseTimer)
-        {
-        iResponseTimer->Cancel();
-        }
-    delete iResponseTimer;
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::StartRequestL
-//
-//
-// -----------------------------------------------------------------------------
-//
-TInt CPushMtmCacheSupply::StartRequestL( )
-    {
-    TInt status;
-
-    status = iCacheManager->RequestL( *(iCacheSupplyCallbacks->Transaction()), 
-    TBrCtlDefs::ECacheModeNormal , iCacheEntry );
-    // start a timer that feeds the content to the transaction
-    if( status == KErrNone )
-        {
-        iClosed = EFalse;
-        // set response state. start with the http headers.
-        iReponseState = THTTPEvent::EGotResponseHeaders;
-        //
-        iResponseTimer = CPeriodic::NewL( CActive::EPriorityHigh );
-        iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
-        }
-    return status;
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::CloseRequest
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::CloseRequest()
-    {
-    if( !iClosed )
-	    {
-	    iCacheManager->RequestClosed( (iCacheSupplyCallbacks->Transaction()), iCacheEntry );
-	    iClosed = ETrue;
-	    }
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::HeadersReceived
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::HeadersReceivedL()
-    {
-    // do not cache content we just sent off
-    if( iReponseState == THTTPEvent::EClosed )
-        {
-        RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
-        iCacheManager->ReceivedResponseHeadersL( *(iCacheSupplyCallbacks->Transaction()), iCacheEntry );
-        //
-        iNotModified = trans->Response().StatusCode() == HTTPStatus::ENotModified;
-        if( iNotModified )
-            {
-            // change from 304 to 200 -otherwise trans exits with EFailed
-            trans->Response().SetStatusCode( HTTPStatus::EOk );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::BodyReceivedL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::BodyReceivedL()
-    {
-    // do not cache content we just sent off
-    if( iReponseState == THTTPEvent::EClosed )
-        {
-        RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
-        MHTTPDataSupplier* supplier = trans->Response().Body();
-        //
-        iCacheManager->ReceivedResponseBodyDataL( *trans, *supplier, iCacheEntry );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ResponseComplete
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::ResponseCompleteL()
-    {
-    if( iReponseState == THTTPEvent::EClosed )
-        {
-        RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
-        // not modified needs body before response complete
-        if( iNotModified )
-            {
-            // use cache
-            // close response first
-            iCacheManager->ResponseComplete( *trans, iCacheEntry );
-            // request the item from cache
-            if( iCacheManager->RequestL( *trans, TBrCtlDefs::ECacheModeOnlyCache, iCacheEntry ) == KErrNone )
-                {
-                // ser
-                iReponseState = THTTPEvent::EGotResponseBodyData;
-                //
-                SendBodyL();
-                CloseRequest();
-                }
-            }
-        else
-            {
-            // normal response complete
-            iCacheManager->ResponseComplete( *trans, iCacheEntry );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ResponseCallbackL
-//
-//
-// -----------------------------------------------------------------------------
-//
-TInt CPushMtmCacheSupply::ResponseCallbackL(
-    TAny* aAny )
-    {
-    //
-    CPushMtmCacheSupply* thisObj = (CPushMtmCacheSupply*)aAny;
-    thisObj->SupplyResponseL();
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::SupplyResponseL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::SupplyResponseL()
-    {
-    RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
-    //
-    switch( iReponseState )
-        {
-        case THTTPEvent::EGotResponseHeaders:
-            {
-            //
-            iFailed = EFalse;
-            if( iCacheManager->RequestHeadersL( *trans, iCacheEntry ) == KErrNone )
-                {
-                //
-                trans->Response().SetStatusCode( HTTPStatus::EOk );
-                //
-                iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseHeaders );
-                // move to the next state
-                iReponseState = THTTPEvent::EGotResponseBodyData;
-                }
-            else
-                {
-                // move to the next state
-                iFailed = ETrue;
-                // move to the next state
-                iReponseState = THTTPEvent::EResponseComplete;
-                }
-            break;
-            }
-        case THTTPEvent::EGotResponseBodyData:
-            {
-            //
-            SendBodyL();
-            // move to the next state
-            iReponseState = THTTPEvent::EResponseComplete;
-            break;
-            }
-        case THTTPEvent::EResponseComplete:
-            {
-            iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EResponseComplete );
-            // move to the next state
-            iReponseState = !iFailed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
-            break;
-            }
-        case THTTPEvent::ESucceeded:
-            {
-            // move to the next state
-            iReponseState = THTTPEvent::EClosed;
-            // cancel timer
-            iResponseTimer->Cancel();
-            //
-            iCacheSupplyCallbacks->HandleEventL( THTTPEvent::ESucceeded );
-            // this obj is destroyed at this point
-            break;
-            }
-        case THTTPEvent::EFailed:
-            {
-            // move to the next state
-            iReponseState = THTTPEvent::EClosed;
-            // cancel timer
-            iResponseTimer->Cancel();
-            //
-            iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EFailed );
-            // this obj is destroyed at this point
-            break;
-            }
-        default:
-            {
-            //
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::SendBodyL
-//
-//
-// -----------------------------------------------------------------------------
-//
-void CPushMtmCacheSupply::SendBodyL()
-    {
-    RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
-    //
-    TBool lastChunk;
-    // currently it is always the last chunk
-    HBufC8* body = iCacheManager->RequestNextChunkL( *trans, lastChunk, iCacheEntry );
-    if( body )
-        {
-        CleanupStack::PushL( body );
-        // create datasupplier and attach it to the transaction
-        if( !iDataSupplier )
-            iDataSupplier = CPushMtmCacheDataSupplier::NewL( body );
-        trans->Response().SetBody( *iDataSupplier );
-        CleanupStack::Pop(); // body
-        //
-        iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseBodyData );
-        }
-    else
-        {
-        // move to the next state
-        iFailed = ETrue;
-        }
-    }
-    
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::PauseSupply
-// -----------------------------------------------------------------------------
-void CPushMtmCacheSupply::PauseSupply()
-	{
-	if( iResponseTimer && iResponseTimer->IsActive() )
-		iResponseTimer->Cancel();
-	}
-
-// -----------------------------------------------------------------------------
-// CPushMtmCacheSupply::ResumeSupply
-// -----------------------------------------------------------------------------
-void CPushMtmCacheSupply::ResumeSupply()
-	{
-	if( iResponseTimer && !iResponseTimer->IsActive() )
-		iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
-	}
-
-//  End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmCacheSupply.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,214 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Definition of CPushMtmCacheSupply
-*
-*/
-
-
-#ifndef CPUSHMTMCACHESUPPLY_H
-#define CPUSHMTMCACHESUPPLY_H
-
-//  INCLUDES
-#include <e32base.h>
-#include <brctldefs.h>
-#include "httpcachemanager.h"
-
-// CONSTANTS
-
-// MACROS
-
-// DATA TYPES
-
-// FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-class CHttpTransaction;
-class CPeriodic;
-class CPushMtmCacheDataSupplier;
-
-// CLASS DECLARATION
-
-
-
-class MCacheSupplyCallbacks
-    {
-    public:
-        virtual RHTTPTransaction* Transaction() = 0;
-        virtual void HandleEventL(THTTPEvent aEvent) = 0;
-    };
-
-
-/**
-*  This class handles http transactions.
-*  @lib PushMtmContentHandler
-*  @since 3.1
-*/
-class CPushMtmCacheSupply : public CBase
-    {
-    public:  // Constructors and destructor
-
-        /**
-        * Two-phased constructor.
-        * @param
-        * @param
-        * @param
-        * @return Http cache  object.
-        */
-        static CPushMtmCacheSupply* NewL( CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks );
-
-        /**
-        * Destructor.
-        */
-        virtual ~CPushMtmCacheSupply();
-
-    public: // new functions
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        TInt StartRequestL(  );
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        void CloseRequest();
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        void HeadersReceivedL();
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        void BodyReceivedL();
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        void ResponseCompleteL();
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        TInt ResponseState() const { return iReponseState;}
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        TBool IsSupplying()             { return iResponseTimer!=0; }
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-		void PauseSupply();
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-		void ResumeSupply();
-
-    private:
-
-        /**
-        * Construct.
-        * @param
-        * @param
-        * @parem
-        * @return
-        */
-        CPushMtmCacheSupply( MCacheSupplyCallbacks* aCacheSupplyCallbacks  );
-
-        /**
-        * By default Symbian 2nd phase constructor is private.
-        */
-        void ConstructL(CHttpCacheManager* aCacheMgr);
-
-    private: //
-
-        /**
-        * Callback for async response
-        * @since 3.1
-        * @param  aAny this pinter
-        * @return TInt KErrNone
-        */
-        static TInt ResponseCallbackL( TAny* aAny );
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        void SupplyResponseL();
-
-        /**
-        *
-        * @since 3.1
-        * @param
-        * @return
-        */
-        void SendBodyL();
-
-    private:    // Data
-
-        //
-        CHttpCacheManager*              iCacheManager;          // not owned
-        //
-        TInt                            iReponseState;
-        //
-        CPeriodic*                      iResponseTimer;         // owned
-        //
-        TBool                           iFailed;
-        //
-        TBool                           iNotModified;
-        //
-        THttpCacheEntry                 iCacheEntry;
-        // ETrue if the cache object is closed
-        TBool							iClosed;
-
-        CPushMtmCacheDataSupplier*      iDataSupplier;
-        MCacheSupplyCallbacks*          iCacheSupplyCallbacks;
-  };
-
-#endif      // CPUSHMTMCACHESUPPLY_H
-
-// End of File
--- a/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1043 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of CPushMtmFetchOperation.
-*
-*/
-
-
-
-// INCLUDE FILES
-
-#include "PushMtmFetchOperation.h"
-#include "PushContentHandlerPanic.h"
-#include "PushMtmLog.h"
-#include <push/cslpushmsgentry.h>
-#include <Uri8.h>
-#include <SysUtil.h>
-#include <cookiefilterinterface.h>
-#include <uaproffilter_interface.h>
-#include <CommDbConnPref.h>
-#include <cdbcols.h>
-#include <browseruisdkcrkeys.h>
-#include "PushMtmPrivateCRKeys.h"
-#include <centralrepository.h> 
-#include <commdb.h>
-#include <ApDataHandler.h>
-#include <ApAccessPointItem.h>
-#include <ApUtils.h>
-#include <ApSelect.h>
-#include <httpfilteracceptheaderinterface.h>
-#include <httpfilteriopinterface.h>
-#include <httpfiltercommonstringsext.h>
-#include <deflatefilterinterface.h>
-#include <FeatMgr.h>
-
-// ================= MACROS =======================
-
-#ifdef _DEBUG
-    /// Guard "debug-only" argument name with this (expands to argument).
-    #define DEBUG_ONLY( argName ) argName
-#else /* not defined _DEBUG */
-    /// Guard "debug-only" argument name with this (expands to nothing).
-    #define DEBUG_ONLY( argName )
-#endif /* def _DEBUG */
-
-// ================= LOCAL CONSTANTS =======================
-
-_LIT8( KHttpProtString, "HTTP/TCP" );
-_LIT8( KUserAgent, "Push MTM" );
-
-/// Base HTTP error code. See Extended Error Handling UI Specification!
-LOCAL_C const TInt KPushMtmHttpErrorBase = -25000;
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::NewL
-// ---------------------------------------------------------
-//
-CPushMtmFetchOperation* CPushMtmFetchOperation::NewL
-                                    (
-                                        const TDesC& aRequestedUrl, 
-                                        TRequestStatus& aObserverRequestStatus 
-                                    )
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::NewL")
-
-    CPushMtmFetchOperation* op = 
-        new (ELeave) CPushMtmFetchOperation( aObserverRequestStatus );
-    CleanupStack::PushL( op );
-    op->ConstructL( aRequestedUrl );
-    CleanupStack::Pop( op ); // op
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::NewL")
-    return op;
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::~CPushMtmFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmFetchOperation::~CPushMtmFetchOperation()
-    {
-    Cancel();
-    delete ( iCacheMgr );
-    delete iCacheSupply;
-    iHttpTrans.Close();
-    iHttpSess.Close();
-    iConn.Close();
-    iSockServ.Close();
-    delete iRequestedUrl;
-    delete iSourceUri;
-    delete iBody;
-    FeatureManager::UnInitializeLib();
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::StartL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::StartL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartL")
-
-    Cancel();
-
-    iResult = KErrNone;
-    iState = EInit;
-
-	SetActive();
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, KErrNone );
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::CPushMtmFetchOperation
-// ---------------------------------------------------------
-//
-CPushMtmFetchOperation::CPushMtmFetchOperation
-                        ( TRequestStatus& aObserverRequestStatus ) 
-:   CActive( EPriorityStandard ), 
-    iObserver( aObserverRequestStatus ),
-    iState( EInit ),
-    iResult( KErrNone )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::ConstructL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::ConstructL( const TDesC& aRequestedUrl )
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::ConstructL")
-
-    iRequestedUrl = HBufC8::NewMaxL( aRequestedUrl.Length() );
-    iRequestedUrl->Des().Copy( aRequestedUrl );
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::ConstructL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::GetDefaultInetAccessPointL
-// ---------------------------------------------------------
-//
-TBool CPushMtmFetchOperation::GetDefaultInetAccessPointL
-                              ( TUint32& aIapId ) const
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
-
-    // Try to find the default AP.
-    // The Browser may stores the default AP in the shared data.
-    CRepository* repository = CRepository::NewL( KCRUidBrowser );
-    CleanupStack::PushL( repository );
-
-    TInt wapApId;
-    User::LeaveIfError
-        ( repository->Get( KBrowserDefaultAccessPoint, wapApId ) );
-    TUint32 wapApId32( wapApId );
-    TUint32 iapId32( 0 );
-
-    CleanupStack::PopAndDestroy( repository );
-    repository = 0;
-
-    CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
-    CleanupStack::PushL( commsDb );
-    CApDataHandler* apDataHandler = CApDataHandler::NewLC( *commsDb );
-    CApAccessPointItem* apItem = CApAccessPointItem::NewLC();
-    TRAPD( err, apDataHandler->AccessPointDataL( wapApId32, *apItem ) );
-    CApUtils* apUtils = CApUtils::NewLC( *commsDb );
-
-    TBool wapApFound( EFalse );
-    TBool iapFound( EFalse );
-
-    PUSHLOG_WRITE_FORMAT("  err: <%d>",err)
-    if ( err == KErrNone )
-        {
-        wapApFound = ETrue;
-        }
-    else // err != KErrNone
-        {
-        // The first valid access point has to be selected if exists
-        CApSelect* apSelect = CApSelect::NewLC
-                                            (
-                                                *commsDb, 
-                                                KEApIspTypeAll, 
-                                                EApBearerTypeAll, 
-                                                KEApSortNameAscending
-                                            );
-        if ( apSelect->MoveToFirst() )
-            {
-            wapApFound = ETrue;
-            wapApId32 = apSelect->Uid();
-            }
-        CleanupStack::PopAndDestroy( apSelect ); // apSelect
-        }
-
-    if ( wapApFound )
-        {
-        // Get the IAP ID from the WAP AP ID.
-#ifndef __SERIES60_WSP
-        iapId32 = 0;
-        TRAPD( errTransl, iapId32 = apUtils->IapIdFromWapIdL( wapApId32 ) );
-        PUSHLOG_WRITE_FORMAT("  IapIdFromWapIdL errTransl: <%d>",errTransl)
-        if ( errTransl == KErrNone )
-            {
-            iapFound = ETrue;
-            }
-#else
-        iapId32 = wapApId32;
-        iapFound = ETrue;
-#endif // __SERIES60_WSP
-        }
-
-    CleanupStack::PopAndDestroy( 4 ); // apUtils, apItem, 
-                                            // apDataHandler, commsDb
-
-    if ( iapFound )
-        {
-        aIapId = iapId32;
-        }
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
-    return iapFound;
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::InitializeL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::InitializeL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::InitializeL")
-
-    User::LeaveIfError( iSockServ.Connect() );
-    PUSHLOG_WRITE("CPushMtmFetchOperation iSockServ.Connect() OK")
-    User::LeaveIfError( iConn.Open( iSockServ ) );
-    PUSHLOG_WRITE("CPushMtmFetchOperation iConn.Open() OK")
-
-    // Open the HTTP session.
-    iHttpSess.OpenL( KHttpProtString );
-    PUSHLOG_WRITE("CPushMtmFetchOperation iHttpSess.OpenL OK")
-
-    // Set our Socket Server handle and Connection as session properties.
-    iHttpSess.ConnectionInfo().SetPropertyL
-        (
-            StringF( HTTP::EHttpSocketServ ),
-            THTTPHdrVal( iSockServ.Handle() )
-        );
-    PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketServ set")
-    iHttpSess.ConnectionInfo().SetPropertyL
-        (
-            StringF( HTTP::EHttpSocketConnection ),
-            THTTPHdrVal( REINTERPRET_CAST( TInt, &iConn ) )
-        );
-    PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketConnection set")
-
-    // Open different string tables to the session. These are required 
-    // by the Accept Header Filter.
-    iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetTable() );
-    PUSHLOG_WRITE("CPushMtmFetchOperation table 1 opened");
-    iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetLanguageTable() );
-    PUSHLOG_WRITE("CPushMtmFetchOperation table 2 opened");
-
-    // Install the very same set of filters that BrowserEngine installs.
-    // The following filters must not be installed:
-    // - Authentication Filter, because the fetch operation and the push mtm 
-    //   subsystem does not support credentials.
-    // - Conn Handler Filter, because the fetch operation let it to the HTTP 
-    //   core framework to create connection - it just sets the acces point.
-
-    // Install UAProf filter.
-    CHttpUAProfFilterInterface::InstallFilterL( iHttpSess );
-    PUSHLOG_WRITE(" UAProf installed")
-
-    // Install cookie filter.
-    CHttpCookieFilter::InstallFilterL( iHttpSess );
-    PUSHLOG_WRITE(" Cookie filter installed")
-
-    // Create cache manager
-    FeatureManager::InitializeLibL();
-    iCacheMgr = CHttpCacheManager::NewL();
-    PUSHLOG_WRITE(" Cache Manager installed")
-
-    // Install Accept Header Filter.
-    CHttpFilterAcceptHeaderInterface::InstallFilterL( iHttpSess );
-    PUSHLOG_WRITE(" Accept Header Filter installed")
-
-    // Install IOP Filter.
-    CHttpFilterIopInterface::InstallFilterL( iHttpSess, iopOptionHostHeader );
-    PUSHLOG_WRITE(" IOP Filter installed")
-
-    // Install Deflate Filter.
-    CHttpDeflateFilter::InstallFilterL( iHttpSess );
-    PUSHLOG_WRITE(" Deflate Filter installed");
-
-    TUint32 defIapId( 0 );
-    TBool defIapIdFound = EFalse;
-    TCommDbConnPref commPrefs;
-#ifndef __WINS__
-    // Use Browser default AP & comms db:
-    defIapIdFound = GetDefaultInetAccessPointL( defIapId );
-    PUSHLOG_WRITE_FORMAT("  defIapIdFound: <%d>",(TInt)defIapIdFound)
-    PUSHLOG_WRITE_FORMAT("  defIapId:      <%d>",defIapId)
-    commPrefs.SetDialogPreference( ECommDbDialogPrefDoNotPrompt );
-    if ( defIapIdFound )
-        {
-        commPrefs.SetIapId( defIapId );
-        }
-#else // __WINS__
-    // Prompt the user to select access point
-    commPrefs.SetDialogPreference( ECommDbDialogPrefPrompt );
-#endif // __WINS__
-
-    iState = EStartRequest;
-
-    iStatus = KRequestPending;
-    SetActive();
-    iConn.Start( commPrefs, iStatus );
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::InitializeL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::StartRequestL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::StartRequestL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartRequestL")
-
-    // Create the transaction.
-    CreateTransactionL();
-
-    CheckCacheL();
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartRequestL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::CheckCacheL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::CheckCacheL()
-
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::CheckCacheL")
-    iCacheSupply = CPushMtmCacheSupply::NewL(iCacheMgr, this);
-    TInt ret = iCacheSupply->StartRequestL();
-    iStatus = KRequestPending;
-	SetActive();
-    if (ret != KErrNone) // Not in cache
-        {
-        iState = ERequest;
-        iCachedResponse = ETrue;
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete( status, KErrNone);
-        }
-    else
-        {
-        iState = EDone;
-        iCachedResponse = EFalse;
-        }
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CheckCacheL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::RequestL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::RequestL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::RequestL")
-
-    iState = EDone;
-
-    iStatus = KRequestPending;
-	SetActive();
-    SubmitTransactionL();
-    // Do not call InvokeRun(). Let MHFRunL to handle the request.
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::RequestL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::Done
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::Done()
-    {
-    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::Done iResult: <%d>",iResult);
-
-    delete iRequestedUrl;
-    iRequestedUrl = NULL;
-
-    // Notify parent.
-    TRequestStatus* status = &iObserver;
-    User::RequestComplete( status, iResult );
-//  iState = EInit;
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::CreateTransactionL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::CreateTransactionL()
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::CreateTransactionL")
-
-    __ASSERT_DEBUG( iRequestedUrl, 
-                    ContHandPanic( EPushContHandPanNotInitUrl ) );
-
-    // Create the transaction.
-    TUriParser8 uri;
-    User::LeaveIfError( uri.Parse( *iRequestedUrl ) );
-    iHttpTrans = 
-        iHttpSess.OpenTransactionL( uri, *this, StringF( HTTP::EGET ) );
-    PUSHLOG_WRITE("CPushMtmFetchOperation OpenTransactionL OK")
-
-    // Set request headers.
-    RHTTPHeaders hdr = iHttpTrans.Request().GetHeaderCollection();
-    SetHeaderL( hdr, HTTP::EUserAgent, KUserAgent );
-    SetHeaderL( hdr, HTTP::EAccept, HTTP::EAnyAny );
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CreateTransactionL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SubmitTransactionL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SubmitTransactionL()
-    {
-    iHttpTrans.SubmitL();
-    PUSHLOG_WRITE("CPushMtmFetchOperation iHttpTrans.SubmitL OK")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::HandleResponseHeadersL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::HandleResponseHeadersL( RHTTPResponse aResponse )
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::HandleResponseHeadersL")
-
-    TInt httpCode = aResponse.StatusCode();
-    PUSHLOG_WRITE_FORMAT(" HttpStatus: %d",httpCode)
-
-#ifdef __TEST_LOG__
-    LogHeadersL( aResponse.GetHeaderCollection() );
-#endif // __TEST_LOG__
-
-    if ( HTTPStatus::IsSuccessful( httpCode ) && 
-         ( httpCode != HTTPStatus::ENoContent ) )
-        {
-        // Successful GET.
-        PUSHLOG_WRITE(" Successful GET")
-        // Get content type.
-        iDataType = TDataType
-            ( GetContentTypeL( aResponse.GetHeaderCollection() ) );
-        // Get source URI.
-        HBufC8* buf = GetSourceUriL( iHttpTrans ).AllocL();
-        PUSHLOG_WRITE(" Source URI got")
-        delete iSourceUri;
-        iSourceUri = buf;
-        // No error:
-        iResult = KErrNone;
-        }
-    else
-        {
-        // See Extended Error Handling UI Specification!
-        iResult = KPushMtmHttpErrorBase - httpCode;
-        PUSHLOG_WRITE_FORMAT(" iResult: <%d>",iResult)
-        }
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::HandleResponseHeadersL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::VersionRetryL
-// ---------------------------------------------------------
-//
-TBool CPushMtmFetchOperation::VersionRetryL()
-    {
-    TBool retryDone( EFalse );
-
-    // Check what http version we are using.
-    THTTPHdrVal val;
-    TBool exists = iHttpSess.ConnectionInfo().Property
-        (
-        StringF( HTTP::EHTTPVersion ), 
-        val
-        );
-    if ( exists && TInt( val ) == HTTP::EHttp11 )
-        {
-        // Currently using HTTP/1.1. Cancel transaction and resubmit it using
-        // HTTP/1.0.
-        iHttpTrans.Cancel();
-        iHttpSess.ConnectionInfo().SetPropertyL
-            (
-            StringF( HTTP::EHTTPVersion ),
-            THTTPHdrVal( StringF( HTTP::EHttp10 ) )
-            );
-        SubmitTransactionL();
-        retryDone = ETrue;
-        }
-
-    return retryDone;
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::AppendResponse
-// ---------------------------------------------------------
-//
-TInt CPushMtmFetchOperation::AppendResponse( const TDesC8& aDataChunk )
-    {
-    TInt err( KErrNone );
-    HBufC8* newBodyBuf = NULL;
-
-    if ( !iBody )
-        {
-        // iBody does not exist yet; allocate buffer for the first data chunk.
-        newBodyBuf = HBufC8::New( aDataChunk.Length() );
-        }
-    else
-        {
-        const TInt needed( iBody->Des().Length() + aDataChunk.Length() );
-        if ( iBody->Des().MaxLength() < needed )
-            {
-            // iBody exists, but small.
-            newBodyBuf = iBody->ReAlloc( needed );
-            iBody = NULL; // ReAlloc deleted it!
-            }
-        else
-            {
-            // iBody exists and the new chunk fits into it.
-            }
-        }
-
-    if ( newBodyBuf )
-        {
-        __ASSERT_DEBUG( iBody == NULL, 
-                        ContHandPanic( EPushContHandPanAlreadyInitialized ) );
-        delete iBody; // Not necessary, JIC.
-        iBody = newBodyBuf;
-        }
-    else
-        {
-        if (aDataChunk.Length() > 0)
-            {
-            err = KErrNoMemory;
-            }
-        }
-
-    if ( !err )
-        {
-        iBody->Des().Append( aDataChunk );
-        }
-
-    return err;
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SetHeaderL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders, 
-                                         HTTP::TStrings aHdrField, 
-                                         const TDesC8& aHdrValue )
-    {
-    RStringF valStr = iHttpSess.StringPool().OpenFStringL( aHdrValue );
-    CleanupClosePushL<RStringF>( valStr );
-    SetHeaderL( aHeaders, aHdrField, valStr );
-    CleanupStack::PopAndDestroy();  // close valStr
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SetHeaderL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders, 
-                                         HTTP::TStrings aHdrField, 
-                                         HTTP::TStrings aHdrValue )
-    {
-    SetHeaderL( aHeaders, aHdrField, StringF( aHdrValue ) );
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::SetHeaderL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders, 
-                                         HTTP::TStrings aHdrField, 
-                                         const RStringF aHdrValue )
-    {
-    THTTPHdrVal val( aHdrValue );
-    aHeaders.SetFieldL( StringF( aHdrField ), val );
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::GetContentTypeL
-// ---------------------------------------------------------
-//
-const TDesC8& CPushMtmFetchOperation::GetContentTypeL( RHTTPHeaders aHeaders )
-    {
-    THTTPHdrVal hdrVal;
-    User::LeaveIfError
-        ( aHeaders.GetField( StringF( HTTP::EContentType ), 0, hdrVal ) );
-    if ( hdrVal.Type() != THTTPHdrVal::KStrFVal )
-        {
-        User::Leave( KErrArgument );
-        }
-    return hdrVal.StrF().DesC();
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::GetSourceUriL
-// ---------------------------------------------------------
-//
-const TDesC8& CPushMtmFetchOperation::GetSourceUriL
-                                      ( RHTTPTransaction aTransaction )
-    {
-    // TODO if redirected URI exists, how do we get it?
-    // For the moment request URI is used.
-    return aTransaction.Request().URI().UriDes();
-    }
-
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::LogHeadersL
-// ---------------------------------------------------------
-//
-#ifndef __TEST_LOG__
-
-void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders /*aHeaders*/ )
-    {
-    }
-
-#else // #ifdef __TEST_LOG__
-
-void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders aHeaders )
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::LogHeadersL")
-
-    _LIT( KDateFormat, "%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3" );
-
-    PUSHLOG_WRITE("Headers:");
-
-    RStringPool strP = iHttpTrans.Session().StringPool();
-    THTTPHdrFieldIter it = aHeaders.Fields();
-
-    while ( !it.AtEnd() )
-        {
-        RStringTokenF fieldName = it();
-        RStringF fieldNameStr = strP.StringF( fieldName );
-        THTTPHdrVal fieldVal;
-        if ( aHeaders.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
-            {
-            const TInt KMaxLogStrLen = 64;
-            TPtrC8 fieldName8 = fieldNameStr.DesC();
-            TInt fieldNameLen = fieldName8.Length();
-            fieldNameLen = ( KMaxLogStrLen < fieldNameLen ) ? 
-                             KMaxLogStrLen : fieldNameLen;
-            fieldName8.Set( fieldName8.Mid( 0, fieldNameLen ) );
-            HBufC* fieldNameHBufC = HBufC::NewMaxLC( fieldName8.Length() );
-            TPtr fieldName = fieldNameHBufC->Des();
-            fieldName.Copy( fieldName8 );
-
-            switch ( fieldVal.Type() )
-                {
-                case THTTPHdrVal::KTIntVal:
-                    {
-                    PUSHLOG_WRITE_FORMAT2
-                        (" <%S> (%d)",&fieldName,fieldVal.Int())
-                    break;
-                    }
-
-                case THTTPHdrVal::KStrFVal:
-                    {
-                    RStringF fieldValStr = strP.StringF( fieldVal.StrF() );
-                    TPtrC8 fieldVal8 = fieldValStr.DesC();
-                    // Truncate if too long.
-                    TInt fieldValLen = fieldVal8.Length();
-                    fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ? 
-                                     KMaxLogStrLen : fieldValLen;
-                    fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
-                    // Truncate end.
-                    HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
-                    TPtr fieldVal = fieldValHBufC->Des();
-                    fieldVal.Copy( fieldVal8 );
-                    PUSHLOG_WRITE_FORMAT2
-                        (" <%S> (%S)",&fieldName,&fieldVal)
-                    CleanupStack::PopAndDestroy( fieldValHBufC ); 
-                                                // fieldValHBufC
-                    break;
-                    }
-
-                case THTTPHdrVal::KStrVal:
-                    {
-                    RString fieldValStr = strP.String( fieldVal.Str() );
-                    TPtrC8 fieldVal8 = fieldValStr.DesC();
-                    // Truncate if too long.
-                    TInt fieldValLen = fieldVal8.Length();
-                    fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ? 
-                                     KMaxLogStrLen : fieldValLen;
-                    fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
-                    // Truncate end.
-                    HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
-                    TPtr fieldVal = fieldValHBufC->Des();
-                    fieldVal.Copy( fieldVal8 );
-                    PUSHLOG_WRITE_FORMAT2
-                        (" <%S> (%S)",&fieldName,&fieldVal)
-                    CleanupStack::PopAndDestroy( fieldValHBufC ); 
-                                                // fieldValHBufC
-                    break;
-                    }
-
-                case THTTPHdrVal::KDateVal:
-                    {
-                    TDateTime date = fieldVal.DateTime();
-                    TBuf<40> dateTimeString;
-                    TTime t( date );
-                    TRAP_IGNORE( t.FormatL( dateTimeString, KDateFormat ) );
-                    PUSHLOG_WRITE_FORMAT2
-                        (" <%S> (%S)",&fieldName,&dateTimeString)
-                    break;
-                    }
-
-                default:
-                    {
-                    PUSHLOG_WRITE_FORMAT2
-                        (" <%S> unrecognised value type (%d)",
-                           &fieldName,fieldVal.Type())
-                    break;
-                    }
-                }
-
-            // Display realm for WWW-Authenticate header.
-            RStringF wwwAuth = strP.StringF
-                ( HTTP::EWWWAuthenticate, RHTTPSession::GetTable() );
-            if ( fieldNameStr == wwwAuth )
-                {
-                PUSHLOG_WRITE(" fieldNameStr == wwwAuth")
-                // check the auth scheme is 'basic'
-                RStringF basic = strP.StringF
-                    ( HTTP::EBasic, RHTTPSession::GetTable() );
-                RStringF realm = strP.StringF
-                    ( HTTP::ERealm, RHTTPSession::GetTable() );
-                THTTPHdrVal realmVal;
-                if ( ( fieldVal.StrF() == basic ) && 
-                    ( !aHeaders.GetParam( wwwAuth, realm, realmVal ) ) )
-                    {
-                    RStringF realmValStr = strP.StringF( realmVal.StrF() );
-                    PUSHLOG_WRITE_FORMAT(" Realm <%S>",&realmValStr);
-                    }
-                }
-
-            CleanupStack::PopAndDestroy( fieldNameHBufC ); // fieldNameHBufC
-            }
-        ++it;
-        }
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::LogHeadersL")
-    }
-
-#endif // __TEST_LOG__
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::DoCancel
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::DoCancel()
-    {
-    switch ( iState )
-        {
-        /*case EStartConnect:
-            {
-            // Complete ourselves - nothing is outstanding.
-            TRequestStatus* ownStatus = &iStatus;
-            User::RequestComplete( ownStatus, KErrCancel );
-            break;
-            }*/
-
-        /*case EConnect:
-            {
-            //__ASSERT_DEBUG( iConn, ContHandPanic( ECodInternal ) );
-            //iConn->Cancel(); // This will complete our status.
-            break;
-            }*/
-
-        case EStartRequest:
-        case ECheckCache:
-        case ERequest:
-            {
-            delete iCacheSupply;
-            iCacheSupply = NULL;
-
-            iHttpTrans.Close();
-            // Now the transaction has been closed. Closing it does not
-            // complete our status, so we do it manually.
-            TRequestStatus* status = &iStatus;
-            SetActive();
-            User::RequestComplete( status, iResult );
-            break;
-            }
-
-        case EInit:
-        default:
-            {
-            // No requests should be outstanding in these states.
-            //ContHandPanic( ECodInternal );
-            break;
-            }
-        }
-
-    iResult = KErrCancel;
-    Done();
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::RunL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::RunL()
-    {
-    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL status = %d", iState);
-    // Handle errors in RunError().
-    User::LeaveIfError( iStatus.Int() );
-
-    switch ( iState )
-        {
-        case EInit:
-            {
-            InitializeL();
-            break;
-            }
-
-        case EStartRequest:
-            {
-            StartRequestL();
-            break;
-            }
-
-        case ERequest:
-            {
-            RequestL();
-            break;
-            }
-
-        case EDone:
-            {
-            Done();
-            break;
-            }
-
-        default:
-            {
-            // JIC.
-            Done();
-            break;
-            }
-        }
-    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL moving to status = %d", iState);
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::RunError
-// ---------------------------------------------------------
-//
-TInt CPushMtmFetchOperation::RunError( TInt aError )
-    {
-    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunError <%d>",aError)
-
-    iResult = aError;
-    delete iCacheSupply;
-    iCacheSupply = NULL;
-    iHttpTrans.Close();
-    Done();
-
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::MHFRunL
-// ---------------------------------------------------------
-//
-void CPushMtmFetchOperation::MHFRunL
-    ( 
-        RHTTPTransaction DEBUG_ONLY( aTransaction ), 
-        const THTTPEvent& aEvent 
-    )
-    {
-    PUSHLOG_ENTERFN("CPushMtmFetchOperation::MHFRunL")
-    __ASSERT_DEBUG( aTransaction == iHttpTrans, 
-                    ContHandPanic( EPushContHandPanBadTransaction ) );
-    switch ( aEvent.iStatus )
-        {
-        case THTTPEvent::EGotResponseHeaders:
-            {
-            PUSHLOG_WRITE(" EGotResponseHeaders")
-            // pass headers to the cache first
-            TRAP_IGNORE( iCacheSupply->HeadersReceivedL() );
-            // Now we know that the request was processed by the server.
-            HandleResponseHeadersL( iHttpTrans.Response() );
-            break;
-            }
-
-        case THTTPEvent::EGotResponseBodyData:
-            {
-            PUSHLOG_WRITE(" EGotResponseBodyData")
-            // pass chunk to the cache first
-            TRAP_IGNORE( iCacheSupply->BodyReceivedL() );
-            // Get body data and save it.
-            TInt err( KErrNone );
-            MHTTPDataSupplier* body = iHttpTrans.Response().Body();
-            if ( !body )
-                {
-                PUSHLOG_WRITE(" NULL body")
-                }
-            else
-                {
-                TPtrC8 bodyPtr;
-                // Caution: no leaving between body->GetNextDataPart and
-                // body->ReleaseData calls! Data must always be released.
-#ifdef __TEST_LOG__
-                TBool isLast = body->GetNextDataPart( bodyPtr ); // No leave...
-                PUSHLOG_WRITE_FORMAT(" last? (%d)",(isLast?1:0))
-#else // ifndef __TEST_LOG__
-                (void)body->GetNextDataPart( bodyPtr ); // No leave...
-#endif // __TEST_LOG__
-                //if ( iHttpTrans.Request().Method() == StringF( HTTP::EGET ) )
-                err = AppendResponse( bodyPtr );
-                body->ReleaseData();                          // ...until here.
-                PUSHLOG_WRITE_FORMAT(" err: (%d)",err)
-                User::LeaveIfError( err );
-                }
-            break;
-            }
-
-        case THTTPEvent::EResponseComplete:
-            {                  
-            // do not mix it up with the ESucceeded
-            // The transaction's response is complete. An incoming event. 
-            TRAP_IGNORE( iCacheSupply->ResponseCompleteL() );
-            break;
-            }
-
-        case THTTPEvent::ERequestComplete:
-            {
-            // request is all set
-            iCacheSupply->CloseRequest();
-            break;
-            }
-
-        case THTTPEvent::EFailed:
-            {
-            PUSHLOG_WRITE(" EFailed")
-            // Safety code: we should already have an error code.
-            if ( iResult == KErrNone )
-                {
-                iResult = KErrGeneral;
-                }
-            // TODO. Fall through.
-            }
-
-        case THTTPEvent::ESucceeded:
-            {
-            PUSHLOG_WRITE(" ESucceeded")
-            delete iCacheSupply;
-            iCacheSupply = NULL;
-            iHttpTrans.Close();
-            // Transaction is finished, invoke RunL now.
-            TRequestStatus* status = &iStatus;
-            if (!IsActive())
-                {
-                SetActive();
-                }
-            User::RequestComplete( status, iResult );
-            break;
-            }
-
-        case THTTPEvent::ERedirectedPermanently:
-            {
-            PUSHLOG_WRITE(" ERedirectedPermanently")
-            // Do nothing just continue.
-            break;
-            }
-
-        default:
-            {
-            PUSHLOG_WRITE(" default case")
-            // Handle errors in MHFRunError.
-            User::LeaveIfError( aEvent.iStatus );
-            break;
-            }
-        }
-
-    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::MHFRunL")
-    }
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::MHFRunError
-// ---------------------------------------------------------
-//
-TInt CPushMtmFetchOperation::MHFRunError
-    ( 
-        TInt aError, 
-        RHTTPTransaction DEBUG_ONLY( aTransaction ), 
-        const THTTPEvent& /*aEvent*/ 
-    )
-    {
-    __ASSERT_DEBUG( aTransaction == iHttpTrans, 
-                    ContHandPanic( EPushContHandPanBadTransaction ) );
-    iResult = aError;
-    iCacheSupply->CloseRequest();
-    iHttpTrans.Close();
-
-    // Transaction is finished, invoke RunL now. 
-    // iResult contains the (error) code.
-    if ( !IsActive() )
-        {
-	    SetActive();
-        }
-    TRequestStatus* status = &iStatus;
-    User::RequestComplete( status, KErrNone );
-
-    return KErrNone;
-    }
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Declaration of CPushMtmFetchOperation.
-*
-*/
-
-
-
-#ifndef PUSHMTMFETCHOPERATION_H
-#define PUSHMTMFETCHOPERATION_H
-
-// INCLUDE FILES
-
-#include <e32std.h>
-#include <e32base.h>
-#include <http.h>
-#include <stringpool.h>
-#include <apmstd.h>
-#include <es_sock.h>
-#include "httpcachemanager.h"
-#include "PushMtmCacheSupply.h"
-
-// FORWARD DECLARATIONS
-
-class CMsvEntry;
-
-// CLASS DECLARATION
-
-/**
-* Asynchronous fetch operation that downloads the service indicated by an SL 
-* pushed service message.
-* 
-* The operation can run in silent mode without requiring any user intervention.
-*/
-class CPushMtmFetchOperation : public CActive, 
-                               public MHTTPTransactionCallback,
-                               public MCacheSupplyCallbacks
-    {
-    public: // Constructors and destructor
-
-        /**
-        * Two-phased constructor. Leaves on failure.
-        * @param aRequestedUrl The requested URL.
-        * @param aObserverRequestStatus Observer's status.
-        * @return The constructed operation.
-        */
-        static CPushMtmFetchOperation* NewL
-            (
-                const TDesC& aRequestedUrl, 
-                TRequestStatus& aObserverRequestStatus 
-            );
-
-        /**
-        * Destructor.
-        */
-        virtual ~CPushMtmFetchOperation();
-
-    public: // Functions from base classes
-
-        /**
-        * Start or restart the operation.
-        */
-        void StartL();
-
-        RHTTPTransaction* Transaction(){ return &iHttpTrans; }
-        void HandleEventL(THTTPEvent aEvent) { MHFRunL(iHttpTrans, aEvent); }
-
-    protected: // Constructors
-
-        /**
-        * Constructor.
-        * @param aObserverRequestStatus Observer's status.
-        */
-        CPushMtmFetchOperation( TRequestStatus& aObserverRequestStatus );
-
-        /**
-        * Second phase constructor.
-        * @param aRequestedUrl The requested URL.
-        * @return None.
-        */
-        void ConstructL( const TDesC& aRequestedUrl );
-
-    protected: // New functions
-
-        /**
-        * Get the ID of the defauld internet access point set in the Browser 
-        * Preferences that is used for connection creation.
-        * @param aIapId The ID of the access point, if found. The value of 
-        *        this variable is not changed if no default ap can be found.
-        * @return Indicate if default ap could be found.
-        */
-        TBool GetDefaultInetAccessPointL( TUint32& aIapId ) const;
-
-    protected:    // state machine parts
-
-        /**
-        * Initiate connecting.
-        */
-        void InitializeL();
-
-        /**
-        * StartRequestL
-        */
-        void StartRequestL();
-
-        /**
-        * CheckCacheL
-        */
-        void CheckCacheL();
-
-        /**
-        * Initiate connecting.
-        */
-        void RequestL();
-
-        /**
-        * Clean up and notify parent.
-        */
-        void Done();
-
-        /**
-        * Create transaction, set request headers (and body for POST request).
-        */
-        void CreateTransactionL();
-
-        /**
-        * Submit the transaction (make the HTTP request).
-        */
-        void SubmitTransactionL();
-
-        /**
-        * Handle response from server.
-        * @param aResponse Response from server.
-        */
-        void HandleResponseHeadersL( RHTTPResponse aResponse );
-
-        /**
-        * HTTP Version Not Supported. Resubmit transaction using HTTP/1.0.
-        * @return ETrue if transaction was resubmitted, EFalse if not (i.e
-        * we already use HTTP/1.0).
-        */
-        TBool VersionRetryL();
-
-        /**
-        * Append a new chunk of response data to the reponse buffer.
-        * @return KErrNone or KErrNoMemory.
-        */
-        TInt AppendResponse( const TDesC8& aDataChunk );
-
-    protected:    // helpers
-
-        /**
-        * Helper function to set a header.
-        * @param aHeaders Set the header to this header set.
-        * @param aHdrField Header field name.
-        * @param aHdrValue Header value.
-        */
-        void SetHeaderL
-            (
-            RHTTPHeaders aHeaders,
-            HTTP::TStrings aHdrField,
-            const TDesC8& aHdrValue
-            );
-
-        /**
-        * Helper function to set a header.
-        * @param aHeaders Set the header to this header set.
-        * @param aHdrField Header field name.
-        * @param aHdrValue Header value.
-        */
-        void SetHeaderL
-            (
-            RHTTPHeaders aHeaders,
-            HTTP::TStrings aHdrField,
-            HTTP::TStrings aHdrValue
-            );
-
-        /**
-        * Helper function to set a header.
-        * @param aHeaders Set the header to this header set.
-        * @param aHdrField Header field name.
-        * @param aHdrValue Header value.
-        */
-        void SetHeaderL
-            (
-            RHTTPHeaders aHeaders,
-            HTTP::TStrings aHdrField,
-            const RStringF aHdrValue
-            );
-
-        /**
-        * Helper function to get the Content-Type header value.
-        * @param aHeaders HTTP header set.
-        * @return Content-Type header value.
-        */
-        const TDesC8& GetContentTypeL( RHTTPHeaders aHeaders );
-
-        /**
-        * Helper function to get the source URI of a transaction.
-        * @param aTransaction Transaction.
-        * @return Source URI.
-        */
-        const TDesC8& GetSourceUriL( RHTTPTransaction aTransaction );
-
-        /**
-        * Get a shared string from the session stringpool.
-        * @param aId Id of string.
-        * @return Shared string from HTTP string table. No need to close.
-        */
-        inline RStringF StringF( HTTP::TStrings aId );
-
-    protected:    // debug utilities
-
-        /**
-        * In debug build, log headers. In release build, do nothing.
-        * @param aHeaders Headers to log.
-        */
-        void LogHeadersL( RHTTPHeaders aHeaders );
-
-    protected: // Functions from base classes
-
-        /**
-        * Cancel fetching.
-        * @return None.
-        */
-        void DoCancel();
-
-        /**
-        * Start fetching and make an entry into the operation mapper.
-        * @return None.
-        */
-        void RunL();
-
-        /**
-        * Leave handler protocol implementation: it is called when 
-        * RunL leaves.
-        */
-        TInt RunError( TInt aError );
-
-    protected:  // from MHTTPTransactionCallback
-
-        /**
-        * Handle transaction event.
-        * @param aTransaction The transaction that the event has occurred on.
-        * @param aEvent The event that has occurred.
-        */
-        void MHFRunL( RHTTPTransaction aTransaction, 
-                      const THTTPEvent& aEvent );
-
-        /**
-        * Handle errors occured in MHFRunL().
-        * @param aError The leave code that RunL left with.
-        * @param aTransaction The transaction that was being processed.
-        * @param aEvent The Event that was being processed.
-        * @return KErrNone.
-        */
-        TInt MHFRunError( TInt aError, 
-                          RHTTPTransaction aTransaction, 
-                          const THTTPEvent& aEvent );
-
-    protected: // Data
-
-        TRequestStatus& iObserver;  ///< Observer's status.
-        HBufC8* iRequestedUrl;      ///< Request URI or NULL. Owned.
-
-        enum TState         ///< State.
-            {
-            EInit,          ///< Initial state.
-            EStartRequest,  ///< Create HTTP session & request
-            ECheckCache,    ///< Check if content is in cache
-            ERequest,       ///< HTTP request.
-            EDone
-            };
-
-        TState iState;              ///< Current state.
-        TInt iResult;               ///< Resulting error code.
-
-        RSocketServ iSockServ;      ///< Socket Server session handle.
-        RConnection iConn;          ///< Connection handle.
-
-        CHttpCacheManager* iCacheMgr;///< Cache Manager. Owned.
-
-        RHTTPSession iHttpSess;     ///< HTTP session. Owned.
-        RHTTPTransaction iHttpTrans;///< Transaction. Owned.
-
-        HBufC8* iSourceUri;         ///< Source URI. Owned.
-        HBufC8* iBody;              ///< Response body. Owned.
-        TDataType iDataType;        ///< Data type.
-        THttpCacheEntry iCacheEntry;///< Holds the cache entry
-        CPushMtmCacheSupply* iCacheSupply;
-        TBool iCachedResponse;
-    };
-
-#include "PushMtmFetchOperation.inl"
-
-#endif // PUSHMTMFETCHOPERATION_H
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/PushMtmFetchOperation.inl	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Inline method definitions of class CPushMtmFetchOperation.
-*
-*/
-
-
-
-#ifndef PUSHMTMFETCHOPERATION_INL
-#define PUSHMTMFETCHOPERATION_INL
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CPushMtmFetchOperation::StringF
-// ---------------------------------------------------------
-//
-RStringF CPushMtmFetchOperation::StringF( HTTP::TStrings aId )
-    {
-    return iHttpSess.StringPool().StringF( aId, RHTTPSession::GetTable() );
-    }
-
-#endif /* def PUSHMTMFETCHOPERATION_INL */
-
--- a/pushmtm/Plugins/PushContentHandler/StringResourceReader.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Implementation of CStringResourceReader
-*
-*
-*/
-
-
-// INCLUDE FILES
-
-#include "StringResourceReader.h"
-#include <f32file.h>
-#include <barsread.h>
-#include <bautils.h>
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CStringResourceReader::CStringResourceReader
-// ---------------------------------------------------------
-//
-CStringResourceReader::CStringResourceReader
-    ( RFs& aFs, const TDesC& aRscFileWithPathAndDrive )
-:   CBase(), iFs( aFs ), iInitialized( EFalse )
-    {
-    iRscFileName.Copy( aRscFileWithPathAndDrive );
-    }
-
-// ---------------------------------------------------------
-// CStringResourceReader::~CStringResourceReader
-// ---------------------------------------------------------
-//
-CStringResourceReader::~CStringResourceReader()
-    {
-    iResourceFile.Close();
-    }
-
-// ---------------------------------------------------------
-// CStringResourceReader::AllocReadResourceL
-// ---------------------------------------------------------
-//
-HBufC* CStringResourceReader::AllocReadResourceL( TInt aResId )
-    {
-    InitializeL();
-    //
-    HBufC8* buf8 = iResourceFile.AllocReadLC( aResId );
-#ifdef _UNICODE
-    const TPtrC buf( (const TUint16*)buf8->Ptr(), buf8->Size()/2 );
-#else
-    const TPtrC buf( buf8->Ptr(), buf8->Size() );
-#endif
-    HBufC* retBuf = buf.AllocL();
-    CleanupStack::PopAndDestroy( buf8 );
-
-    return retBuf;
-    }
-
-// ---------------------------------------------------------
-// CStringResourceReader::AllocReadResourceLC
-// ---------------------------------------------------------
-//
-HBufC* CStringResourceReader::AllocReadResourceLC( TInt aResId )
-    {
-    HBufC* temp = AllocReadResourceL( aResId );
-    CleanupStack::PushL( temp );
-    return temp;
-    }
-
-// ---------------------------------------------------------
-// CStringResourceReader::InitializeL
-// ---------------------------------------------------------
-//
-void CStringResourceReader::InitializeL()
-    {
-    if ( !iInitialized )
-        {
-        TFileName resourceFileName( iRscFileName );
-        BaflUtils::NearestLanguageFile( iFs, resourceFileName );
-        iResourceFile.OpenL( iFs, resourceFileName );
-        iResourceFile.ConfirmSignatureL( iResourceFile.SignatureL() );
-        iInitialized = ETrue;
-        }
-    }
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/StringResourceReader.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*      Declaration of CStringResourceReader.
-*      
-*
-*/
-
-
-#ifndef STRINGRESOURCEREADER_H
-#define STRINGRESOURCEREADER_H
-
-// INCLUDE FILES
-
-#include <e32base.h>
-#include <e32std.h>
-#include <barsc.h>
-
-// FORWARD DECLARATIONS
-
-class RFs;
-
-// CLASS DECLARATION
-
-/**
-* Utility class that helps reading string resources without CONE.
-* Not intended for derivation.
-*/
-class CStringResourceReader : public CBase
-    {
-    public: // Constructors and destructor
-
-        CStringResourceReader( RFs& aFs, const TDesC& aRscFileWithPathAndDrive );
-
-        ~CStringResourceReader();
-
-    public: // New functions
-
-        /**
-        * Return a given string from resource.
-        * @param aResId Resource ID.
-        * @return See above.
-        */
-        HBufC* AllocReadResourceL( TInt aResId );
-        HBufC* AllocReadResourceLC( TInt aResId );
-
-    private: // New functions
-
-        void InitializeL();
-
-    private: // Data members
-
-        RFs& iFs;                ///< File server session.
-        TBuf<64> iRscFileName;
-        RResourceFile iResourceFile;
-        TBool iInitialized;
-    };
-
-#endif // STRINGRESOURCEREADER_H
-
-// End of file.
--- a/pushmtm/Plugins/PushContentHandler/si_dict.c	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +0,0 @@
-/*
-* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * Dictionary = SI
- * Public id = 5
- * Doc Type = -//WAPFORUM//DTD SI 1.0//EN
- */
-
-#include "si_dict.h"
-
-
-static const NW_Ucs2 NW_SI_ElementTag_si[] = {'s','i','\0'};
-static const NW_Ucs2 NW_SI_ElementTag_indication[] = {'i','n','d','i','c','a','t','i','o','n','\0'};
-static const NW_Ucs2 NW_SI_ElementTag_info[] = {'i','n','f','o','\0'};
-static const NW_Ucs2 NW_SI_ElementTag_item[] = {'i','t','e','m','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * tag entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SI_tag_token_0[4] = {
-	{0x05, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_si},
-	{0x06, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_indication},
-	{0x07, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_info},
-	{0x08, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_item}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * tag entries - sorted by name
- */
-static const
-NW_Byte NW_SI_tag_name_0[4] = {
-	1,
-	2,
-	3,
-	0,
-};
-
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_none[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','n','o','n','e','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_low[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','l','o','w','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_medium[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','m','e','d','i','u','m','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_signal_high[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','h','i','g','h','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action_delete[] = {'a','c','t','i','o','n','=','d','e','l','e','t','e','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_created[] = {'c','r','e','a','t','e','d','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href[] = {'h','r','e','f','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_si_expires[] = {'s','i','-','e','x','p','i','r','e','s','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_si_id[] = {'s','i','-','i','d','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_class[] = {'c','l','a','s','s','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
-static const NW_Ucs2 NW_SI_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * attribute entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SI_attribute_token_0[19] = {
-	{0x05, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_none},
-	{0x06, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_low},
-	{0x07, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_medium},
-	{0x08, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_high},
-	{0x09, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_delete},
-	{0x0a, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_created},
-	{0x0b, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href},
-	{0x0c, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___},
-	{0x0d, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___www_},
-	{0x0e, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___},
-	{0x0f, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___www_},
-	{0x10, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_expires},
-	{0x11, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_id},
-	{0x12, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_class},
-	{0x13, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action},
-	{0x85, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__com_},
-	{0x86, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__edu_},
-	{0x87, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__net_},
-	{0x88, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__org_}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-/*
- * attribute entries - sorted by name
- */
-static const
-NW_Byte NW_SI_attribute_name_0[19] = {
-	15,
-	16,
-	17,
-	18,
-	14,
-	4,
-	3,
-	1,
-	2,
-	0,
-	13,
-	5,
-	6,
-	7,
-	8,
-	9,
-	10,
-	11,
-	12,
-};
-
-/*
- * Tag codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SI_tag_codepages[1] = {
-	{4, (NW_WBXML_DictEntry_t*)&NW_SI_tag_token_0[0], (NW_Byte *)&NW_SI_tag_name_0[0]},
-};
-
-/*
- * Attribute codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SI_attribute_codepages[1] = {
-	{19, (NW_WBXML_DictEntry_t*)&NW_SI_attribute_token_0[0], (NW_Byte *)&NW_SI_attribute_name_0[0]},
-};
-
-static const NW_Ucs2 NW_SI_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','I',' ','1','.','0','/','/','E','N','\0'};
-
-/*
- * Dictionary
- */
-const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary = {
-	NW_SI_PublicId,
-	(NW_Ucs2 *)NW_SI_docType,
-	1, (NW_WBXML_Codepage_t*)&NW_SI_tag_codepages[0],
-	1, (NW_WBXML_Codepage_t*)&NW_SI_attribute_codepages[0],
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
--- a/pushmtm/Plugins/PushContentHandler/si_dict.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/*
-* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-#ifndef HEADER_GUARD_si_dict_h
-#define HEADER_GUARD_si_dict_h
-
-
-#include <nw_wbxml_dictionary.h>
-
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-#define NW_SI_PublicId 5
-
-typedef enum NW_SI_ElementToken_0_e{
-	NW_SI_ElementToken_si = 0x0005,
-	NW_SI_ElementToken_indication = 0x0006,
-	NW_SI_ElementToken_info = 0x0007,
-	NW_SI_ElementToken_item = 0x0008
-}NW_SI_ElementToken_0_t;
-
-
-typedef enum NW_SI_AttributeToken_0_e{
-	NW_SI_AttributeToken_action_signal_none = 0x0005,
-	NW_SI_AttributeToken_action_signal_low = 0x0006,
-	NW_SI_AttributeToken_action_signal_medium = 0x0007,
-	NW_SI_AttributeToken_action_signal_high = 0x0008,
-	NW_SI_AttributeToken_action_delete = 0x0009,
-	NW_SI_AttributeToken_created = 0x000a,
-	NW_SI_AttributeToken_href = 0x000b,
-	NW_SI_AttributeToken_href_http___ = 0x000c,
-	NW_SI_AttributeToken_href_http___www_ = 0x000d,
-	NW_SI_AttributeToken_href_https___ = 0x000e,
-	NW_SI_AttributeToken_href_https___www_ = 0x000f,
-	NW_SI_AttributeToken_si_expires = 0x0010,
-	NW_SI_AttributeToken_si_id = 0x0011,
-	NW_SI_AttributeToken_class = 0x0012,
-	NW_SI_AttributeToken_action = 0x0013,
-	NW_SI_AttributeToken__com_ = 0x0085,
-	NW_SI_AttributeToken__edu_ = 0x0086,
-	NW_SI_AttributeToken__net_ = 0x0087,
-	NW_SI_AttributeToken__org_ = 0x0088
-}NW_SI_AttributeToken_0_t;
-
-extern const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary;
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Fri Sep 26 19:53:43 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator si.dict si_dict.c si_dict.h
-*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
--- a/pushmtm/Plugins/PushContentHandler/sl_dict.c	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,198 +0,0 @@
-/*
-* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * Dictionary = SL
- * Public id = 6
- * Doc Type = -//WAPFORUM//DTD SL 1.0//EN
- */
-
-#include "sl_dict.h"
-
-
-static const NW_Ucs2 NW_SL_ElementTag_sl[] = {'s','l','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * tag entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SL_tag_token_0[1] = {
-	{0x05, (NW_String_UCS2Buff_t *) NW_SL_ElementTag_sl}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * tag entries - sorted by name
- */
-static const
-NW_Byte NW_SL_tag_name_0[1] = {
-	0,
-};
-
-static const NW_Ucs2 NW_SL_AttributeTag_action_execute_low[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','l','o','w','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_action_execute_high[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','h','i','g','h','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_action_cache[] = {'a','c','t','i','o','n','=','c','a','c','h','e','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href[] = {'h','r','e','f','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
-static const NW_Ucs2 NW_SL_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * attribute entries - sorted by token
- */
-static const
-NW_WBXML_DictEntry_t NW_SL_attribute_token_0[13] = {
-	{0x05, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_low},
-	{0x06, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_high},
-	{0x07, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_cache},
-	{0x08, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href},
-	{0x09, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___},
-	{0x0a, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___www_},
-	{0x0b, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___},
-	{0x0c, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___www_},
-	{0x0d, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action},
-	{0x85, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__com_},
-	{0x86, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__edu_},
-	{0x87, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__net_},
-	{0x88, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__org_}
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-/*
- * attribute entries - sorted by name
- */
-static const
-NW_Byte NW_SL_attribute_name_0[13] = {
-	9,
-	10,
-	11,
-	12,
-	8,
-	2,
-	1,
-	0,
-	3,
-	4,
-	5,
-	6,
-	7,
-};
-
-/*
- * Tag codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SL_tag_codepages[1] = {
-	{1, (NW_WBXML_DictEntry_t*)&NW_SL_tag_token_0[0], (NW_Byte *)&NW_SL_tag_name_0[0]},
-};
-
-/*
- * Attribute codepage table
- */
-static const
-NW_WBXML_Codepage_t NW_SL_attribute_codepages[1] = {
-	{13, (NW_WBXML_DictEntry_t*)&NW_SL_attribute_token_0[0], (NW_Byte *)&NW_SL_attribute_name_0[0]},
-};
-
-static const NW_Ucs2 NW_SL_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','L',' ','1','.','0','/','/','E','N','\0'};
-
-/*
- * Dictionary
- */
-const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary = {
-	NW_SL_PublicId,
-	(NW_Ucs2 *)NW_SL_docType,
-	1, (NW_WBXML_Codepage_t*)&NW_SL_tag_codepages[0],
-	1, (NW_WBXML_Codepage_t*)&NW_SL_attribute_codepages[0],
-};
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
--- a/pushmtm/Plugins/PushContentHandler/sl_dict.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
-* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-#ifndef HEADER_GUARD_sl_dict_h
-#define HEADER_GUARD_sl_dict_h
-
-#include <nw_wbxml_dictionary.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-
-#define NW_SL_PublicId 6
-
-typedef enum NW_SL_ElementToken_0_e{
-	NW_SL_ElementToken_sl = 0x0005
-}NW_SL_ElementToken_0_t;
-
-
-typedef enum NW_SL_AttributeToken_0_e{
-	NW_SL_AttributeToken_action_execute_low = 0x0005,
-	NW_SL_AttributeToken_action_execute_high = 0x0006,
-	NW_SL_AttributeToken_action_cache = 0x0007,
-	NW_SL_AttributeToken_href = 0x0008,
-	NW_SL_AttributeToken_href_http___ = 0x0009,
-	NW_SL_AttributeToken_href_http___www_ = 0x000a,
-	NW_SL_AttributeToken_href_https___ = 0x000b,
-	NW_SL_AttributeToken_href_https___www_ = 0x000c,
-	NW_SL_AttributeToken_action = 0x000d,
-	NW_SL_AttributeToken__com_ = 0x0085,
-	NW_SL_AttributeToken__edu_ = 0x0086,
-	NW_SL_AttributeToken__net_ = 0x0087,
-	NW_SL_AttributeToken__org_ = 0x0088
-}NW_SL_AttributeToken_0_t;
-
-extern const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary;
-
-/*
-** WARNING
-**
-** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
-**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
-**
-** This file generated on Tue Sep 30 14:30:25 2003
-**                        (coordinated universal time)
-**
-** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
-*/
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapter.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Handles white list settings in provisioning.
-*
-*/
-
-
-#ifndef WHITELISTADAPTER_H
-#define WHITELISTADAPTER_H
-
-// INCLUDE FILES
-	// User includes
-#include "WhiteListAdapterDef.h"
-	// System includes
-#include <CWPAdapter.h>
-#include <msvapi.h>
-#include <MWPContextExtension.h>
-
-// FORWARD DECLARATIONS
-
-class CPushMtmSettings;
-class CWPCharacteristic;
-class CWPParameter;
-class MWPPairVisitor;
-class TWhiteListAdapterItem;
-
-// CLASS DECLARATION
-
-/**
-* An ECOM adapter plug-in. It is responsible for maintaining data in a
-* WAP Provisioning pushed message : we get appropriate physical proxy
-* addresses from the message and store them in Push MTM settings. It is the
-* Push Content Handler that will use these addresses to filter out
-* unauthorized pushed SL messages.
-* Note : although an adapter should always be prepared for displaying the
-* processed and stored settings in the appropriate format, the stored items
-* in this specific adapter will _never_ be displayed. Thus, ItemCount,
-* SummaryTitle and SummaryText methods have been written considering this
-* approach.
-*/
-class CWhiteListAdapter : public CWPAdapter, 
-                          public MMsvSessionObserver, 
-                          public MWPContextExtension
-	{
-	public :	// construction, destruction
-		/**
-		* Two-phased constructor.
-		*/
-		static CWhiteListAdapter* NewL();
-
-		/**
-		* Destructor.
-		*/
-		~CWhiteListAdapter();
-
-	public :	// from CWPAdapter
-
-        /**
-		* Check the number of settings items.
-		* @see CWPAdapter
-		*/
-		/*virtual*/ TInt ItemCount() const;
-
-		/**
-		* Returns the title of the nth summary line. 
-		* @see CWPAdapter
-		*/
-		/*virtual*/ const TDesC16& SummaryTitle( TInt aIndex ) const;
-		
-		/**
-		* Returns the text of the nth summary line. 
-		* @see CWPAdapter
-		*/
-		/*virtual*/ const TDesC16& SummaryText( TInt aIndex ) const;
-		
-		/**
-		* Saves one setting handled by the adapter.
-		* @see CWPAdapter
-		*/
-		/*virtual*/ void SaveL( TInt aItem );
-
-		/**
-		* Returns ETrue if the adapter can set the settings as default.
-		* @see CWPAdapter
-		*/
-		/*virtual*/ TBool CanSetAsDefault( TInt aItem ) const;
-
-		/**
-		* Adapter sets the settings as default.
-		* @see CWPAdapter
-		*/
-		/*virtual*/ void SetAsDefaultL( TInt aItem );
-
-		/**
-		* Calls the pair visitor for each detail line of an item.
-		* @see CWPAdapter
-		*/
-		/*virtual*/ TInt DetailsL( TInt aItem, MWPPairVisitor& aVisitor );
-
-        /**
-        * Returns a pointer to a context extension.
-        * @param aExtension 
-        *        Contains a pointer to MWPContextExtension if supported.
-        * @return KErrNotSupported if not supported, KErrNone otherwise
-        */
-        /*virtual*/ TInt ContextExtension( MWPContextExtension*& aExtension );
-
-    public: // From MWPVisitor (inheritance is through CWPAdapter)
-
-        /**
-		* Called for each characteristic found.
-		* @see MWPVisitor
-		*/
-		/*virtual*/ void VisitL( CWPCharacteristic& aCharacteristic );
-		
-		/**
-		* Called for each parameter found.
-		* @see MWPVisitor
-		*/
-		/*virtual*/ void VisitL( CWPParameter& aParameter );
-
-		/**
-		* Called for each link to a logical proxy or access point.
-		* @see MWPVisitor
-		*/
-		/*virtual*/ void VisitLinkL( CWPCharacteristic& aCharacteristic );
-
-	public :	// from MMsvSessionObserver
-		/**
-		* Indicates an event has occurred.
-		* @see MMsvSessionObserver
-		*/
-		/*virtual*/ void HandleSessionEventL( TMsvSessionEvent aEvent,
-											TAny* aArg1,
-											TAny* aArg2,
-											TAny* aArg3 );
-
-	private :	// construction
-		/**
-		* Constructor.
-		*/
-		CWhiteListAdapter();
-
-		/**
-		* Second-phase constructor.
-		*/
-		void ConstructL();
-
-	private :	// internal new methods
-		/**
-		* This method is for interpreting a string as push support.
-		* If the value of the string is '1', then push is enabled,
-		* if it's equal to '0', then push is disabled, otherwise the proxy
-		* does not care of push.
-		* @param aPushSupport String to be processed.
-		* @return TPushSupport enumeration value.
-		*/
-		TPushSupport ResolvePushSupport( const TDesC& aPushSupport );
-
-    private: // From MWPContextExtension
-
-        /**
-        * Returns the data used for saving.
-        * @param aIndex The index of the data
-        * @return The data. Ownership is transferred.
-        */
-        const TDesC8& SaveDataL( TInt aIndex ) const;
-
-        /**
-        * Deletes a saved item.
-        * @param aSaveData The data used for saving
-        */
-        void DeleteL( const TDesC8& aSaveData );
-
-        /**
-        * Returns the UID of the adapter.
-        * @return UID
-        */
-        TUint32 Uid() const;
-
-	private :	// data members
-
-        RPointerArray<TWhiteListAdapterItem> iItems;	///< Physical proxies
-
-        /**
-        * These items are parts of the current logical proxy and have not
-        * been added to the final item array (i.e. iItems array), because
-        * further processing is needed.
-        */
-        RPointerArray<TWhiteListAdapterItem> iItemsToBeAdded;
-
-		TPushSupport iLogicalProxyPushSupport;
-
-		TBool iPhysicalProxyIsVisited;			///< In order to differentiate
-												///< if we are visiting a
-												///< ph. or a log. proxy
-
-		TWhiteListAdapterItem* iCurrentItem;	///< Current physical proxy.
-												///< Has.
-
-		CMsvSession* iMsvSession;				///< Session to the Message
-												///< Server. Has.
-		CPushMtmSettings* iPushMtmSettings;		///< Push MTM Settings object.
-												///< Has.
-	};
-
-#endif	// WHITELISTADAPTER_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterDef.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Common constants for the White List Adapter plug-in.
-*
-*/
-
-
-
-#ifndef WHITELISTADAPTERDEF_H
-#define WHITELISTADAPTERDEF_H
-
-// DATA TYPES
-
-enum TPushSupport
-	{
-	EPushEnabled,	///< Explicitly set to enabled
-	EPushDisabled,	///< Explicitly set to disabled
-	EPushDontCare	///< Has not been set
-	};
-
-#endif	// WHITELISTADAPTERDEF_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterItem.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Class the represents a physical proxy (in context of WAP Provisioning).
-*
-*/
-
-
-#ifndef WHITELISTADAPTERITEM_H
-#define WHITELISTADAPTERITEM_H
-
-// INCLUDE FILES
-
-	// User includes
-#include "PushInitiator.h"
-#include "WhiteListAdapterDef.h"
-	// System includes
-#include <e32std.h>
-
-// CLASS DECLARATION
-
-/**
-* This class encapsulates a proxy item found in a WAP Provisioning document.
-* It is designed for describing a particular White List address.
-*/
-class TWhiteListAdapterItem
-	{
-	public :	// construction, destruction
-		/**
-		* Default constructor.
-		*/
-		TWhiteListAdapterItem();
-
-	public :	// getter/setter methods
-		/**
-		* Use this method to get the address.
-		* @return The stored proxy address.
-		*/
-		const TDesC& Address() const;
-
-		/**
-		* Use this method to get the address type.
-		* @return The type of the stored proxy address.
-		*/
-		CPushInitiator::TAddrType AddressType() const;
-
-        /**
-        * Tells the ID of the item.
-        * @return Item ID.
-        */
-        TUint32 Id() const;
-
-        /**
-        * Tells the ID of the item in a buffer.
-        * @return Item ID in a buffer.
-        */
-        const TDesC8& IdBuf() const;
-
-        /**
-        * Tells the push support.
-        * @return Push support.
-        */
-        TPushSupport PushSupport() const;
-
-		/**
-		* Sets the address.
-		* @param aAddress The proxy address to be set.
-		*/
-		void SetAddress( const TDesC& aAddress );
-
-		/**
-		* Sets the address type.
-		* @param aAddressType The proxy address type to be set.
-		*/
-		void SetAddressType( const TDesC& aAddressType );
-
-		/**
-		* Sets the ID of the item.
-		* @param aID The ID.
-		*/
-        void SetId( TUint32 aId );
-
-        /**
-		* Sets the physical proxy ID.
-		* @param aProxyId The physical proxy identifier to be set.
-		*/
-		void SetProxyId( const TDesC& aProxyId );
-
-		/**
-		* Sets whether or not the proxy address is push enabled.
-		* @param aPushEnabled If the value is 1, then push is enabled,
-		* otherwise (i.e. when the value is 0) the push is disabled.
-		*/
-		void SetPushSupport( TPushSupport aPushSupport );
-
-	public :	// other public methods
-
-        /**
-		* Tells whether the freshly initialized adapter item contains
-		* information about a valid proxy address. The proxy address is
-		* invalid if either it is not type of the correct address type
-		* or the proxy server is not push enabled.
-		* @return ETrue if the proxy address is valid, EFalse otherwise.
-		*/
-		TBool Valid() const;
-
-	private :	// data members
-
-        TPtrC iAddress;				///< Physical proxy gateway address
-
-		CPushInitiator::TAddrType iAddressType;
-
-        /// ID of the item after it has been added to MTM Settings.
-        TUint32 iId;
-        /// ID of the item packaged into a buffer pointer.
-        TPckgC<TUint32> iIdBufPtr;
-
-		TPtrC iProxyId;				///< Proxy identifier (or name)
-
-		TPushSupport iPushSupport;
-	};
-
-#endif	// WHITELISTADAPTERITEM_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*      Logging macros for White List Adapter.
-*      
-*
-*/
-
-
-#ifndef WHITELISTADAPTER_LOGGER_H
-#define WHITELISTADAPTER_LOGGER_H
-
-// INCLUDES
-
-#include <e32std.h>
-#include <e32def.h>
-#include <flogger.h>
-
-// TYPES
-
-enum TWhiteListAdapterLogMask       ///< Log mask bits.
-    {
-    ELogOff         = 0x00000000,   ///< Don't log.
-    ELogBasic       = 0x00000001,   ///< Log only basic activities.
-    ELogDetailed    = 0x00000002,   ///< Detailed activities use this mask.
-    ELogAll         = 0xFFFFFFFF    ///< Log all.
-    };
-
-// MACROS
-
-// Determines what to log. Construct this from TWhiteListAdapterLogMask values.
-#define WHITELISTADAPTER_LOG_MASK ELogAll
-/// Determines log detail (0==basic level).
-#define WHITELISTADAPTER_LOG_LEVEL 5
-
-// CLASS DECLARATION
-
-/**
-* Logger class.
-*/
-class WhiteListAdapterLogger
-    {
-    public:     // new methods
-
-    /**
-    * Write formatted log.
-    * @param aMask Log mask.
-    * @param aLevel Log level.
-    * @param aFmt Format string.
-    */
-    static void Write
-        ( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... );
-
-    /**
-    * Write formatted log.
-    * @param aMask Log mask.
-    * @param aLevel Log level.
-    * @param aFmt Format string.
-    * @param aList Variable argument list.
-    */
-    static void Write
-        (
-        TInt32 aMask,
-        TInt aLevel,
-        TRefByValue<const TDesC16> aFmt,
-        VA_LIST& aList
-        );
-
-    /**
-    * Write formatted log.
-    * @param aMask Log mask.
-    * @param aLevel Log level.
-    * @param aFmt Format string.
-    */
-    static void Write
-        ( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... );
-
-    /**
-    * Write formatted log.
-    * @param aMask Log mask.
-    * @param aLevel Log level.
-    * @param aFmt Format string.
-    * @param aList Variable argument list.
-    */
-    static void Write
-        (
-        TInt32 aMask,
-        TInt aLevel,
-        TRefByValue<const TDesC8> aFmt,
-        VA_LIST& aList
-        );
-
-    /**
-    * Write hex dump.
-    * @param aMask Log mask.
-    * @param aLevel Log level.
-    * @param aHeader Header string.
-    * @param aMargin Margin.
-    * @param aPtr Data.
-    * @param aLen Data length.
-    */
-    static void HexDump
-        (
-        TInt32 aMask,
-        TInt aLevel, 
-        const TText* aHeader,
-        const TText* aMargin,
-        const TUint8* aPtr,
-        TInt aLen
-        );
-    };
-
-#ifdef __TEST_WHITELISTADAPTER_LOG__
-
-    /// Write formatted to log.
-    #define CLOG( body ) WhiteListAdapterLogger::Write body
-    /// Write hex dump.
-    #define CDUMP( body ) WhiteListAdapterLogger::HexDump body
-    /// Guard "log-only" argument name with this (expands to argument).
-    #define LOG_ONLY( argName ) argName
-
-#else /* not defined __TEST_WHITELISTADAPTER_LOG__ */
-
-    /// Do nothing (log disabled).
-    #define CLOG( body )
-    /// Do nothing (log disabled).
-    #define CDUMP( body )
-    /// Guard "log-only" argument name with this (expands to nothing).
-    #define LOG_ONLY( argName )
-
-
-#endif /* def __TEST_WHITELISTADAPTER_LOG__ */
-
-#endif /* def WHITELISTADAPTER_LOGGER_H */
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterPanic.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Panic handling for white list management.
-*
-*/
-
-
-#ifndef WHITELISTADAPTERPANIC_H
-#define WHITELISTADAPTERPANIC_H
-
-// INCLUDE FILES
-	// System includes
-#include <e32def.h>
-
-// DATA TYPES
-
-enum TWhiteListAdapterPanics
-	{
-	ENoItemsToBeDisplayed,	///< A UI control tries to display items
-	EArrayIndexOutOfBounds,	///< Self-explanatory
-	ENullProxy				///< Physicial proxy cannot be found
-	};
-
-// FUNCTION PROTOTYPES
-
-/**
-* Panic handling in White List Adapter module. It's role is centralizing
-* panics.
-* @param aPanic Panic code, defined in THermesProtocolPanic.
-*/
-void Panic( TInt aPanic );
-
-
-#endif	// WHITELISTADAPTERPANIC_H
-
-// End of file
\ No newline at end of file
--- a/pushmtm/Plugins/WhiteListAdapterInc/WhiteListAdapterUids.h	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  UID definitions for the White List Adapter plug-in.
-*
-*/
-
-
-
-#ifndef WHITELISTADAPTERUIDS_H
-#define WHITELISTADAPTERUIDS_H
-
-// ================= UIDs ======================
-
-/// DLL UID
-#define KWhiteListAdapterDllUid 0x10008D3E
-
-// ECOM DLL implementation UID - White List Adapter
-#define KWhiteListAdapterImplementationUid 0x101F85EF
-
-// ECOM DLL interface UID
-#define KProvisioningAdapterInterfaceUid 0x101F84D5
-
-#endif	// WHITELISTADAPTERUIDS_H
-
-// End of file
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,522 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Handles white list settings in provisioning.
-*
-*/
-
-
-// INCLUDE FILES
-
-	// User includes
-#include "PushInitiator.h"
-#include "PushInitiatorList.h"
-#include "PushMtmSettings.h"
-#include "WhiteListAdapter.h"
-#include "WhiteListAdapterDef.h"
-#include "WhiteListAdapterItem.h"
-#include "WhiteListAdapterLogger.h"
-#include "WhiteListAdapterPanic.h"
-#include "WhiteListAdapterUids.h"
-	// System includes
-#include <CWPCharacteristic.h>
-#include <CWPParameter.h>
-
-// CONSTANTS
-
-// 'Push enabled' flag settings
-const TInt KPushEnabledFlagLength = 1;
-const TUint16 KPushEnabledFlagTrue = '1';
-const TUint16 KPushEnabledFlagFalse = '0';
-
-// Granularity value for dynamic arrays
-const TInt KDynamicArrayGranularity = 3;
-
-// ================= MEMBER FUNCTIONS ======================
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::CWhiteListAdapter
-// ---------------------------------------------------------
-//
-CWhiteListAdapter::CWhiteListAdapter() : CWPAdapter(),
-iItems( KDynamicArrayGranularity ),
-iItemsToBeAdded( KDynamicArrayGranularity ),
-iLogicalProxyPushSupport( EPushDontCare ), iPhysicalProxyIsVisited( EFalse )
-	{
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "WhiteListAdapter c'tor" ) ) );
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ConstructL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::ConstructL()
-	{
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "-> WhiteListAdapter::ConstructL" ) ) );
-
-    iMsvSession = CMsvSession::OpenSyncL( *this );
-	iPushMtmSettings = CPushMtmSettings::NewL();
-
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "<- WhiteListAdapter::ConstructL" ) ) );
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::NewL
-// ---------------------------------------------------------
-//
-CWhiteListAdapter* CWhiteListAdapter::NewL()
-	{
-	CWhiteListAdapter* self = new (ELeave) CWhiteListAdapter;
-
-	CleanupStack::PushL( self );
-
-	self->ConstructL();
-
-	CleanupStack::Pop();	// self
-
-	return self;
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::~CWhiteListAdapter
-// ---------------------------------------------------------
-//
-CWhiteListAdapter::~CWhiteListAdapter()
-	{
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "-> WhiteListAdapter d'tor" ) ) );
-
-	delete iCurrentItem;
-
-	delete iPushMtmSettings; // It has to be deleted before iMsvSession, 
-    // because it uses iMsvSession->FileSession().
-	delete iMsvSession;
-
-    CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "WhiteListAdapter d'tor, iItemsToBeAdded.Count:%d" ),
-        iItemsToBeAdded.Count() ) );
-    iItemsToBeAdded.ResetAndDestroy();
-    iItemsToBeAdded.Close();
-
-    CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "WhiteListAdapter d'tor, iItems.Count:%d" ), iItems.Count() ) );
-	iItems.ResetAndDestroy();
-	iItems.Close();
-
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "<- WhiteListAdapter d'tor" ) ) );
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ItemCount
-// ---------------------------------------------------------
-//
-TInt CWhiteListAdapter::ItemCount() const
-	{
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "WhiteListAdapter::ItemCount %d" ), iItems.Count() ) );
-
-	return iItems.Count();
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SummaryTitle
-// ---------------------------------------------------------
-//
-const TDesC16& CWhiteListAdapter::SummaryTitle( TInt /*aIndex*/ ) const
-	{
-    // As WL text will never be shown, we simply return an empty string here.
-	return KNullDesC16();
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SummaryText
-// ---------------------------------------------------------
-//
-const TDesC16& CWhiteListAdapter::SummaryText( TInt /*aIndex*/ ) const
-	{
-    // As WL text will never be shown, we simply return an empty string here.
-	return KNullDesC16();
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SaveL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::SaveL( TInt aItem )
-	{
-	__ASSERT_DEBUG( 0 <= aItem && aItem < iItems.Count(),
-				Panic( EArrayIndexOutOfBounds ) );
-
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "-> WhiteListAdapter::SaveL %d" ), aItem ) );
-
-	CPushInitiator* pi = new (ELeave) CPushInitiator;
-	CleanupStack::PushL( pi );
-	pi->SetAddressL( iItems[aItem]->Address(),
-					 iItems[aItem]->AddressType() );
-
-	TUint32 entryId = iPushMtmSettings->PushInitiatorList().AddL( pi );
-	CleanupStack::Pop( pi );	// pi, ownership taken over
-    // Save the ID of the added entry:
-    iItems[aItem]->SetId( entryId );
-
-	iPushMtmSettings->SaveL();
-
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "<- WhiteListAdapter::SaveL" ) ) );
-    }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::CanSetAsDefault
-// ---------------------------------------------------------
-//
-TBool CWhiteListAdapter::CanSetAsDefault( TInt /*aItem*/ ) const
-	{
-	return EFalse;
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SetAsDefaultL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::SetAsDefaultL( TInt /*aItem*/ )
-	{
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::DetailsL
-// ---------------------------------------------------------
-//
-TInt CWhiteListAdapter::DetailsL( TInt /*aItem*/,
-                                  MWPPairVisitor& /*aVisitor*/ )
-	{
-	return KErrNotSupported;
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ContextExtension
-// ---------------------------------------------------------
-//
-TInt CWhiteListAdapter::ContextExtension( MWPContextExtension*& aExtension )
-    {
-    aExtension = this;
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::VisitL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::VisitL( CWPCharacteristic& aCharacteristic )
-	{
-	if ( aCharacteristic.Type() == KWPPxLogical )
-		{
-        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-            _L( "-> WhiteListAdapter::VisitL PXLOGICAL" ) ) );
-
-		aCharacteristic.AcceptL( *this );
-
-        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-            _L( "WhiteListAdapter::VisitL PXLOGICAL visited, push support is %d" ),
-            iLogicalProxyPushSupport ) );
-
-        // iItemsToBeAdded contains physical proxies whose push support
-        // is either PushEnabled or PushDontCare (i.e. PushDisabled proxies
-        // are not present in this array).
-        if ( iLogicalProxyPushSupport == EPushEnabled )
-            {
-            // Knowing that the logical proxy's push support is PushEnabled,
-            // we have to add each element of the above-mentioned array.
-            for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
-                {
-                // If addition fails, then we delete the item. Otherwise,
-                // the ownership has been taken over by iItems array.
-                if ( iItems.Append( iItemsToBeAdded[i] ) != KErrNone )
-                    {
-                    delete iItemsToBeAdded[i];
-                    }
-                }
-            }
-        else
-            {
-            // We're here : logical proxy's push support is either PushDontCare
-            // or PushDisabled. In this case we have to add only those elements
-            // in the array whose push support is PushEnabled. This is because
-            // physical proxy's push support definition is stronger than the
-            // logical proxy's definition.
-            for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
-                {
-                TWhiteListAdapterItem* item = iItemsToBeAdded[i];
-                if ( item->PushSupport() == EPushEnabled )
-                    {
-                    // If addition fails, then we delete the item. Otherwise,
-                    // the ownership has been taken over by iItems array.
-                    if ( iItems.Append( item ) != KErrNone )
-                        {
-                        delete item;
-                        }
-                    }
-                else
-                    {
-                    delete item;
-                    }
-                }
-            }
-
-        // There is only one thing we need to do here : reset the array.
-        // At this point, each element in the array is invalid : if the
-        // element happened to be valid, then the other array (iItems)
-        // took over the ownership. Otherwise (i.e. the element was
-        // invalid), the element got deleted manually.
-        // Thus, we can safely reset the array.
-        iItemsToBeAdded.Reset();
-
-		iLogicalProxyPushSupport = EPushDontCare;
-
-        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-            _L( "<- WhiteListAdapter::VisitL PXLOGICAL" ) ) );
-		}
-	else if ( aCharacteristic.Type() == KWPPxPhysical )
-		{
-		// This deletion is for safety's sake : if one of the leaving methods
-		// in this section (below) has left, then it may happen that this
-		// method is called again and iCurrentItem is not NULL. If it is the
-		// case, we can avoid having an orphaned memory area by deleting the
-		// current item before allocating a new one.
-		// However, in most cases iCurrentItem will be NULL.
-        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-            _L( "-> WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
-
-        delete iCurrentItem;
-		iCurrentItem = NULL;
-		iCurrentItem = new (ELeave) TWhiteListAdapterItem();
-
-		iPhysicalProxyIsVisited = ETrue;
-
-		aCharacteristic.AcceptL( *this );
-
-		iPhysicalProxyIsVisited = EFalse;
-
-		if ( iCurrentItem->Valid() )
-			{
-			User::LeaveIfError( iItemsToBeAdded.Append( iCurrentItem ) );
-            iCurrentItem = NULL; // Ownership transferred.
-			
-            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-              _L( "WhiteListAdapter::VisitL PXPHYSICAL valid & added" ) ) );
-			}
-		else
-			{
-            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-                _L( "WhiteListAdapter::VisitL PXPHYSICAL invalid" ) ) );
-			// invalid physical proxy (at least from our point of view)
-			delete iCurrentItem;
-            iCurrentItem = NULL;
-			}
-
-        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-            _L( "<- WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
-		}
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::VisitL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::VisitL( CWPParameter& aParameter )
-	{
-	switch ( aParameter.ID() )
-		{
-		case EWPParameterPhysicalProxyID :
-			{
-			__ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
-
-            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-                _L( "WhiteListAdapter::VisitL PhysicalProxyID" ) ) );
-
-			if ( iCurrentItem )
-				{
-				iCurrentItem->SetProxyId( aParameter.Value() );
-				}
-
-			break;
-			}
-		case EWPParameterPxAddr :
-			{
-			__ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
-
-            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-                _L( "WhiteListAdapter::VisitL PxAddr" ) ) );
-
-            if ( iCurrentItem )
-				{
-				iCurrentItem->SetAddress( aParameter.Value() );
-				}
-
-			break;
-			}
-		case EWPParameterPxAddrType :
-			{
-			__ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
-
-            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-                _L( "WhiteListAdapter::VisitL PxAddrType" ) ) );
-
-			if ( iCurrentItem )
-				{
-				iCurrentItem->SetAddressType( aParameter.Value() );
-				}
-
-			break;
-			}
-		case EWPParameterPushEnabled :
-			{
-			if ( iCurrentItem )
-				{
-                CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-                    _L( "WhiteListAdapter::VisitL Physical PushEnabled" ) ) );
-
-                // it is a physical proxy
-				iCurrentItem->SetPushSupport
-								( ResolvePushSupport( aParameter.Value() ) );
-				}
-			else
-				{
-                CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-                    _L( "WhiteListAdapter::VisitL Logical PushEnabled" ) ) );
-
-				// it is a logical proxy
-				iLogicalProxyPushSupport =
-									ResolvePushSupport( aParameter.Value() );
-				}
-
-			break;
-			}
-		default :
-			break;
-		}
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::VisitLinkL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::VisitLinkL( CWPCharacteristic& /*aCharacteristic*/ )
-	{
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::HandleSessionEventL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::HandleSessionEventL( TMsvSessionEvent /*aEvent*/,
-											TAny* /*aArg1*/,
-											TAny* /*aArg2*/,
-											TAny* /*aArg3*/ )
-	{
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::ResolvePushSupport
-// ---------------------------------------------------------
-//
-TPushSupport CWhiteListAdapter::ResolvePushSupport( const TDesC& aPushSupport )
-	{
-	TPushSupport support = EPushDontCare;
-
-	if ( aPushSupport.Length() == KPushEnabledFlagLength )
-		{
-		if ( aPushSupport[0] == KPushEnabledFlagTrue )
-			{
-			support = EPushEnabled;
-			}
-		else if ( aPushSupport[0] == KPushEnabledFlagFalse )
-			{
-			support = EPushDisabled;
-			}
-		}
-
-	return support;
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::SaveDataL
-// ---------------------------------------------------------
-//
-const TDesC8& CWhiteListAdapter::SaveDataL( TInt aIndex ) const
-	{
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "WhiteListAdapter::SaveDataL %d %d %d" ), 
-        iItems.Count(), aIndex, iItems[aIndex]->Id() ) );
-    return ( iItems[aIndex]->IdBuf() );
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::DeleteL
-// ---------------------------------------------------------
-//
-void CWhiteListAdapter::DeleteL( const TDesC8& aSaveData )
-	{
-    // Copy source into a package buffer:
-    TPckgBuf<TUint32> entryIdBuf;
-    entryIdBuf.Copy( aSaveData );
-    // Extract the entry ID:
-    TUint32 entryId( entryIdBuf() );
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "WhiteListAdapter::DeleteL ID %d" ), entryId ) );
-
-    // Now entryId holds the ID - we can remove it from WL:
-    CPushInitiatorList& whiteList = iPushMtmSettings->PushInitiatorList();
-    // Find the index of the Initiator with the given ID.
-    TInt index( KErrNotFound );
-    // As the entries are unique in WL by the ID, it's enough 
-    // to continue the loop until first hit.
-    const TInt count( whiteList.Count() );
-    for ( TInt i = 0; i < count; ++i )
-        {
-        const CPushInitiator& initiator = whiteList.At(i);
-        if ( initiator.EntryID() == entryId )
-            {
-            index = i;
-            // Found:
-            break;
-            }
-        }
-
-    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-        _L( "WhiteListAdapter::DeleteL index %d" ), index ) );
-    if ( index != KErrNotFound )
-        {
-        whiteList.Delete( index );
-        // Commit changes.
-        iPushMtmSettings->SaveL();
-        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
-            _L( "WhiteListAdapter::DeleteL Saved..." ) ) );
-        }
-	}
-
-// ---------------------------------------------------------
-// CWhiteListAdapter::Uid
-// ---------------------------------------------------------
-//
-TUint32 CWhiteListAdapter::Uid() const
-	{
-    return (TUint32)KWhiteListAdapterImplementationUid;
-	}
-
-// End of file
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Table of plugins for ECom
-*
-*/
-
-
-
-// INCLUDE FILES
-	// System includes
-#include <e32std.h>
-#include <ecom/implementationproxy.h>
-
-	// User includes
-#include "WhiteListAdapter.h"
-#include "WhiteListAdapterUids.h"
-
-// CONSTANTS
-
-const TImplementationProxy KImplementationTable[] = 
-	{
-	IMPLEMENTATION_PROXY_ENTRY( KWhiteListAdapterImplementationUid, CWhiteListAdapter::NewL )
-	};
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-// -----------------------------------------------------------------------------
-// ImplementationGroupProxy
-// -----------------------------------------------------------------------------
-//
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
-	{
-	aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
-
-	return KImplementationTable;
-	}
-
-//  End of File  
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Handles white list settings in provisioning.
-*
-*/
-
-
-// INCLUDE FILES
-	// User includes
-#include "WhiteListAdapterItem.h"
-
-// CONSTANTS
-
-_LIT( KIPv4AddressType, "IPV4" );
-_LIT( KIPv6AddressType, "IPV6" );
-_LIT( KE164AddressType, "E164" );
-_LIT( KAlphanumericAddressType, "ALPHA" );
-
-// ================= MEMBER FUNCTIONS ======================
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::TWhiteListAdapterItem
-// ---------------------------------------------------------
-//
-TWhiteListAdapterItem::TWhiteListAdapterItem() 
-:   iAddress( KNullDesC ), 
-    iAddressType( CPushInitiator::ETypeE164 ), 
-    iId( 0 ), 
-    iIdBufPtr( iId ), 
-    iProxyId( KNullDesC ), 
-    iPushSupport( EPushDontCare )
-	{
-	iAddressType = CPushInitiator::ETypeIpv4;
-	iPushSupport = EPushDontCare;
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::Address
-// ---------------------------------------------------------
-//
-const TDesC& TWhiteListAdapterItem::Address() const
-	{
-	return iAddress;
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::AddressType
-// ---------------------------------------------------------
-//
-CPushInitiator::TAddrType TWhiteListAdapterItem::AddressType() const
-	{
-	return iAddressType;
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::Id
-// ---------------------------------------------------------
-//
-TUint32 TWhiteListAdapterItem::Id() const
-    {
-    return iId;
-    }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::IdBuf
-// ---------------------------------------------------------
-//
-const TDesC8& TWhiteListAdapterItem::IdBuf() const
-    {
-    return iIdBufPtr;
-    }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::PushSupport
-// ---------------------------------------------------------
-//
-TPushSupport TWhiteListAdapterItem::PushSupport() const
-    {
-    return iPushSupport;
-    }
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetAddress
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetAddress( const TDesC& aAddress )
-	{
-	iAddress.Set( aAddress );
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetAddressType
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetAddressType( const TDesC& aAddressType )
-	{
-	if ( !aAddressType.Compare( KIPv4AddressType ) )
-		{
-		iAddressType = CPushInitiator::ETypeIpv4;
-		}
-	else if ( !aAddressType.Compare( KIPv6AddressType ) )
-		{
-		iAddressType = CPushInitiator::ETypeIpv6;
-		}
-	else if ( !aAddressType.Compare( KE164AddressType ) )
-		{
-		iAddressType = CPushInitiator::ETypeE164;
-		}
-	else if ( !aAddressType.Compare( KAlphanumericAddressType ) )
-		{
-		iAddressType = CPushInitiator::ETypeAlpha;
-		}
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetId
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetId( TUint32 aId )
-	{
-	iId = aId;
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetProxyId
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetProxyId( const TDesC& aProxyId )
-	{
-	iProxyId.Set( aProxyId );
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::SetPushSupport
-// ---------------------------------------------------------
-//
-void TWhiteListAdapterItem::SetPushSupport( TPushSupport aPushSupport )
-	{
-	iPushSupport = aPushSupport;
-	}
-
-// ---------------------------------------------------------
-// TWhiteListAdapterItem::Valid
-// ---------------------------------------------------------
-//
-TBool TWhiteListAdapterItem::Valid() const
-	{
-	TBool valid = EFalse;
-
-	// TODO : checking IP address/phone number validity (MsgBioUtils?)
-
-	if ( ( iPushSupport == EPushEnabled || iPushSupport == EPushDontCare ) &&
-		( iAddressType == CPushInitiator::ETypeE164 ) &&
-		( 0 < iAddress.Length() ) )
-		{
-		valid = ETrue;
-		}
-
-	return valid;
-	}
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*      Implementation of class WhiteListAdapterLogger.   
-*      
-*
-*/
-
-
-#ifdef __TEST_WHITELISTADAPTER_LOG__
-
-// INCLUDE FILES
-    // System includes
-#include <flogger.h>
-
-    // User includes
-#include "WhiteListAdapterLogger.h"
-
-// ================= CONSTANTS =======================
-
-/// White List Adapter logging directory.
-_LIT( KWhiteListAdapterLogDir, "WLA" );
-/// White List Adapter log file name.
-_LIT( KWhiteListAdapterLogFile, "Log.txt" );
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... )
-    {
-    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
-        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
-        {
-        VA_LIST list;
-        VA_START( list, aFmt );
-        RFileLogger::WriteFormat
-            (
-            KWhiteListAdapterLogDir,
-            KWhiteListAdapterLogFile,
-            EFileLoggingModeAppend,
-            aFmt,
-            list
-            );
-        VA_END( list );
-        }
-    }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, VA_LIST& aList )
-    {
-    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
-        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
-        {
-        RFileLogger::WriteFormat
-            (
-            KWhiteListAdapterLogDir,
-            KWhiteListAdapterLogFile,
-            EFileLoggingModeAppend,
-            aFmt,
-            aList
-            );
-        }
-    }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... )
-    {
-    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
-        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
-        {
-        VA_LIST list;
-        VA_START( list, aFmt );
-        RFileLogger::WriteFormat
-            (
-            KWhiteListAdapterLogDir,
-            KWhiteListAdapterLogFile,
-            EFileLoggingModeAppend,
-            aFmt,
-            list
-            );
-        VA_END( list );
-        }
-    }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::Write()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::Write
-( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, VA_LIST& aList )
-    {
-    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
-        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
-        {
-        RFileLogger::WriteFormat
-            (
-            KWhiteListAdapterLogDir,
-            KWhiteListAdapterLogFile,
-            EFileLoggingModeAppend,
-            aFmt,
-            aList
-            );
-        }
-    }
-
-// ---------------------------------------------------------
-// WhiteListAdapterLogger::HexDump()
-// ---------------------------------------------------------
-//
-void WhiteListAdapterLogger::HexDump
-        (
-        TInt32 aMask,
-        TInt aLevel, 
-        const TText* aHeader,
-        const TText* aMargin,
-        const TUint8* aPtr,
-        TInt aLen
-        )
-    {
-    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
-        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
-        {
-        RFileLogger::HexDump
-            (
-            KWhiteListAdapterLogDir,
-            KWhiteListAdapterLogFile,
-            EFileLoggingModeAppend,
-            aHeader,
-            aMargin,
-            aPtr,
-            aLen
-            );
-        }
-    }
-
-#endif // __TEST_WHITELISTADAPTER_LOG__
--- a/pushmtm/Plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*     Panic handling for white list management.
-*
-*/
-
-
-// INCLUDE FILES
-	// System includes
-#include <e32std.h>
-
-	// User includes
-#include "WhiteListAdapterPanic.h"
-
-// CONSTANTS
-
-_LIT( KWhiteListAdapterPanicString, "WhiteListAdapter" );
-
-// External function(s)
-
-void Panic( TInt aPanic )
-	{
-	User::Panic( KWhiteListAdapterPanicString, aPanic );
-	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmCliSrv.mmp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET             PushMtmCliSrv.dll
+TARGETTYPE   dll
+UID                     0x10004845 0x10008D42
+TARGETPATH      SHARED_LIB_DIR
+
+CAPABILITY      CAP_GENERAL_DLL
+
+VENDORID        VID_DEFAULT
+
+USERINCLUDE     ../MtmCliSrvInc
+USERINCLUDE     ../Inc
+USERINCLUDE     ../MtmUtilInc
+USERINCLUDE     ../MtmUiInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH      ../MtmCliSrvSrc
+SOURCE          PushMtmClient.cpp
+SOURCE          PushMtmCliSrvPanic.cpp
+SOURCE          PushMtmGcOperation.cpp
+SOURCE          PushMtmServer.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#ifdef __TEST_LOG_MMP
+MACRO           __TEST_LOG__
+#endif
+
+LIBRARY         euser.lib
+LIBRARY         msgs.lib
+LIBRARY         PushMtmUtil.lib
+LIBRARY         SISLPushMsgUtils.lib 
+
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY         flogger.lib
+#endif
+
+#if defined(ARMCC)
+    DEFFILE ../EABI/PUSHMTMCLISRVU_EKA2.def
+#else
+    DEFFILE ../BWinsCw/PUSHMTMCLISRVU_EKA2.def
+#endif
+
+START RESOURCE  ../Data/PushRegistry.rss
+TARGET          PushRegistry.rsc
+TARGETPATH      MTM_INFO_FILE_DIR
+#ifdef __S60_32__
+LANG sc 
+#else
+LANGUAGE_IDS 
+#endif
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmIcons.mk	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\z
+else
+ZDIR=\epoc32\data\z
+endif
+
+TARGETDIR=$(ZDIR)\RESOURCE\APPS
+HEADERDIR=\epoc32\include
+ICONTARGETFILENAME=$(TARGETDIR)\pushmtm.mif
+HEADERFILENAME=$(HEADERDIR)\pushmtm.mbg
+
+do_nothing :
+	@rem do_nothing
+
+MAKMAKE : do_nothing
+
+BLD : do_nothing
+
+CLEAN : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+# ----------------------------------------------------------------------------
+# TODO: Configure these.
+#
+# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by
+# MifConv if the mask detph is defined.
+#
+# NOTE 2: Usually, source paths should not be included in the bitmap
+# definitions. MifConv searches for the icons in all icon directories in a
+# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps.
+# The directory \s60\icons is included in the search only if the feature flag
+# __SCALABLE_ICONS is defined.
+# ----------------------------------------------------------------------------
+
+RESOURCE :
+	mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
+	/c8,1 qgn_prop_mce_push_unread.bmp \
+	/c8,1 qgn_prop_mce_push_read.bmp
+	
+FREEZE : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES :
+	@echo $(HEADERFILENAME)&& \
+	@echo $(ICONTARGETFILENAME)
+
+FINAL : do_nothing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmUi.mmp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET          PushMtmUi.dll
+TARGETTYPE      dll
+UID             0x10004845 0x10008D43
+TARGETPATH      SHARED_LIB_DIR
+
+CAPABILITY      CAP_GENERAL_DLL
+
+VENDORID        VID_DEFAULT
+
+START RESOURCE  ../Data/PushMtmUi.rss
+DEPENDS avkon.rsg
+HEADER
+#ifdef __S60_32__
+LANG sc 
+#else
+LANGUAGE_IDS 
+#endif
+TARGETPATH      MTM_RESOURCE_DIR
+END // RESOURCE
+
+USERINCLUDE     ../MtmUiInc
+USERINCLUDE     ../Inc
+USERINCLUDE     ../MtmUtilInc
+USERINCLUDE     ../ViewerInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH      ../MtmUiSrc
+SOURCE          PushLoadServiceOp.cpp
+SOURCE          PushMessageInfoDialog.cpp
+SOURCE          PushMessageInfoOp.cpp
+SOURCE          PushMtmUi.cpp
+SOURCE          PushMtmUiData.cpp
+SOURCE          PushMtmUiOperation.cpp
+SOURCE          PushMtmUiPanic.cpp
+SOURCE          PushSettingsDialog.cpp
+SOURCE          PushViewMessageOp.cpp
+
+#ifdef __SERIES60_PUSH_SP
+SOURCE          PushViewServiceOp.cpp
+#endif // __SERIES60_PUSH_SP
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO           __TEST_LOG__
+#endif
+
+LIBRARY         apparc.lib
+LIBRARY         AknSkins.lib
+LIBRARY         apmime.lib
+LIBRARY         avkon.lib
+LIBRARY         bafl.lib
+LIBRARY         CdlEngine.lib
+LIBRARY         CommonEngine.lib
+LIBRARY         commonui.lib
+LIBRARY         cone.lib
+LIBRARY         ecom.lib
+LIBRARY         efsrv.lib 
+LIBRARY         eikcoctl.lib
+LIBRARY         eikcore.lib
+LIBRARY         eikdlg.lib
+LIBRARY         euser.lib
+LIBRARY         featmgr.lib
+LIBRARY         inetprotutil.lib
+#ifdef __SERIES60_PUSH_SP
+LIBRARY         MiscPushMsgUtils.lib // For CUnknownPushMsgEntry.
+#endif // __SERIES60_PUSH_SP
+LIBRARY         msgs.lib
+LIBRARY         mtur.lib
+LIBRARY         muiu.lib
+LIBRARY         PushMtmUtil.lib
+LIBRARY         PushMsgEntry.lib
+LIBRARY         SISLPushMsgUtils.lib
+LIBRARY         CENTRALREPOSITORY.lib
+
+#ifdef __SERIES60_HELP
+LIBRARY         hlplch.lib // for "Help" options menu
+#endif // __SERIES60_HELP
+
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY         flogger.lib
+#endif
+
+#if defined(ARMCC)
+    DEFFILE ../EABI/PUSHMTMUIU_EKA2.def
+#else
+    DEFFILE ../BWinsCw/PUSHMTMUIU_EKA2.def
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushMtmUtil.mmp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <bldvariant.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET          PushMtmUtil.dll
+TARGETTYPE      dll
+UID             0x1000008d 0x10008D44
+
+CAPABILITY      CAP_GENERAL_DLL
+VENDORID        VID_DEFAULT
+
+USERINCLUDE     ../MtmUtilInc
+USERINCLUDE     ../Inc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH      ../MtmUtilSrc
+SOURCE          PushAsyncOpRunner.cpp
+#ifdef __PUSH_WHITELIST
+SOURCE          PushAuthenticationUtilitiesWL.cpp
+#else  // __PUSH_WHITELIST
+SOURCE          PushAuthenticationUtilitiesPure.cpp
+#endif // __PUSH_WHITELIST
+SOURCE          PushInitiator.cpp
+SOURCE          PushInitiatorList.cpp
+SOURCE          PushMtmOperation.cpp
+SOURCE          PushMtmSettings.cpp
+SOURCE          PushMtmUtil.cpp
+SOURCE          PushMtmUtilPanic.cpp
+#ifdef __PUSH_WHITELIST
+SOURCE          WhiteListImporterWL.cpp
+#else  // __PUSH_WHITELIST
+SOURCE          WhiteListImporterDummy.cpp
+#endif // __PUSH_WHITELIST
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO           __TEST_LOG__
+#endif
+
+LIBRARY         efsrv.lib
+LIBRARY         estor.lib
+LIBRARY         euser.lib
+LIBRARY         featmgr.lib
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY         flogger.lib
+#endif
+LIBRARY			inetprotutil.lib
+LIBRARY         msgs.lib
+#ifdef __PUSH_WHITELIST
+LIBRARY         PushMsgEntry.lib
+LIBRARY         WapPushUtils.lib
+#endif // __PUSH_WHITELIST
+LIBRARY         SISLPushMsgUtils.lib
+LIBRARY         CENTRALREPOSITORY.lib
+
+#if defined(ARMCC)
+    DEFFILE ../EABI/PUSHMTMUTILU_EKA2.def
+#else
+    DEFFILE ../BWinsCw/PUSHMTMUTILU_EKA2.def
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/PushViewer.mmp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specification file
+*
+*/
+
+#include <defaultcaps.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET          PushViewer.exe
+EPOCSTACKSIZE	0x5000
+TARGETTYPE      exe
+UID             0x100039CE 0x10008D3C
+
+CAPABILITY      CAP_APPLICATION
+VENDORID        VID_DEFAULT
+
+USERINCLUDE		../ViewerInc
+USERINCLUDE		../Inc
+USERINCLUDE		../MtmUiInc
+USERINCLUDE		../MtmUtilInc
+
+APP_LAYER_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
+#endif
+
+SOURCEPATH		../ViewerSrc
+SOURCE          PushViewerApp.cpp
+SOURCE          PushViewerAppServer.cpp
+SOURCE          PushViewerDoc.cpp
+SOURCE          PushViewerPanic.cpp
+SOURCE          PushViewerMsgEdAppUi.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO           __TEST_LOG__
+#endif
+
+LIBRARY			CommonUI.lib
+LIBRARY			apparc.lib
+LIBRARY			avkon.lib
+LIBRARY			cone.lib
+LIBRARY			eikcoctl.lib
+LIBRARY         eikcore.lib
+LIBRARY         euser.lib
+LIBRARY			MsgEditorAppUi.lib
+LIBRARY			MsgEditorModel.lib
+LIBRARY			MsgEditorView.lib
+LIBRARY			msgs.lib
+LIBRARY			muiu.lib
+LIBRARY			PushMtmUtil.lib
+LIBRARY         SISLPushMsgUtils.lib
+
+#ifdef __SERIES60_HELP
+LIBRARY         hlplch.lib // for "Help" options menu
+#endif // __SERIES60_HELP
+
+#ifdef __TEST_LOG_MMP
+LIBRARY         efsrv.lib
+DEBUGLIBRARY         flogger.lib
+#endif
+
+START RESOURCE  ../Data/PushViewer.rss
+DEPENDS avkon.rsg
+HEADER
+#ifdef __S60_32__
+LANG sc 
+#else
+LANGUAGE_IDS 
+#endif
+TARGETPATH   APP_RESOURCE_DIR
+END // RESOURCE
+
+START RESOURCE  ../Data/PushViewer_reg.rss
+DEPENDS pushviewer.rsg
+// Do not change the UID below.
+TARGETPATH      /private/10003a3f/apps
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/group/bld.inf	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Build specification file
+*
+*/
+
+
+#include <platform_paths.hrh>
+#include "../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+DEFAULT
+
+// Help exports
+#include "../help/group/bld.inf"
+
+PRJ_EXPORTS
+../Inc/PushMtmCommands.hrh    APP_LAYER_PLATFORM_EXPORT_PATH(PushMtmCommands.hrh)
+../rom/PushMtm.iby            CORE_APP_LAYER_IBY_EXPORT_PATH(PushMtm.iby)
+../rom/PushMtmResources.iby   LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(PushMtmResources.iby)
+../rom/S60SiSlWapPush.iby     CORE_APP_LAYER_IBY_EXPORT_PATH(S60SiSlWapPush.iby)
+#ifndef __S60_32__
+../rom/wappush.iby            CORE_APP_LAYER_IBY_EXPORT_PATH(wappush.iby)
+#endif
+../loc/pushmtmui.loc          APP_LAYER_LOC_EXPORT_PATH(pushmtmui.loc)
+../loc/pushviewer.loc         APP_LAYER_LOC_EXPORT_PATH(pushviewer.loc)
+
+../conf/pushmtm.confml        APP_LAYER_CONFML(pushmtm.confml)
+../conf/pushmtm_10008D42.crml APP_LAYER_CRML(pushmtm_10008D42.crml)
+
+#ifdef __SERIES60_32__
+
+PRJ_MMPFILES
+
+// MTM registry files
+//gnumakefile PushRegistry.mk
+gnumakefile PushMtmIcons.mk
+// Push Mtm Utility
+PushMtmUtil.mmp
+// Push Server Mtm, Client Mtm and Ui Mtm
+PushMtmCliSrv.mmp
+// Ui Data Mtm
+PushMtmUi.mmp
+// Push Viewer
+PushViewer.mmp
+
+#include "../Plugins/Group/Bld.inf"
+
+#else
+
+PRJ_EXTENSIONS
+START EXTENSION s60/mifconv
+OPTION TARGETFILE pushmtm.mif
+OPTION HEADERFILE pushmtm.mbg
+OPTION SOURCES -c8,1 qgn_prop_mce_push_unread -c8,1 qgn_prop_mce_push_read
+END
+
+PRJ_MMPFILES
+
+// MTM registry files
+// Push Mtm Utility
+PushMtmUtil.mmp
+// Push Server Mtm, Client Mtm and Ui Mtm
+PushMtmCliSrv.mmp
+// Ui Data Mtm
+PushMtmUi.mmp
+// Push Viewer
+PushViewer.mmp
+
+#include "../Plugins/Group/Bld.inf"
+
+#endif
+
+PRJ_TESTMMPFILES
+
+
--- a/pushmtm/loc/PushMtmUi.loc	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  This is a localisation file.
-*
-*/
-
-
-
-// LOCALISATION STRINGS
-
-// d: Command in options list in Mce. 
-// d: Opens Message info dialog
-// d: Visible when one message selected.
-// l: list_single_pane_t1_cp2
-//
-#define qtn_mce_info "Message info"
-
-// d: Command in options list in Mce. 
-// d: View a message
-// l: list_single_pane_t1_cp2
-//
-#define qtn_mce_open_to_brow "View Service"
-
-// d: Command in options list in Mce. 
-// d: Load a message
-// l: list_single_pane_t1_cp2
-//
-#define qtn_mce_fetch "Load Service"
-
-// d: Item in settings list in Mce.
-// l: list_double_pane_t1
-//
-#define qtn_mce_settings_push "Service message"
-
-//=============================================================================
-//
-// Push Settings Dialog related resources
-//
-//=============================================================================
-
-// d:Title
-// l:title_pane_t2/opt9
-//
-#define qtn_mce_title_settings_push "Service Settings"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_change "Change"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_delete "Delete"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_exit "Exit"
-
-// d:Setting item title
-// l:list_setting_pane_t1
-//
-#define qtn_mce_settings_push_recept "Service reception"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_recep_on "On"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_recep_off "Off"
-
-// d:Setting item title
-// l:list_setting_pane_t1
-//
-#define qtn_mce_settings_push_loading "Download messages"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_load_autom "Automatically"
-
-// d:Setting item text
-// l:list_set_graphic_pane_t1
-//
-#define qtn_wml_push_setting_load_man "Manually"
-
-// d:Setting confirmation query
-// l:popup_note_window
-//
-#define qtn_wml_push_sttng_autom_conf_q "Messages will be downloaded automatically when connection is active. Continue?"
-
-//=============================================================================
-//
-// Push Message Info Dialog related resources
-//
-//=============================================================================
-
-// d:Title of the Message info window
-// l:heading_pane_t1
-//
-#define qtn_wml_push_title_msginfo "Message info"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_from "From"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_url "Address"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_body "Message"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_type "Type"
-
-// d:Message type in Message info.
-// d:Note that Message info dialog will wrap it!
-// d:The string can be whatever long!
-// l:list_single_heading_pane_t1_cp2
-//
-#define qtn_wml_push_msgnfo_type_srv_msg "Service message"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msg_content_type "Content type"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_created "Created"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_expires "Expires"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_size "Size"
-
-// d:Heading item text
-// l:list_single_heading_pane_t2
-//
-#define qtn_wml_push_msginfo_rcvd "Received"
-
-//=============================================================================
-//
-// Push Load Service related resources
-//
-//=============================================================================
-
-// d:Setting confirmation query
-// l:popup_note_image_window
-//
-#define qtn_wml_push_note_msg_expired "The service is no longer available - this message will be deleted."
-
-// d:Automatic fetching is on and not authenticated SL execute-high is opened.
-// l:popup_note_window
-//
-#define qtn_service_inbox_sl_not_trusted "The message came from an untrusted source. Download it anyway?"
-
-// d:SL Cache is not authenticated and is opened.
-// l:popup_note_window
-//
-#define qtn_service_inbox_sl_cache_not_trusted "The message came from an untrusted source and will be downloaded to cache. Download it anyway?"
-
-//=============================================================================
-//
-// Misc
-//
-//=============================================================================
-
-// d:First line of the Inbox list item
-// l:list_double_graphic_pane_t1
-//
-#define qtn_mce_push_inbox_sender_unkw "Unknown"
-
-// d:Second line of the Inbox list item
-// l:list_double_graphic_pane_t2
-//
-#define qtn_mce_push_inbox_message "Service message"
-
-// d:Message type in Messages/Settings
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_settings_type_srv_msg "Service message"
-
-//=============================================================================
-//
-// Service reception
-//
-//=============================================================================
-
-// d:Shown in CAknInformationNote
-// l:popup_note_window
-//
-#define qtn_service_inbox_updating_message_received "There are newer service message available, message will be replaced."
-
--- a/pushmtm/loc/PushViewer.loc	Wed Sep 01 12:31:04 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  This is a localisation file.
-*
-*/
-
-
-
-// LOCALISATION STRINGS
-
-// d:Application title
-// l:title_pane_t2/opt9
-//
-#define qtn_wml_push_title_viewer "Service Message"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_inbox_open "Open"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_mce_inbox_fetch "Load service"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_wml_push_cmd_delete "Delete"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_wml_push_cmd_info "Message info"
-
-// d:Menu item
-// l:list_single_pane_t1_cp2
-//
-#define qtn_wml_push_cmd_exit "Exit"
-
-// d:List item text
-// l:list_double2_large_graphic_pane
-//
-#define qtn_wml_push_w_not_loaded "Content not loaded"
-
-// d:List item text
-// l:list_double_large_graphic_pane_t1_cp2
-//
-#define qtn_wml_push_w_attach "Content"
-
-// d:List item text
-// l:list_double_large_graphic_pane_t1_cp2
-//
-#define qtn_wap_push_w_wml_page "Wml page"
-
-// d:List item text
-// l:list_double2_large_graphic_pane
-//
-#define qtn_mail_lds1_size "Size: %N kB"
-
-// d: Header of the Simple text viewer
-// l: heading_pane_t1
-//
-#define qtn_wml_push_txt_pop_heading "Message:"
-
-// d:Delete confirmation query
-// l:popup_note_image_window
-//
-#define qtn_wml_push_view_query_del "Delete message?"
-
-// d:Shown on the main pane of PushViewer
-// l:msg_body_pane_t1
-//
-#define qtn_service_inbox_push_viewer_view_text "Download service message content by selecting Options - Download."
-
-// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/loc/pushmtmui.loc	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is a localisation file.
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+// d: Command in options list in Mce. 
+// d: Opens Message info dialog
+// d: Visible when one message selected.
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_info "Message info"
+
+// d: Command in options list in Mce. 
+// d: View a message
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_open_to_brow "View Service"
+
+// d: Command in options list in Mce. 
+// d: Load a message
+// l: list_single_pane_t1_cp2
+//
+#define qtn_mce_fetch "Load Service"
+
+// d: Item in settings list in Mce.
+// l: list_double_pane_t1
+//
+#define qtn_mce_settings_push "Service message"
+
+//=============================================================================
+//
+// Push Settings Dialog related resources
+//
+//=============================================================================
+
+// d:Title
+// l:title_pane_t2/opt9
+//
+#define qtn_mce_title_settings_push "Service Settings"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_change "Change"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_delete "Delete"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_exit "Exit"
+
+// d:Setting item title
+// l:list_setting_pane_t1
+//
+#define qtn_mce_settings_push_recept "Service reception"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_recep_on "On"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_recep_off "Off"
+
+// d:Setting item title
+// l:list_setting_pane_t1
+//
+#define qtn_mce_settings_push_loading "Download messages"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_load_autom "Automatically"
+
+// d:Setting item text
+// l:list_set_graphic_pane_t1
+//
+#define qtn_wml_push_setting_load_man "Manually"
+
+// d:Setting confirmation query
+// l:popup_note_window
+//
+#define qtn_wml_push_sttng_autom_conf_q "Messages will be downloaded automatically when connection is active. Continue?"
+
+//=============================================================================
+//
+// Push Message Info Dialog related resources
+//
+//=============================================================================
+
+// d:Title of the Message info window
+// l:heading_pane_t1
+//
+#define qtn_wml_push_title_msginfo "Message info"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_from "From"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_url "Address"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_body "Message"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_type "Type"
+
+// d:Message type in Message info.
+// d:Note that Message info dialog will wrap it!
+// d:The string can be whatever long!
+// l:list_single_heading_pane_t1_cp2
+//
+#define qtn_wml_push_msgnfo_type_srv_msg "Service message"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msg_content_type "Content type"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_created "Created"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_expires "Expires"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_size "Size"
+
+// d:Heading item text
+// l:list_single_heading_pane_t2
+//
+#define qtn_wml_push_msginfo_rcvd "Received"
+
+//=============================================================================
+//
+// Push Load Service related resources
+//
+//=============================================================================
+
+// d:Setting confirmation query
+// l:popup_note_image_window
+//
+#define qtn_wml_push_note_msg_expired "The service is no longer available - this message will be deleted."
+
+// d:Automatic fetching is on and not authenticated SL execute-high is opened.
+// l:popup_note_window
+//
+#define qtn_service_inbox_sl_not_trusted "The message came from an untrusted source. Download it anyway?"
+
+// d:SL Cache is not authenticated and is opened.
+// l:popup_note_window
+//
+#define qtn_service_inbox_sl_cache_not_trusted "The message came from an untrusted source and will be downloaded to cache. Download it anyway?"
+
+//=============================================================================
+//
+// Misc
+//
+//=============================================================================
+
+// d:First line of the Inbox list item
+// l:list_double_graphic_pane_t1
+//
+#define qtn_mce_push_inbox_sender_unkw "Unknown"
+
+// d:Second line of the Inbox list item
+// l:list_double_graphic_pane_t2
+//
+#define qtn_mce_push_inbox_message "Service message"
+
+// d:Message type in Messages/Settings
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_settings_type_srv_msg "Service message"
+
+//=============================================================================
+//
+// Service reception
+//
+//=============================================================================
+
+// d:Shown in CAknInformationNote
+// l:popup_note_window
+//
+#define qtn_service_inbox_updating_message_received "There are newer service message available, message will be replaced."
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/loc/pushviewer.loc	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  This is a localisation file.
+*
+*/
+
+
+
+// LOCALISATION STRINGS
+
+// d:Application title
+// l:title_pane_t2/opt9
+//
+#define qtn_wml_push_title_viewer "Service Message"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_inbox_open "Open"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_mce_inbox_fetch "Load service"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_delete "Delete"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_info "Message info"
+
+// d:Menu item
+// l:list_single_pane_t1_cp2
+//
+#define qtn_wml_push_cmd_exit "Exit"
+
+// d:List item text
+// l:list_double2_large_graphic_pane
+//
+#define qtn_wml_push_w_not_loaded "Content not loaded"
+
+// d:List item text
+// l:list_double_large_graphic_pane_t1_cp2
+//
+#define qtn_wml_push_w_attach "Content"
+
+// d:List item text
+// l:list_double_large_graphic_pane_t1_cp2
+//
+#define qtn_wap_push_w_wml_page "Wml page"
+
+// d:List item text
+// l:list_double2_large_graphic_pane
+//
+#define qtn_mail_lds1_size "Size: %N kB"
+
+// d: Header of the Simple text viewer
+// l: heading_pane_t1
+//
+#define qtn_wml_push_txt_pop_heading "Message:"
+
+// d:Delete confirmation query
+// l:popup_note_image_window
+//
+#define qtn_wml_push_view_query_del "Delete message?"
+
+// d:Shown on the main pane of PushViewer
+// l:msg_body_pane_t1
+//
+#define qtn_service_inbox_push_viewer_view_text "Download service message content by selecting Options - Download."
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/Data/10008D3E.rss	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  White List Adapter registration resources.
+*
+*/
+
+
+// INCLUDE FILES
+	// System includes
+#include <ecom/registryinfo.rh>
+
+	// User includes
+#include "WhiteListAdapterUids.h"
+
+// RESOURCE DEFINITIONS
+
+RESOURCE REGISTRY_INFO theInfo
+	{
+	dll_uid = KWhiteListAdapterDllUid;
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = KProvisioningAdapterInterfaceUid;
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = KWhiteListAdapterImplementationUid;
+					version_no = 2;
+					display_name = ""; 
+					default_data = "";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/101F854C.rss	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Push Content Handlers registration resources.
+*
+*/
+
+
+
+#include <ecom/registryinfo.rh>
+#include "PushContentHandlerDef.hrh"
+
+
+RESOURCE REGISTRY_INFO theInfo
+	{
+	dll_uid = EUidPushContentHandlerDll;
+	interfaces = 
+		{
+		INTERFACE_INFO
+			{
+			interface_uid = EUidPushContentHandlerBase;
+			implementations = 
+				{
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = EUidPushUnknownContentHandler;
+					version_no = 2;
+					display_name = "";
+					default_data = "*";
+					opaque_data = "";
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = EUidPushSIContentHandler;
+					version_no = 2;
+					display_name = "";
+					default_data = "text/vnd.wap.si||application/vnd.wap.sic";
+					opaque_data = "";
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = EUidPushSLContentHandler;
+					version_no = 2;
+					display_name = "";
+					default_data = "text/vnd.wap.sl||application/vnd.wap.slc";
+					opaque_data = "";
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = EUidPushCOContentHandler;
+					version_no = 2;
+					display_name = "";
+					default_data = "text/vnd.wap.co||application/vnd.wap.coc";
+					opaque_data = "";
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = EUidPushMultiPartMixedContentHandler;
+					version_no = 2;
+					display_name = "";
+					default_data = "application/vnd.wap.multipart.mixed||multipart/mixed";
+					opaque_data = "";
+					},
+				IMPLEMENTATION_INFO
+					{
+					implementation_uid = EUidPushMultiPartRelAndAltContentHandler;
+					version_no = 2;
+					display_name = "";
+					default_data = "application/vnd.wap.multipart.related||application/vnd.wap.multipart.alternative||multipart/related||multipart/alternative";
+					opaque_data = "";
+					}
+				};
+			}
+		};
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CCOContentHandler.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CCOContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CCOContentHandler.h"
+//#include "PushMtmUtil.h"
+//#include "PushMtmSettings.h"
+//#include <msvids.h>
+//#include <XmlElemt.h>
+
+// CONSTANTS
+
+#if defined(_DEBUG)
+_LIT( KErrPushMsgNull, "NULL CPushMessage" );
+#endif
+
+_LIT( KReserved, "Reserved" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CCOContentHandler::NewL
+// ---------------------------------------------------------
+//
+CCOContentHandler* CCOContentHandler::NewL()
+	{
+	CCOContentHandler* self = new(ELeave) CCOContentHandler;  
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::~CCOContentHandler
+// ---------------------------------------------------------
+//
+CCOContentHandler::~CCOContentHandler()
+	{
+    Cancel();
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::CCOContentHandler
+// ---------------------------------------------------------
+//
+CCOContentHandler::CCOContentHandler()
+:   CContentHandlerBase()
+	{
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
+                                        TRequestStatus& aStatus )
+	{
+	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+	iMessage = aPushMsg;
+	iAcknowledge = ETrue;
+	SetConfirmationStatus( aStatus );
+
+    iState = EDone;
+	IdleComplete();
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+	{
+	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+	
+	iAcknowledge = EFalse;
+	iMessage = aPushMsg;
+
+    iState = EDone;
+	IdleComplete();
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CPushHandlerBase_Reserved1()
+	{
+	User::Panic(KReserved, KErrNotSupported);
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CPushHandlerBase_Reserved2()
+	{
+	User::Panic(KReserved, KErrNotSupported);
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CCOContentHandler::CancelHandleMessage()
+	{
+    Cancel();
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CCOContentHandler::DoCancel()
+	{
+	Complete( KErrCancel );
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CCOContentHandler::RunL()
+	{
+	switch( iState )
+		{
+        case EDone:
+            {
+			Complete( KErrNone );
+			break;
+            }
+		default:
+			break;
+		}
+	}
+
+// ---------------------------------------------------------
+// CCOContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CCOContentHandler::RunError( TInt aError )
+	{
+	iState = EDone;
+	Complete( aError );
+	return KErrNone;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CCOContentHandler.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CCOContentHandler.
+*
+*/
+
+
+
+#ifndef __CCOCONTENTHANDLER_H__
+#define __CCOCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "PushContentHandlerDef.hrh"
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+
+// CONSTANTS
+
+const TUid KUidPushCOContentHandler	= { EUidPushCOContentHandler };
+_LIT( KCOContentHandlerData, "text/vnd.wap.co||application/vnd.wap.coc" );
+
+// FORWARD DECLARATIONS
+
+/*class CMsvSession;
+class CSLPushMsgEntry;
+class CPushMtmUtil;
+class CPushMtmSettings;*/
+
+// CLASS DECLARATION
+
+/**
+* CCOContentHandler Handles Cache Operation Content
+*
+* This handler takes ownership of the CO message and processes it
+* according to the processing rules
+* [WAP Cache Operation version 31-July-2001].
+* Also S60 specific requirements are applied.
+*
+* NB. Currently all CO push messages are discarded!
+*/
+class CCOContentHandler : public CContentHandlerBase
+	{
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @return The constructed object.
+        */
+	    static CCOContentHandler* NewL();
+
+        /**
+        * D'tor.
+        */
+	    virtual ~CCOContentHandler();
+
+    private: // Constructors
+
+        /**
+        * Constructor.
+        */
+	    CCOContentHandler();
+
+        /**
+        * Symbian OS constructor.
+        */
+	    void ConstructL();
+
+    private: // Methods from CPushHandlerBase
+
+        /**
+        * HandleMessage Async. Version. Takes ownership of Push Message and
+        * sets self active to continue processing message.
+        * @param aPushMsg CPushMessage to process.
+        * @param aStatus Request status variable for use in asynchronous
+        *        operations.
+        * @return None.
+        */
+	    void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+        /**
+        * HandleMessage Sync. Version. Takes ownership of Push Message and
+        * sets self active to continue processing message.
+        * Initial State: Set data members then go to the next state
+        * @param aPushMsg CPushMessage to process.
+        */
+	    void HandleMessageL( CPushMessage* aPushMsg );
+
+        /**
+        * Same functionality as DoCancel()
+        */
+	    void CancelHandleMessage();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved1();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved2();
+
+    private: // Methods from CActive
+
+        /**
+        * Current implementation does nothing. TODO on 2.1.
+        * @return None.
+        */
+	    void DoCancel();
+
+        /**
+        * Current implementation does nothing. TODO on 2.1.
+        * @return None.
+        */
+	    void RunL();
+
+        /**
+        * Current implementation does nothing. TODO on 2.1.
+        * @return Error code to scheduler.
+        */
+	    TInt RunError( TInt aError );
+
+    private: // Data
+
+	    enum TState
+            {
+            EDone
+            };
+    };
+
+#endif	// __CCOCONTENTHANDLER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CMultiPartMixedContentHandler.
+*
+*/
+
+// INCLUDE FILES
+
+#include "CMultiPartMixedContentHandler.h"
+#include <push/pushdispatcher.h>
+#include <push/cmultiparttextiterator.h>
+#include <push/cmultipartbiniterator.h>
+
+// Constants
+
+_LIT(KReserved, "Reserved");
+#if defined(_DEBUG)
+_LIT(KErrPushMsgNull,	"NULL CPushMessage");
+#endif
+
+/**
+ * Static Factory Construction
+ *
+ * @param aFs Reference to a file session
+ * @param aLibrary Reference to DLL Library Object
+ * @param aIndex Index number corresponding to the Unknown App Handler Class
+ *        'EMultiPartMixedContentHandler'
+ *
+ * @return fully initialized instance of this class
+ */
+CMultiPartMixedContentHandler* CMultiPartMixedContentHandler::NewL()
+	{
+	CMultiPartMixedContentHandler* self =
+        new (ELeave) CMultiPartMixedContentHandler;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/**
+ * Destructor
+ */
+CMultiPartMixedContentHandler::~CMultiPartMixedContentHandler()
+	{
+    Cancel();
+	delete iMultiMessage;
+    iContentHandler = NULL; // Not owned.
+	}
+
+/**
+ * Constructor
+ *
+ * @param aFs Reference to a file session
+ * @param aLibrary Reference to DLL Library Object
+ * @param aIndex Index number corresponding to the Unknown App Handler Class
+ *        'EMultiPartMixedContentHandler'
+ */
+CMultiPartMixedContentHandler::CMultiPartMixedContentHandler()
+:   CContentHandlerBase()
+	{
+	}
+
+/**
+ *  This will complete initialization of the object
+ */
+void CMultiPartMixedContentHandler::ConstructL()
+	{
+	CActiveScheduler::Add(this);
+	}
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+/**
+ * Creates a Multipart Binary Iterator that will be used for splitting apart the binary
+ * mulitpart.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ */
+void CMultiPartMixedContentHandler::LoadMultipartMsgL()
+	{
+	__ASSERT_DEBUG( iMessage!= 0 , User::Panic(KErrPushMsgNull,0));
+
+	TPtrC contentType;
+	iMessage->GetContentType(contentType);
+	if (!contentType.FindF(KMultipartText))
+		iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
+	else if (!contentType.FindF(KMultipartBin))
+		iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
+	else
+		User::Leave(KErrCorrupt);
+
+	iMultiMessage->FirstL();
+	iState = EHandlePart;
+
+	IdleComplete();
+	}
+
+/**
+ *	Handles the Message Part returned from the Multipart iterator
+ *  by creating a new handler based on the Content-Type, then dispatches it
+ *  synchronously.
+ */
+void CMultiPartMixedContentHandler::HandlePartL()
+	{
+	CPushMessage* msgPart = iMultiMessage->PartL();
+	CleanupStack::PushL(msgPart);
+
+	TPtrC contentType;
+	msgPart->GetContentType(contentType);
+	CContentHandlerBase& contentHandler =
+        PushContentTypeDispatcher::GetHandlerL( contentType, *iLog, *iManager );
+	iContentHandler = &contentHandler;
+	CleanupStack::Pop(msgPart);
+
+	// treat as an acknowledged message always to ensure
+	// sequential creation of handlers
+	iContentHandler->HandleMessageL(msgPart, iStatus);
+	iState = ENextPart;
+	SetActive();
+	}
+
+/**
+ *	Moves multipart iterator to the next part. If there is none,
+ *  State: EDone will be set to complete this handler
+ */
+void CMultiPartMixedContentHandler::NextPartL()
+	{
+	if (iMultiMessage->NextL())
+		iState = EHandlePart;
+	else
+		iState = EDone;
+
+	IdleComplete();
+	}
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+/**
+ * The Asynchronous entry point for this plug-in to handle the CPushMessage.
+ *
+ * Since we really didn't start an async event, make it look as though our
+ * asynchronous request has been completed.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ * @param aStatus The TRequestStatus of the caller indicating that this will
+ *        be used aysnchronously
+ */
+void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+                                                    TRequestStatus& aStatus )
+	{
+	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+	iAcknowledge = ETrue;
+	iMessage = aPushMsg;
+	SetConfirmationStatus(aStatus);
+	iState = ELoadMsgData;
+	IdleComplete();
+#else // __TEST_MULTIPART_MIX_SUPP
+	iAcknowledge = ETrue;
+	iMessage = aPushMsg;
+	SetConfirmationStatus(aStatus);
+    // Drop all multipart/mixed messages.
+    iState = EDone;
+	IdleComplete();
+#endif // __TEST_MULTIPART_MIX_SUPP
+	}
+
+
+/**
+ * The Synchronous entry point for this plug-in to handle the CPushMessage.
+ *
+ * @param aPushMsg A WAP binary multipart.mixed message that will be processed
+ * @param aStatus The TRequestStatus of the caller indicating that this will be
+ *        used aysnchronously
+ */
+void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+	{
+	__ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone));
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+	iAcknowledge = EFalse;
+	iMessage = aPushMsg;
+	iState = ELoadMsgData;
+	IdleComplete();
+#else // __TEST_MULTIPART_MIX_SUPP
+	iAcknowledge = EFalse;
+	iMessage = aPushMsg;
+    // Drop all multipart messages.
+    iState = EDone;
+	IdleComplete();
+#endif // __TEST_MULTIPART_MIX_SUPP
+	}
+
+/**
+ * Cancels Asynronous requests on called handler.
+ */
+void CMultiPartMixedContentHandler::CancelHandleMessage()
+	{
+    Cancel();
+	}
+
+void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved1()
+	{
+	User::Panic(KReserved, KErrNotSupported);
+	}
+
+void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved2()
+	{
+	User::Panic(KReserved, KErrNotSupported);
+	}
+
+/**
+ * Cancels Asynronous requests on caller and completes self.
+ */
+void CMultiPartMixedContentHandler::DoCancel()
+	{
+	if ( iContentHandler )
+        {
+		iContentHandler->CancelHandleMessage();
+        }
+	Complete( KErrCancel );
+	}
+
+/**
+ * State machine to step through the multipart message until it is done
+ *
+ * State EHandlePart: Starts the processing of each part of the multipart
+ * State ENextPart: Moves the interator to point to the next part of the multipart
+ * when there are no more parts, EDone will be the next state
+ * State EDone: Clean up and complete
+ */
+void CMultiPartMixedContentHandler::RunL()
+	{
+	switch(iState)
+		{
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+        case ELoadMsgData:
+            {
+			LoadMultipartMsgL();
+			break;
+            }
+		case EHandlePart:
+            {
+			HandlePartL();
+			break;
+            }
+		case ENextPart:
+            {
+			NextPartL();
+			break;
+            }
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+        case EDone:
+            {
+			Complete(KErrNone);
+			break;
+            }
+		default:
+            {
+			break;
+            }
+		}
+	}
+
+/**
+ * Clean up
+ */
+TInt CMultiPartMixedContentHandler::RunError(TInt aError)
+	{
+	iState=EDone;
+	Complete(aError);
+	return KErrNone;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartMixedContentHandler.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CMultiPartMixedContentHandler.
+*
+*/
+
+#ifndef __CMULTIPARTMIXEDCONTENTHANDLER_H__
+#define __CMULTIPARTMIXEDCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <push/ccontenthandlerbase.h>
+#include <E32Base.h>
+
+// CONSTANTS
+
+const TUid KUidPushMultiPartMixedContentHandler	= {
+           EUidPushMultiPartMixedContentHandler };
+_LIT(KMultiPartMixedContentHandlerData,
+     "application/vnd.wap.multipart.mixed||multipart/mixed");
+
+// FORWARD DECLARATIONS
+
+class CMultipartIteratorBase;
+
+// CLASS DECLARATION
+
+/**
+* The MultiPart/Mixed Content Handler
+*
+* Takes apart the mulitpart message, creating a new sub message from each
+* part, then calls on new Push Handlers to process each sub message.
+*
+* All multipart/mixed messages are dropped if __TEST_MULTIPART_MIX_SUPP
+* is not defined.
+*/
+class CMultiPartMixedContentHandler : public CContentHandlerBase
+	{
+    public: // Constructors and destructor
+
+	    static CMultiPartMixedContentHandler* NewL();
+
+	    virtual ~CMultiPartMixedContentHandler();
+
+    private: // Constructors
+
+	    CMultiPartMixedContentHandler();
+
+	    void ConstructL();
+
+    private: // New functions
+
+#ifdef __TEST_MULTIPART_MIX_SUPP
+
+	    void LoadMultipartMsgL();
+
+	    void HandlePartL();
+
+	    void NextPartL();
+
+#endif // __TEST_MULTIPART_MIX_SUPP
+
+    private:	// Methods from CPushHandlerBase
+
+	    void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+	    void HandleMessageL(CPushMessage* aPushMsg);
+
+	    void CancelHandleMessage();
+
+	    void CPushHandlerBase_Reserved1();
+
+	    void CPushHandlerBase_Reserved2();
+
+    private:	// Methods from CActive
+
+	    void DoCancel();
+
+	    void RunL();
+
+	    TInt RunError(TInt aError);
+
+    private:	// Attributes
+
+	    enum TState
+            {
+            ELoadMsgData,
+            EHandlePart,
+            ENextPart,
+            EDone
+            };
+
+	    CMultipartIteratorBase*		iMultiMessage;
+
+	    CContentHandlerBase*		iContentHandler;
+
+	};
+
+
+#endif	// __CMULTIPARTMIXEDCONTENTHANDLER_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,335 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CMultiPartRelAndAltContentHandler.
+*
+*/
+
+// INCLUDE FILES
+
+#include "CMultiPartRelAndAltContentHandler.h"
+#include <push/cmultipartiteratorbase.h>
+#include <msvids.h>
+
+// Constants
+
+_LIT(KReserved, "Reserved");
+
+/**
+ * Static Factory Construction
+ *
+ * version of NewLC which leaves nothing
+ * on the cleanup stack
+ */
+CMultiPartRelAndAltContentHandler* CMultiPartRelAndAltContentHandler::NewL()
+	{
+	CMultiPartRelAndAltContentHandler* self = new (ELeave) CMultiPartRelAndAltContentHandler;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/**
+ * Default d'tor
+ */
+CMultiPartRelAndAltContentHandler::~CMultiPartRelAndAltContentHandler()
+	{
+    Cancel();
+	delete iMultiMessage;
+    delete iMsvSession;
+	}
+
+/**
+ * The Multipart Related Content handler 
+ * Index number : ESLContentHandlerIndex 
+ */ 
+CMultiPartRelAndAltContentHandler::CMultiPartRelAndAltContentHandler()
+:   CContentHandlerBase(), 
+    iSavedMsgId( KMsvNullIndexEntryId )
+	{
+	}
+
+/**
+ *  This will complete initialization of the object
+ */
+void CMultiPartRelAndAltContentHandler::ConstructL()
+	{
+    iMsvSession = CMsvSession::OpenSyncL( *this );
+	CActiveScheduler::Add(this);
+	}
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+/**
+* Setup the multipart message.
+*/
+void CMultiPartRelAndAltContentHandler::LoadMultiPartMsgL()
+	{
+#ifdef _DEBUG
+	_LIT(KNullMsg,"NULL CPushMessage");
+	__ASSERT_DEBUG( iMessage != 0 , User::Panic(KNullMsg,0));
+#endif
+	TPtrC contentType;
+	iMessage->GetContentType(contentType);
+	if (!contentType.FindF(KMultipartText))
+		iMultiMessage = CMultipartTextIterator::NewL(*iMessage);
+	else if (!contentType.FindF(KMultipartBin))
+		iMultiMessage = CMultipartBinIterator::NewL(*iMessage);
+	else
+		User::Leave(KErrCorrupt);
+	iMultiMessage->FirstL();
+	IdleComplete();
+	}
+
+/**
+ *	Saves message part to messaging server
+ */
+void CMultiPartRelAndAltContentHandler::HandlePartL()
+	{
+	CPushMessage* msgPart = iMultiMessage->PartL();
+	CleanupStack::PushL(msgPart);
+
+	// Create a new Unknown Push Entry to hold the header and body data
+	CUnknownPushMsgEntry* msgEntry=CUnknownPushMsgEntry::NewL();
+	CleanupStack::PushL(msgEntry);
+	// Get the header
+	TPtrC8 header;
+	msgPart->GetHeader(header);
+	//Get the From field
+	TPtrC8 from;
+	if (!msgPart->GetBinaryHeaderField(EHttpFrom,from) &&
+		!msgPart->GetBinaryHeaderField(EHttpXWapInitiatorURI,from) &&
+		!msgPart->GetBinaryHeaderField(EHttpContentLocation,from) )
+		{
+		from.Set(KNullDesC8);
+		}
+	// Get the body
+	TPtrC8 body;
+	msgPart->GetMessageBody(body);
+	TPtrC content;
+	msgPart->GetContentType(content);
+
+	//Set fields of the Unknown Entry
+	msgEntry->SetHeaderL(header);
+	msgEntry->SetMessageDataL(body);	
+	msgEntry->SetFromL(from);
+	//Need this next  bit so UI knows what to do with the data in the Push Entry
+	msgEntry->SetContentTypeL( content );
+
+	msgEntry->SaveL( *iMsvSession, iSavedMsgId );
+	CleanupStack::PopAndDestroy( 2 ); //msgEntry, msgPart
+	
+	iState = ENextPart;
+	IdleComplete();
+
+	}
+
+/**
+ *	Move multipart iterator to the next part
+ */
+void CMultiPartRelAndAltContentHandler::NextPartL()
+	{
+	if (iMultiMessage->NextL())
+		{
+		iState = EHandlePart;
+		}
+	else 
+		{
+		iState = EDone;
+		}
+	IdleComplete();
+	}
+
+/**
+ * 
+ */
+void CMultiPartRelAndAltContentHandler::SaveMsgRootL()
+	{
+	TPtrC8 msgHeaderPtr;
+	iMessage->GetHeader(msgHeaderPtr);
+	CMultiPartPushMsgEntry* msgEntry=CMultiPartPushMsgEntry::NewL();
+	CleanupStack::PushL(msgEntry);
+	msgEntry->SetHeaderL(msgHeaderPtr); //Top level entry
+	TPtrC contentType;
+	iMessage->GetContentType(contentType);
+	msgEntry->SetContentTypeL(contentType);
+
+	iSavedMsgId = msgEntry->SaveL(*iMsvSession, 
+                                  KMsvGlobalInBoxIndexEntryId);
+	CleanupStack::PopAndDestroy();//msgEntry
+	}
+
+/**
+ * Loads multipart data and creates multipart head entry in the message 
+ * server index.
+ * @throw KErrCorrupt - message data is corrupt 
+ * @throw KErrNoMemory - insufficient free memory to complete operations
+ */
+
+void CMultiPartRelAndAltContentHandler::LoadMsgDataL()
+	{
+	LoadMultiPartMsgL();
+	SaveMsgRootL();
+	iState = EHandlePart;
+	}
+
+void CMultiPartRelAndAltContentHandler::SetMsgCorruptFlagL()
+	{
+	CMsvEntry* msvEntry = iMsvSession->GetEntryL( iSavedMsgId );
+	CleanupStack::PushL( msvEntry );
+	TMsvEntry entry = msvEntry->Entry();
+	// get the iMtmData1 value & zero bits 0-3 then add new status
+	TInt32 mtmdata1 = ( entry.iMtmData1 & 0xFFFFFFF0 );
+	mtmdata1 += CPushMsgEntryBase::EPushMsgStatusCorrupt;
+	// Now set values for TMsvEntry and update the server entry
+	entry.iMtmData1 = mtmdata1;
+	msvEntry->ChangeL( entry );
+
+	CleanupStack::PopAndDestroy( msvEntry );
+	}
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+/**
+ * Async. Version
+ */
+void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
+                                                        TRequestStatus& aStatus )
+	{
+#ifdef __TEST_MULTIPART_REL_SUPP
+	iAcknowledge=ETrue;
+	SetConfirmationStatus(aStatus);
+	iMessage = aPushMsg;
+	iState = ELoadMsgData;
+	IdleComplete();
+#else // __TEST_MULTIPART_REL_SUPP
+	iAcknowledge=ETrue;
+	SetConfirmationStatus(aStatus);
+	iMessage = aPushMsg;
+    // Drop all multipart messages.
+    iState = EDone;
+	IdleComplete();
+#endif // __TEST_MULTIPART_REL_SUPP
+	}
+
+/**
+ * Sync. Version
+ */
+void CMultiPartRelAndAltContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+	{
+#ifdef __TEST_MULTIPART_REL_SUPP
+	iAcknowledge=EFalse;
+	iMessage = aPushMsg;
+	iState = ELoadMsgData;
+	IdleComplete();
+#else // __TEST_MULTIPART_REL_SUPP
+	iAcknowledge=EFalse;
+	iMessage = aPushMsg;
+    // Drop all multipart messages.
+    iState = EDone;
+	IdleComplete();
+#endif // __TEST_MULTIPART_REL_SUPP
+	}
+
+void CMultiPartRelAndAltContentHandler::CancelHandleMessage()
+	{
+    Cancel();
+	}
+
+void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved1()
+	{
+	User::Panic(KReserved, KErrNotSupported);
+	}
+
+void CMultiPartRelAndAltContentHandler::CPushHandlerBase_Reserved2()
+	{
+	User::Panic(KReserved, KErrNotSupported);
+	}
+
+void CMultiPartRelAndAltContentHandler::DoCancel()
+	{
+	Complete( KErrCancel );
+	}
+
+/**
+*RunL handles each part separately
+*/
+void CMultiPartRelAndAltContentHandler::RunL()
+	{
+	switch(iState)
+		{
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+        case ELoadMsgData:
+            {
+			LoadMsgDataL();
+			break;
+            }
+		case EHandlePart:
+            {
+			HandlePartL();
+			break;
+            }
+		case ENextPart:
+            {
+			NextPartL();
+			break;
+            }
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+        case EDone:
+            {
+			Complete(KErrNone);
+			break;
+            }
+		default:
+            {
+			break;
+            }
+		}
+	}
+
+/** 
+ * Clean up
+ */
+TInt CMultiPartRelAndAltContentHandler::RunError(TInt aError)
+	{
+	iState=EDone;
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+    if (iSavedMsgId != KMsvNullIndexEntryId)
+		{
+		TRAPD(error, SetMsgCorruptFlagL());
+		}
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+	Complete(aError);
+	return KErrNone;
+	}
+
+// ---------------------------------------------------------
+// CMultiPartRelAndAltContentHandler::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CMultiPartRelAndAltContentHandler::HandleSessionEventL( 
+                                             TMsvSessionEvent /*aEvent*/, 
+                                             TAny* /*aArg1*/, 
+                                             TAny* /*aArg2*/, 
+                                             TAny* /*aArg3*/ )
+    {}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CMultiPartRelAndAltContentHandler.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CMultiPartRelAndAltContentHandler.
+*
+*/
+
+
+
+#ifndef __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+#define __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+
+// System includes
+//
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+#include <msvstd.h>
+#include <msvapi.h>
+
+// Constants
+//
+const TUid KUidPushMultiPartRelAndAltContentHandler	= {
+           EUidPushMultiPartRelAndAltContentHandler };
+
+// Forward class declarations
+//
+class CMsvSession;
+class CMultipartIteratorBase;
+
+/**
+* The MultiPart/Alternative & Multipart/Alternative Content Handler
+*
+* Saves the whole message in the Message Server, each part getting saved as a child
+* entry to the main part.
+*
+* All multipart/rel+alt messages are dropped if __TEST_MULTIPART_REL_SUPP
+* is not defined.
+*/
+class CMultiPartRelAndAltContentHandler : public CContentHandlerBase,
+                                          public MMsvSessionObserver
+	{
+    public:	// Methods
+
+	    static CMultiPartRelAndAltContentHandler* NewL();
+
+	    virtual ~CMultiPartRelAndAltContentHandler();
+
+    private: // Constructors
+
+	    CMultiPartRelAndAltContentHandler();
+
+	    void ConstructL();
+
+    private: // New functions
+
+#ifdef __TEST_MULTIPART_REL_SUPP
+
+        void LoadMultiPartMsgL();
+
+	    void HandlePartL();
+
+	    void NextPartL();
+
+	    void SaveMsgRootL();
+
+	    void LoadMsgDataL();
+
+	    void SetMsgCorruptFlagL();
+
+#endif // __TEST_MULTIPART_REL_SUPP
+
+    private:	// Methods from CPushHandlerBase
+
+	    void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+	    void HandleMessageL(CPushMessage* aPushMsg);
+
+	    void CancelHandleMessage();
+
+	    void CPushHandlerBase_Reserved1();
+
+	    void CPushHandlerBase_Reserved2();
+
+    private:	// Methods from CActive
+
+	    void DoCancel();
+
+	    void RunL();
+
+	    TInt RunError(TInt aError);
+
+    private: // from MMsvSessionObserver
+
+        void HandleSessionEventL( TMsvSessionEvent aEvent,
+                                  TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+    private:	// Attributes
+
+	    enum TState
+            {
+            ELoadMsgData,
+            EHandlePart,
+            EDone,
+            ENextPart
+            };
+
+        CMsvSession* iMsvSession; ///< Has.
+
+        TMsvId              iSavedMsgId;
+
+	    CMultipartIteratorBase*	iMultiMessage;
+    };
+
+#endif    // __CMULTIPARTRELANDALTCONTENTHANDLER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,156 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CPushContentHandlerBase.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushInitiatorList.h"
+#include "PushInitiator.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmLog.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "PushContentHandlerPanic.h"
+#include <PushEntry.h>
+#include <push/pushmessage.h>
+#include <msvstd.h>
+#include <mtclreg.h>
+#include <mtclbase.h>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::CPushContentHandlerBase
+// ---------------------------------------------------------
+//
+CPushContentHandlerBase::CPushContentHandlerBase()
+:   CContentHandlerBase()
+	{
+	}
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::ConstructL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::ConstructL()
+	{
+    iMsvSession = CMsvSession::OpenSyncL( *this );
+    PUSHLOG_WRITE("CPushContentHandlerBase iMsvSession OK")
+	iWapPushUtils = CPushMtmUtil::NewL( *iMsvSession );
+    PUSHLOG_WRITE("CPushContentHandlerBase iWapPushUtils OK")
+    iMtmSettings = CPushMtmSettings::NewL();
+    PUSHLOG_WRITE("CPushContentHandlerBase iMtmSettings OK")
+
+    // Add resource file reader.
+    TParse* fileParser = new (ELeave) TParse;
+    CleanupStack::PushL( fileParser );
+    fileParser->Set( KPushMtmUiResourceFileAndDrive, &KDC_MTM_RESOURCE_DIR, NULL ); 
+    iStrRscReader = new (ELeave) CStringResourceReader
+                    ( iMsvSession->FileSession(), fileParser->FullName() );
+    CleanupStack::PopAndDestroy( fileParser ); // fileParser
+    fileParser = NULL;
+    PUSHLOG_WRITE("CPushContentHandlerBase iStrRscReader OK")
+
+    CActiveScheduler::Add( this );
+	}
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::~CPushContentHandlerBase
+// ---------------------------------------------------------
+//
+CPushContentHandlerBase::~CPushContentHandlerBase()
+	{
+    PUSHLOG_ENTERFN("CPushContentHandlerBase::~CPushContentHandlerBase")
+
+    // Call Cancel() in derived classes!
+    delete iStrRscReader; // Must be deleted before iMsvSession.
+    delete iMtmSettings; // It has to be deleted before iMsvSession, because 
+    // it uses iMsvSession->FileSession().
+	delete iWapPushUtils;
+    delete iMsvSession;
+
+    PUSHLOG_LEAVEFN("CPushContentHandlerBase::~CPushContentHandlerBase")
+	}
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::DoCollectGarbageL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::DoCollectGarbageL()
+	{
+    PUSHLOG_ENTERFN("CPushContentHandlerBase::DoCollectGarbageL")
+
+    CClientMtmRegistry* clientReg = CClientMtmRegistry::NewL( *iMsvSession );
+    CleanupStack::PushL( clientReg );
+    PUSHLOG_WRITE("CPushContentHandlerBase clientReg OK")
+    CBaseMtm* pushMtm = clientReg->NewMtmL( KUidMtmWapPush );
+    CleanupStack::PushL( pushMtm );
+    PUSHLOG_WRITE("CPushContentHandlerBase pushMtm OK")
+    CMsvEntrySelection* dummySel = new (ELeave) CMsvEntrySelection;
+    CleanupStack::PushL( dummySel );
+    TBuf8<1> dummyPar;
+
+    pushMtm->InvokeSyncFunctionL( EPushMtmCmdCollectGarbage, 
+                                  *dummySel, dummyPar );
+
+    CleanupStack::PopAndDestroy( 3, clientReg );
+                                // dummySel, pushMtm, clientReg
+
+    PUSHLOG_LEAVEFN("CPushContentHandlerBase::DoCollectGarbageL")
+    }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::FilterPushMsgL
+// ---------------------------------------------------------
+//
+TBool CPushContentHandlerBase::FilterPushMsgL()
+    {
+    PUSHLOG_ENTERFN("CPushContentHandlerBase::FilterPushMsgL")
+
+	TBool msgAccepted = ETrue;
+
+    if ( iMtmSettings->ServiceReception() == EFalse )
+        {
+        // Discard message.
+        msgAccepted = EFalse;
+        PUSHLOG_WRITE(" ServiceReception OFF")
+        }
+
+    PUSHLOG_WRITE_FORMAT(" msgAccepted <%d>",msgAccepted)
+    PUSHLOG_LEAVEFN("CPushContentHandlerBase::FilterPushMsgL")
+    return msgAccepted;
+    }
+
+// ---------------------------------------------------------
+// CPushContentHandlerBase::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CPushContentHandlerBase::HandleSessionEventL
+    ( 
+        TMsvSessionEvent /*aEvent*/, 
+        TAny* /*aArg1*/, 
+        TAny* /*aArg2*/, 
+        TAny* /*aArg3*/ 
+    )
+    {
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CPushContentHandlerBase.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CPushContentHandlerBase.
+*
+*/
+
+
+
+#ifndef __CPUSHCONTENTHANDLERBASE_H__
+#define __CPUSHCONTENTHANDLERBASE_H__
+
+
+// INCLUDE FILES
+
+#include <push/CContentHandlerBase.h>
+#include <E32Base.h>
+#include <msvstd.h>
+#include <msvapi.h>
+
+// FORWARD DECLARATIONS
+
+class CMsvSession;
+class CPushMtmUtil;
+class CPushMtmSettings;
+class CStringResourceReader;
+
+// CLASS DECLARATION
+
+/**
+* CPushContentHandlerBase class stands as a base class for almost all push
+* content handlers of the Push MTM. It collects the generic functionality of
+* a push content handler, such as garbage collection when receiving new
+* service message, supporting CMsvSession, CPushMtmUtil and CPushMtmSettings
+* objects.
+*/
+class CPushContentHandlerBase : public CContentHandlerBase,
+                                public MMsvSessionObserver
+	{
+    protected: // Constructors and destructor
+
+        /**
+        * Constructor.
+        */
+	    CPushContentHandlerBase();
+
+        /**
+        * Symbian OS constructor. CActiveScheduler::Add( this ) is called in
+        * this method!!
+        */
+	    void ConstructL();
+
+        /**
+        * Destructor.
+        */
+	    virtual ~CPushContentHandlerBase();
+
+    protected: // New functions
+
+        /**
+        * Do Garbage Collection synchronously.
+        * @return None.
+        */
+	    void DoCollectGarbageL();
+
+        /**
+        * Apply Push MTM settings on the message.
+        * @return ETrue if the message passed the filtering.
+        */
+        TBool FilterPushMsgL();
+
+    protected: // From MMsvSessionObserver
+
+        /**
+        * Msv session events are handled by this method. This implementation
+        * is empty.
+        * @return None.
+        */
+        void HandleSessionEventL( TMsvSessionEvent aEvent,
+                                  TAny* aArg1,
+                                  TAny* aArg2,
+                                  TAny* aArg3);
+
+    protected: // Data
+
+        CMsvSession* iMsvSession; ///< Session to Message Server. Has.
+        CPushMtmUtil* iWapPushUtils; ///< Push Utility. Has.
+        CPushMtmSettings* iMtmSettings; ///< Push Settings. Has.
+        /// Owned. It uses iMsvSession's RFs!
+        CStringResourceReader* iStrRscReader;
+    };
+
+#endif	// __CPUSHCONTENTHANDLERBASE_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSIContentHandler.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,1835 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CSIContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CSIContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushMtmLog.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "PushContentHandlerPanic.h"
+#include "si_dict.h"
+#include "PushContentHandlerUtils.h"
+#include <push/CSIPushMsgEntry.h>
+#include <msvids.h>
+#include <PushMtmUi.rsg>
+#include <nw_dom_node.h>
+#include <nw_dom_document.h>
+#include <nw_dom_element.h>
+#include <nw_dom_text.h>
+#include <nw_wbxml_dictionary.h>
+#include <THttpFields.h>
+
+// CONSTANTS
+
+// si attributes / elements
+_LIT8( KSi,          "si" );
+_LIT8( KIndication,  "indication" );
+_LIT8( KHrefAttrib,  "href" );
+_LIT8( KSiIdAttrib,  "si-id" );
+_LIT8( KCreatedAttrib,   "created" );
+_LIT8( KExpiresAttrib,   "si-expires" );
+_LIT8( KActionAttrib,    "action" );
+
+// action attribute literals
+_LIT8( KDeleteAction,    "delete" );
+_LIT8( KSignalNone,      "signal-none" );
+_LIT8( KSignalLow,       "signal-low" );
+_LIT8( KSignalMedium,    "signal-medium" );
+_LIT8( KSignalHigh,      "signal-high" );
+
+_LIT( KSiTextContentType, "text/vnd.wap.si" );
+
+const TInt KValidMaxEncodedDateTimeSize = 7;
+const TInt KValidUTCLength = 20; // YYYY-MM-DDTHH:MM:SSZ
+const TInt KValidUTCNumericals = 14;
+const TInt KValidUTCYearBlockLength = 4;
+const TInt KValidUTCOtherBlockLength = 2;
+const TUint8 KAsciiZeroCharCode = 0x30;
+
+const TInt KValidTTimeMonthStart = 4;
+const TInt KValidTTimeDayStart = 6;
+const TInt KValidTTimeHourStart = 8;
+const TInt KValidTTimeMinuteStart = 10;
+const TInt KValidTTimeSecondStart = 12;
+const TInt KValidTTimeBlockLength = 2;
+
+const TInt KValidTTimeLength = 14; // YYYYMMDDHHMMSS
+
+const TInt KNoOfDictArrays = 1;
+
+_LIT( KCharMinus, "-" );
+_LIT( KCharT, "T" );
+_LIT( KCharColon, ":" );
+_LIT( KCharZ, "Z" );
+
+/// Conversion buffer size.
+LOCAL_D const TInt KPushConversionBufferSize = 256;
+/// Zero width non-breaking space character.
+LOCAL_D const TUint16 KPushZeroWidthNbsp = 0xfeff;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CSIContentHandler::NewL
+// ---------------------------------------------------------
+//
+CSIContentHandler* CSIContentHandler::NewL()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::NewL")
+
+	CSIContentHandler* self = new (ELeave) CSIContentHandler;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::NewL")
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::~CSIContentHandler
+// ---------------------------------------------------------
+//
+CSIContentHandler::~CSIContentHandler()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::~CSIContentHandler")
+
+    Cancel();
+	delete iHrefBuf;
+	delete iSiIdBuf;
+	delete iData;
+    delete iCharacterSetConverter;
+    iCharacterSetConverter = NULL;
+    delete iCharacterSetsAvailable;
+    iCharacterSetsAvailable = NULL;
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::~CSIContentHandler")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::CSIContentHandler
+// ---------------------------------------------------------
+//
+CSIContentHandler::CSIContentHandler()
+:   CPushContentHandlerBase(),
+    iSavedMsgId( KMsvNullIndexEntryId ),
+    iPushMsgAction( KErrNotFound ),
+    iExpiresTime( Time::NullTTime() ),
+    iCreatedTime( Time::NullTTime() )
+	{
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ConstructL()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ConstructL")
+
+    CPushContentHandlerBase::ConstructL();
+    // Added to Active Scheduler.
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ConstructL")
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CollectGarbageL()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::CollectGarbageL")
+
+    DoCollectGarbageL();
+
+    //Ready.
+    iState = EFilteringAndParsing;
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::CollectGarbageL")
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParsePushMsgL
+// Note that cXML parser dosn't do any validation!
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParsePushMsgL()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ParsePushMsgL")
+
+    TPtrC8 bodyPtr;
+    iMessage->GetMessageBody( bodyPtr );
+    // If there is no body in the message leave with an error
+    if ( bodyPtr.Size() == 0 )
+        {
+        PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: Empty body")
+        User::Leave( KErrCorrupt );
+        }
+
+    // Get content type. It will tell us wheather the msg body is encoded or
+    // textual.
+    TPtrC contentType;
+	iMessage->GetContentType( contentType );
+    PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: HTTP header - Content type <%S>",&contentType);
+
+    /*
+    TPtrC8 encodingPtr;
+    TBool encodingFound = iMessage->GetHeaderField
+                          ( EHttpContentEncoding, encodingPtr );
+    #ifdef __TEST_LOG__
+    TBuf<64> encodingBuf;
+    encodingBuf.Copy( encodingPtr );
+    PUSHLOG_WRITE_FORMAT(" HTTP header - Content encoding <%S>",&encodingBuf);
+    #endif // __TEST_LOG__
+    */
+
+    // Add SI dictionary.
+    NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] =
+        { (NW_WBXML_Dictionary_t*)&NW_SI_WBXMLDictionary };
+
+    NW_Status_t stat = NW_STAT_SUCCESS;
+
+    RWbxmlDictionary wbxmlDict;
+    wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
+    CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
+
+    NW_TinyDom_Handle_t domHandle;
+    NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
+    NW_Int32 length = (NW_Int32)bodyPtr.Size();
+    // Let's use the content type now.
+    NW_Bool encoded = ( contentType.CompareF( KSiTextContentType ) == 0 ) ?
+                                                         NW_FALSE : NW_TRUE;
+    // SI public identifier.
+    NW_Uint32 publicID = NW_SI_PublicId;
+    NW_Bool extTNotStringTable = NW_FALSE;
+    NW_DOM_NodeType_t type = 0;
+    /**********************************
+    *   Root of DOM
+    ***********************************/
+    CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
+    CleanupStack::PushL( docTreeOwner );
+    NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
+        (
+                            &domHandle,
+                            buffer,
+                            length,
+                            encoded,
+                            publicID,
+                            extTNotStringTable
+        );
+	if (!domNode)
+		{
+		PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is Null")
+		}
+    User::LeaveIfNull( domNode );
+	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: domNode is not Null") // to be deleted
+    // Let domNode be on the Cleanup Stack.
+    docTreeOwner->SetDocTree( domNode );
+
+    // It must be a document node.
+    type = NW_DOM_Node_getNodeType( domNode );
+    if ( type != NW_DOM_DOCUMENT_NODE )
+        {
+        PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not Document node <%d>",type)
+        User::Leave( KErrArgument );
+        }
+
+    // Get character encoding (NW_Uint32)
+    iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
+    PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
+
+    /**********************************
+    *   ELEMENT si
+    ***********************************/
+    // Get the first element of the document that must be an si.
+	// first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
+	TBool domNodeHasChildNodes = EFalse;
+	domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
+	PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
+	if (!domNodeHasChildNodes)
+        {
+        PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No SI element present in the dom tree. Message corrupted.")
+        User::Leave( KErrCorrupt );
+        }
+
+	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: before calling getDocumentElement")
+    NW_DOM_ElementNode_t* siElement =
+        NW_DOM_DocumentNode_getDocumentElement( domNode );
+	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: after calling getDocumentElement")
+	if (!siElement)
+		{
+		PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is Null")
+		}
+	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, before leaving")
+    User::LeaveIfNull( siElement );
+	PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: siElement is not Null, after leaving if siElement is null")
+
+    type = NW_DOM_Node_getNodeType( siElement );
+
+    CStringOwner* stringOwner = new (ELeave) CStringOwner;
+    CleanupStack::PushL( stringOwner );
+
+    NW_String_t* name = NW_String_new();
+    User::LeaveIfNull( name );
+    // Let name be on the Cleanup Stack.
+    stringOwner->SetString( name );
+    stat = NW_DOM_Node_getNodeName( siElement, name );
+    User::LeaveIfError( NwxStatusToErrCode( stat ) );
+    NW_Byte*  nameBuf = NW_String_getStorage( name );
+    NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
+    TPtrC8 namePtr( nameBuf, nameLen );
+
+    // Now comes the validity check.
+    if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSi ) != 0 )
+        {
+        PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Not si element node <%d>",type)
+        User::Leave( KErrArgument );
+        }
+
+    CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+    /**********************************
+    *   ELEMENT indication
+    ***********************************/
+    if ( NW_DOM_Node_hasChildNodes( siElement ) )
+        {
+        NW_DOM_Node_t* node = NW_DOM_Node_getFirstChild( siElement );
+		if (!node)
+			{
+			PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: no si child nodes!")
+			}
+        User::LeaveIfNull( node );
+
+        // Find the indication element.
+        TBool indicationFound = EFalse;
+        do {
+            type = NW_DOM_Node_getNodeType( node );
+
+            CStringOwner* stringOwner = new (ELeave) CStringOwner;
+            CleanupStack::PushL( stringOwner );
+
+            NW_String_t* name = NW_String_new();
+            User::LeaveIfNull( name );
+            stringOwner->SetString( name );
+            stat = NW_DOM_Node_getNodeName( node, name );
+			PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
+            User::LeaveIfError( NwxStatusToErrCode( stat ) );
+            NW_Byte*  nameBuf = NW_String_getStorage( name );
+            NW_Uint16 nameLen = NW_String_getCharCount( name,
+                                                        iCharEncoding );
+            TPtrC8 namePtr( nameBuf, nameLen );
+
+            if ( type == NW_DOM_ELEMENT_NODE &&
+                 namePtr.CompareF( KIndication ) == 0 )
+                {
+                // We found the indication element. Parse it.
+                PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: indication under si found.")
+                indicationFound = ETrue;
+                NW_DOM_ElementNode_t* indicationElement =
+                    REINTERPRET_CAST( NW_DOM_ElementNode_t*, node );
+                ParseIndicationL( *indicationElement );
+                }
+
+            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+            if ( !indicationFound )
+                {
+                // Iterate next.
+                node = NW_DOM_Node_getNextSibling( node );
+                if ( !node )
+                    {
+                    PUSHLOG_WRITE("CSIContentHandler::ParsePushMsgL: No more sibling.")
+                    break;
+                    }
+                }
+
+            } while ( !indicationFound );
+        }
+
+    // Cleanup.
+    CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
+
+    if ( !ActionFlag() )
+        {
+        // default if no action explicitly stated
+        iPushMsgAction = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+        SetActionFlag( ETrue );
+        PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParsePushMsgL: Defaulting to ActionFlag: %d",iPushMsgAction)
+        }
+
+    iState = EProcessing;
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ParsePushMsgL")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseIndicationL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseIndicationL( NW_DOM_ElementNode_t& aIndication )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ParseIndicationL")
+
+    NW_Status_t stat = NW_STAT_SUCCESS;
+    NW_DOM_NodeType_t type = 0;
+
+    if ( NW_DOM_ElementNode_hasAttributes( &aIndication ) )
+        {
+        NW_DOM_AttributeListIterator_t attrIter;
+        stat = NW_DOM_ElementNode_getAttributeListIterator
+                             ( &aIndication, &attrIter );
+		PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
+        User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+        NW_DOM_AttributeHandle_t attrHandle;
+        while ( NW_DOM_AttributeListIterator_getNextAttribute
+                ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
+            {
+            ParseIndAttributeL( attrHandle );
+            }
+        }
+
+    /**********************************
+    *   PCDATA of ELEMENT indication
+    ***********************************/
+    if ( NW_DOM_Node_hasChildNodes( &aIndication ) )
+        {
+        NW_DOM_TextNode_t* textNode =
+            NW_DOM_Node_getFirstChild( &aIndication );
+        User::LeaveIfNull( textNode );
+
+        type = NW_DOM_Node_getNodeType( textNode );
+        if ( type != NW_DOM_TEXT_NODE )
+            {
+            PUSHLOG_WRITE_FORMAT("CSIContentHandler::ParseIndicationL: Not text node <%d>",type)
+            User::Leave( KErrArgument );
+            }
+
+        ParseTextL( *textNode );
+        }
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndicationL")
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseIndAttributeL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseIndAttributeL( NW_DOM_AttributeHandle_t&
+                                            aAttrHandle )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ParseIndAttributeL")
+
+    NW_Status_t stat = NW_STAT_SUCCESS;
+
+    CStringOwner* stringOwner = new (ELeave) CStringOwner;
+    CleanupStack::PushL( stringOwner );
+
+    NW_String_t* attrName = NW_String_new();
+    User::LeaveIfNull( attrName );
+    stringOwner->SetString( attrName );
+
+    // Get the name of the attribute.
+    stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
+    User::LeaveIfError( NwxStatusToErrCode( stat ) );
+    NW_Byte*  attrNameBuf = NW_String_getStorage( attrName );
+    NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
+    TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
+
+    if ( attrNamePtr.CompareF( KCreatedAttrib ) == 0 )
+        {
+        if ( CreatedFlag() )
+            {
+            PUSHLOG_WRITE(" created redefinition")
+            User::Leave( KErrCorrupt );
+            }
+        else
+            {
+            TBool gotDate = AttributeToTTimeL( aAttrHandle, iCreatedTime );
+            SetCreatedFlag( gotDate );
+            PUSHLOG_WRITE_FORMAT(" iCreatedTime set %d",gotDate?1:0)
+            }
+        }
+    else if ( attrNamePtr.CompareF( KHrefAttrib ) == 0 )
+        {
+        if ( HrefFlag() )
+            {
+            PUSHLOG_WRITE(" href redefinition")
+            User::Leave( KErrCorrupt );
+            }
+        else
+            {
+            CStringOwner* stringOwner = new (ELeave) CStringOwner;
+            CleanupStack::PushL( stringOwner );
+
+            NW_String_t* val = NW_String_new();
+            User::LeaveIfNull( val );
+            stringOwner->SetString( val );
+            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+            if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
+                {
+                User::LeaveIfError( NwxStatusToErrCode( stat ) );
+                NW_Byte* storage = NW_String_getStorage( val );
+                NW_Uint16 length = NW_String_getCharCount( val,
+                                                           iCharEncoding );
+                if ( length == 0 )
+                    {
+                    // Zero length href attribute is considered as missing.
+                    PUSHLOG_WRITE(" Zero length HrefFlag");
+                    }
+                else
+                    {
+                    TPtrC8 hrefPtr( storage, length );
+                    HBufC* tempHrefBuf = HBufC::NewMaxL( length );
+                    // No leavable after it!!! until...
+                    tempHrefBuf->Des().Copy( hrefPtr );
+                    iHrefBuf = tempHrefBuf; // ...until here.
+                    SetHrefFlag( ETrue );
+                    PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
+                    }
+                }
+
+            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+            }
+        }
+    else if ( attrNamePtr.CompareF( KExpiresAttrib ) == 0 )
+        {
+        if ( ExpiresFlag() )
+            {
+            PUSHLOG_WRITE(" expires redefinition")
+            User::Leave( KErrCorrupt );
+            }
+        else
+            {
+            TBool gotDate = AttributeToTTimeL( aAttrHandle, iExpiresTime );
+            SetExpiresFlag( gotDate );
+            PUSHLOG_WRITE_FORMAT(" iExpiresTime set %d",gotDate?1:0)
+            }
+        }
+    else if ( attrNamePtr.CompareF( KSiIdAttrib ) == 0 )
+        {
+        if ( SiIdFlag() )
+            {
+            PUSHLOG_WRITE(" si-id redefinition")
+            User::Leave( KErrCorrupt );
+            }
+        else
+            {
+            // It is expected to be String.
+            CStringOwner* stringOwner = new (ELeave) CStringOwner;
+            CleanupStack::PushL( stringOwner );
+
+            NW_String_t* val = NW_String_new();
+            User::LeaveIfNull( val );
+            stringOwner->SetString( val );
+            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+            User::LeaveIfError( NwxStatusToErrCode( stat ) );
+            NW_Byte* storage = NW_String_getStorage( val );
+            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+            TPtrC8 siidPtr( storage, length );
+
+            iSiIdBuf = HBufC::NewMaxL( siidPtr.Length() );
+            iSiIdBuf->Des().Copy( siidPtr );
+            SetSiIdFlag( ETrue );
+            PUSHLOG_WRITE_FORMAT(" SiIdFlag set <%S>",iSiIdBuf)
+
+            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+            }
+        }
+    else if ( attrNamePtr.CompareF( KActionAttrib ) == 0 )
+        {
+        if ( ActionFlag() )
+            {
+            PUSHLOG_WRITE(" action redefinition")
+            User::Leave( KErrCorrupt );
+            }
+        else
+            {
+            // It is expected to be String.
+            CStringOwner* stringOwner = new (ELeave) CStringOwner;
+            CleanupStack::PushL( stringOwner );
+
+            NW_String_t* val = NW_String_new();
+            User::LeaveIfNull( val );
+            stringOwner->SetString( val );
+            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+            User::LeaveIfError( NwxStatusToErrCode( stat ) );
+            NW_Byte* storage = NW_String_getStorage( val );
+            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+            TPtrC8 actionPtr( storage, length );
+
+            iPushMsgAction = ConvertActionString( actionPtr );
+            SetActionFlag( ETrue );
+            PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
+
+            CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+            }
+        }
+    else
+        {
+        __ASSERT_DEBUG( EFalse,
+            ContHandPanic( EPushContHandPanUnexpSiToken ) );
+        }
+
+    CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ParseIndAttributeL")
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ParseTextL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ParseTextL( NW_DOM_TextNode_t& aTextNode )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ParseTextL")
+
+    if ( DataFlag() )
+        {
+        PUSHLOG_WRITE(" Data flag already set.")
+        }
+    else
+        {
+        CStringOwner* stringOwner = new (ELeave) CStringOwner;
+        CleanupStack::PushL( stringOwner );
+
+        NW_String_t* data = NW_String_new();
+        User::LeaveIfNull( data );
+        stringOwner->SetString( data );
+        NW_Status_t stat = NW_STAT_SUCCESS;
+        stat = NW_DOM_TextNode_getData( &aTextNode, data );
+        User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+        HBufC16* ucs2buffer = ConvertToUnicodeL( *data, iCharEncoding );
+        // Be careful: ucs2buffer is not on the CleanupStack!
+        __ASSERT_DEBUG( ucs2buffer != 0, ContHandPanic( EPushContHandPanNullUcs2Buf ) );
+
+        TPtrC16 ucs2ptrC( *ucs2buffer );
+        if ( ucs2ptrC.Length() == 0 )
+            {
+            // Zero length data is considered as nothing.
+            PUSHLOG_WRITE(" Zero length Data");
+            }
+        else
+            {
+            PUSHLOG_WRITE_FORMAT(" Data: <%S>",&ucs2ptrC);
+
+            #ifdef __TEST_LOG__
+            // Write out each unicode character identifier
+            TInt length = ucs2ptrC.Length();
+            for (TInt logI=0;logI<length;logI++)
+                {
+                TBuf16<1> currChar;
+                currChar.Copy( ucs2ptrC.Mid( logI, /*aLength*/1 ) );
+                PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
+                }
+            #endif // __TEST_LOG__
+
+            iData = ucs2buffer; // Ownership transferred.
+            ucs2buffer = NULL;
+            SetDataFlag( ETrue );
+            }
+
+        CleanupStack::PopAndDestroy( stringOwner );
+        }
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ParseTextL")
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertToUnicodeL
+// ---------------------------------------------------------
+//
+HBufC16* CSIContentHandler::ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
+
+    __ASSERT_DEBUG( aCharSetId != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
+
+    InitialiseCharacterSetConverterL();
+
+    HBufC16* ucs2buffer = NULL; // The return value.
+    TBool resultOnStack = EFalse;
+
+    #ifdef __TEST_LOG__
+    // Write out the original 8-bit buffer
+    TInt origiLength = aSrc.Length();
+    for (TInt origiLogI=0;origiLogI<origiLength;origiLogI++)
+        {
+        TBuf16<1> currChar; // Only 16-bit buffer can be written out.
+        currChar.Copy( aSrc.Mid( origiLogI, /*aLength*/1 ) );
+        PUSHLOG_WRITE_FORMAT2(" 0x%x %S",currChar[0],&currChar);
+        }
+    #endif // __TEST_LOG__
+
+    // Result
+    HBufC16* buffer = HBufC16::NewLC( KPushConversionBufferSize );
+    PUSHLOG_WRITE(" buffer allocated");
+    TPtr16 ptr( buffer->Des() );
+
+    // Prepare conversion for the given charset ID.
+    RFs& fs = iMsvSession->FileSession();
+    iCharacterSetConverter->PrepareToConvertToOrFromL
+        ( aCharSetId, *iCharacterSetsAvailable, fs );
+    PUSHLOG_WRITE(" PrepareToConvertToOrFromL OK");
+
+    TInt state = 0;
+    TInt remaining = iCharacterSetConverter->ConvertToUnicode( ptr, aSrc, state );
+    PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
+    while ( remaining >= 0 )
+        {
+        if ( ucs2buffer == NULL )
+            {
+            ucs2buffer = HBufC::NewLC( ptr.Length() );
+            resultOnStack = ETrue;
+            }
+        else
+            {
+            __ASSERT_DEBUG( resultOnStack,
+                ContHandPanic( EPushContHandPanSiResNotOnStack ) );
+            // This may change the address of ucs2buffer so we need to put
+            // it on the cleanup stack again!!
+            ucs2buffer = ucs2buffer->ReAllocL
+                ( ucs2buffer->Length() + ptr.Length() );
+            CleanupStack::Pop();    // old ucs2buffer
+            CleanupStack::PushL( ucs2buffer );  // possibly new copy
+            PUSHLOG_WRITE(" ucs2buffer reallocated");
+            }
+        TPtr16 ucs2ptr( ucs2buffer->Des() );
+        ucs2ptr.Append( ptr );
+        if ( remaining > 0 )
+            {
+            // Try to convert all remaining characters.
+            ptr.Zero();
+            remaining = iCharacterSetConverter->ConvertToUnicode
+                ( ptr, aSrc.Right( remaining ), state );
+            PUSHLOG_WRITE_FORMAT(" remaining: %d",remaining);
+            }
+        else
+            {
+            PUSHLOG_WRITE(" break");
+            break;
+            }
+        }
+
+    if ( resultOnStack )
+        {
+        CleanupStack::Pop();    // ucs2buffer
+        resultOnStack = EFalse;
+        }
+
+    // ucs2buffer is not on the CleanupStack!
+
+    CleanupStack::PopAndDestroy( buffer ); // buffer
+
+    if ( ucs2buffer == NULL )
+        {
+        PUSHLOG_WRITE(" NULL ucs2buffer - allocating an empty buf");
+        ucs2buffer = KNullDesC().AllocL();
+        }
+    else
+        {
+        // Check if first character is a Zero-width nbsp.
+        TPtrC16 ucs2ptrC( *ucs2buffer );
+        if ( ucs2ptrC.Length() >= 1 && ucs2ptrC[0] == KPushZeroWidthNbsp )
+            {
+            // First character is a Zero-width NBSP. This character is used as
+            // BOM in some encodings and should not be present at this point.
+            // But we are tolerant and remove it.
+            // (Not expecting big-endianness here.)
+            HBufC16* temp = ucs2buffer;
+            CleanupStack::PushL( temp );
+            ucs2buffer = ucs2ptrC.Mid( 1 ).AllocL();
+            CleanupStack::PopAndDestroy( temp ); // temp
+            PUSHLOG_WRITE(" BOM removed");
+            }
+        else
+            {
+            PUSHLOG_WRITE(" No BOM");
+            }
+        }
+
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
+    return ucs2buffer;
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertToUnicodeL
+// ---------------------------------------------------------
+//
+HBufC16* CSIContentHandler::ConvertToUnicodeL
+    ( NW_String_t& aString, NW_Uint32 aCharEncoding )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ConvertToUnicodeL");
+
+    /* As cXmlLibrary does, we support only the following charsets:
+    #define HTTP_iso_10646_ucs_2        0x03E8
+    #define HTTP_iso_8859_1             0x04
+    #define HTTP_us_ascii               0x03
+    #define HTTP_utf_8                  0x6A
+    #define HTTP_utf_16                 1015
+    */
+    TUint id = 0;
+    if ( aCharEncoding == HTTP_iso_10646_ucs_2 )
+        {
+        id = KCharacterSetIdentifierUcs2;
+        PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
+        }
+    else if ( aCharEncoding == HTTP_iso_8859_1 )
+        {
+        id = KCharacterSetIdentifierIso88591;
+        PUSHLOG_WRITE(" KCharacterSetIdentifierIso88591")
+        }
+    else if ( aCharEncoding == HTTP_us_ascii )
+        {
+        id = KCharacterSetIdentifierAscii;
+        PUSHLOG_WRITE(" KCharacterSetIdentifierAscii")
+        }
+    else if ( aCharEncoding == HTTP_utf_8 )
+        {
+        id = KCharacterSetIdentifierUtf8;
+        PUSHLOG_WRITE(" KCharacterSetIdentifierUtf8")
+        }
+    else if ( aCharEncoding == HTTP_utf_16 ) // No such in CharConv.h
+        {
+        id = KCharacterSetIdentifierUcs2;
+        PUSHLOG_WRITE(" KCharacterSetIdentifierUcs2")
+        }
+    else
+        {
+        id = KCharacterSetIdentifierUtf8; // Defaulting to UTF-8
+        PUSHLOG_WRITE(" DEFAULTING to KCharacterSetIdentifierUtf8");
+        }
+
+    PUSHLOG_WRITE_FORMAT(" id: 0x%x",id);
+    __ASSERT_DEBUG( id != 0, ContHandPanic( EPushContHandPanNullCharSetId ) );
+
+    // Source
+    PUSHLOG_WRITE_FORMAT(" Storage: 0x%x",NW_String_getStorage(&aString));
+    PUSHLOG_WRITE_FORMAT(" Byte count: %d",NW_String_getByteCount(&aString)-1);
+
+    // We will use NW_String_getByteCount(&aString)-1 as size, because
+    // NW_String_getByteCount(&aString) includes NULL terminator.
+    const TPtrC8 src( NW_String_getStorage(&aString),
+                      NW_String_getByteCount(&aString)-1 );
+    HBufC16* ucs2buffer = ConvertToUnicodeL( src, id );
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertToUnicodeL");
+    return ucs2buffer;
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::InitialiseCharacterSetConverterL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::InitialiseCharacterSetConverterL()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::InitialiseCharacterSetConverterL")
+
+    iCharacterSetConverter = CCnvCharacterSetConverter::NewL();
+
+    RFs& fs = iMsvSession->FileSession();
+    iCharacterSetsAvailable =
+        CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL( fs );
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::InitialiseCharacterSetConverterL")
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertActionString
+// ---------------------------------------------------------
+//
+TUint CSIContentHandler::ConvertActionString
+                         ( const TDesC8& aActionString ) const
+	{
+	const TInt KMatchFound = 0;
+
+	// set to default signal value (to rid ourselves of build warning)
+	TUint actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+
+	if ( aActionString.Compare( KDeleteAction ) == KMatchFound )
+        {
+		actionValue = CSIPushMsgEntry::ESIPushMsgDelete;
+        }
+	else if ( aActionString.Compare( KSignalNone ) == KMatchFound )
+        {
+		actionValue = CSIPushMsgEntry::ESIPushMsgSignalNone;
+        }
+	else if ( aActionString.Compare( KSignalLow ) == KMatchFound )
+        {
+		actionValue = CSIPushMsgEntry::ESIPushMsgSignalLow;
+        }
+	else if ( aActionString.Compare( KSignalMedium ) == KMatchFound )
+        {
+		actionValue = CSIPushMsgEntry::ESIPushMsgSignalMedium;
+        }
+	else if ( aActionString.Compare( KSignalHigh ) == KMatchFound )
+        {
+		actionValue = CSIPushMsgEntry::ESIPushMsgSignalHigh;
+        }
+
+	return actionValue;
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::SetSIPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::SetSIPushMsgEntryFieldsL( CSIPushMsgEntry&
+                                                  aSIPushMsgEntry )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
+
+	if ( SiIdFlag() || HrefFlag() )
+		{
+		if ( SiIdFlag() && ( HrefFlag() == EFalse ) )
+			{
+            // Message has only si-id but no href.
+            aSIPushMsgEntry.SetIdL( *iSiIdBuf );
+			}
+		else if ( HrefFlag() && ( SiIdFlag() == EFalse ) )
+			{
+            // If message has no si-id but does have a href, use href as si-id.
+            aSIPushMsgEntry.SetIdL( *iHrefBuf );
+            aSIPushMsgEntry.SetUrlL( *iHrefBuf );
+			}
+		else
+            {
+            // Use si-id and href as is.
+            aSIPushMsgEntry.SetIdL( *iSiIdBuf );
+            aSIPushMsgEntry.SetUrlL( *iHrefBuf );
+            }
+		}
+
+    __ASSERT_DEBUG( ActionFlag(),
+                    ContHandPanic( EPushContHandPanUnspecSiAction ) );
+	if ( ActionFlag() )
+        {
+		aSIPushMsgEntry.SetAction( iPushMsgAction );
+        }
+	else // default if no action explicitly stated
+        {
+		aSIPushMsgEntry.SetAction( CSIPushMsgEntry::ESIPushMsgSignalMedium );
+        }
+
+	// uses default null time value if no explicit date set in message
+	aSIPushMsgEntry.SetCreated( iCreatedTime );
+	aSIPushMsgEntry.SetExpires( iExpiresTime );
+
+	// PCDATA (text) from message
+	if ( DataFlag() )
+        {
+		aSIPushMsgEntry.SetTextL( *iData );
+        }
+
+	TPtrC8 msgHeaderPtr;
+	iMessage->GetHeader( msgHeaderPtr );
+	aSIPushMsgEntry.SetHeaderL( msgHeaderPtr );
+
+    // Get server address.
+    TPtrC8 srvAddress;
+    if ( iMessage->GetServerAddress( srvAddress ) )
+        {
+	    aSIPushMsgEntry.SetFromL( srvAddress );
+        }
+
+    // First line in Inbox: TMsvEntry::iDetails.
+    if ( srvAddress.Length() == 0 )
+        {
+        // Read from resource.
+        HBufC* details =
+            iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+        aSIPushMsgEntry.SetMsgDetailsL( *details );
+        CleanupStack::PopAndDestroy( details );
+        }
+    else
+        {
+        // Convert the "From" information to the format required by the UI
+        // spec and then decode it.
+        HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+        CleanupStack::PushL( details );
+        HBufC* convertedFrom =
+            CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+        CleanupStack::PushL( convertedFrom );
+        //
+        aSIPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+        //
+        CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+        }
+
+    // Second line in Inbox: TMsvEntry::iDescription.
+	if ( DataFlag() )
+        {
+        // Display SI message.
+		aSIPushMsgEntry.SetMsgDescriptionL( *iData );
+        }
+    else
+        {
+        // Display URL.
+        __ASSERT_DEBUG( HrefFlag(),
+                        ContHandPanic( EPushContHandPanUnspecSiHref ) );
+        const TPtrC url = aSIPushMsgEntry.Url();
+        HBufC* convertedUrl = CPushMtmUtil::ConvertUriToDisplayFormL( url );
+        CleanupStack::PushL( convertedUrl );
+        //
+        aSIPushMsgEntry.SetMsgDescriptionL( *convertedUrl );
+        //
+        CleanupStack::PopAndDestroy( convertedUrl ); // convertedUrl
+        }
+
+    // ******** Push MTM specific processing *********
+
+    /*
+    * Unfortunately in CPushMsgEntryBase there is no such functionality
+    * with which we can reach TMsvEntry as non-const, but we have to
+    * modify the entry's iMtmData2 member somehow. We can do it
+    * with either casting or with modifying and saving the entry
+    * manually after it has been saved by CSIPushMsgEntry. The latter
+    * solution is more expensive so we choose the first.
+    */
+    TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSIPushMsgEntry.Entry() );
+    if ( HrefFlag() )
+        {
+        CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
+        }
+    else
+        {
+        CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
+        }
+
+    // *** Set the entry to unread and new state. ***
+
+    tEntry.SetNew( ETrue );
+    tEntry.SetUnread( ETrue );
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::SetSIPushMsgEntryFieldsL")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::ProcessingPushMsgEntryL()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ProcessingPushMsgEntryL")
+
+	TBool deletePushMsg( EFalse );
+
+    __ASSERT_DEBUG( ActionFlag(),
+                    ContHandPanic( EPushContHandPanUnspecSiAction ) );
+
+    // S60 requirement: if both the href and the message is empty then
+    // delete the msg.
+    if ( HrefFlag() == EFalse && DataFlag() == EFalse )
+        {
+        deletePushMsg = ETrue;
+        }
+
+    // Expiration.
+    if ( !deletePushMsg && ExpiresFlag() )
+        {
+	    TTime today;
+	    today.UniversalTime();
+#ifdef __TEST_LOG__
+        _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+        _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+        TBuf<32> dateHolder;
+        TBuf<32> timeHolder;
+        today.FormatL( dateHolder, KDateFormat );
+        today.FormatL( timeHolder, KTimeFormat );
+        PUSHLOG_WRITE_FORMAT(" now date: <%S>",&dateHolder)
+        PUSHLOG_WRITE_FORMAT(" now time: <%S>",&timeHolder)
+        iExpiresTime.FormatL( dateHolder, KDateFormat );
+        iExpiresTime.FormatL( timeHolder, KTimeFormat );
+        PUSHLOG_WRITE_FORMAT(" exp date: <%S>",&dateHolder)
+        PUSHLOG_WRITE_FORMAT(" exp time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+	    // check if message has expiry date before today's date
+	    if ( iExpiresTime < today )
+		    {
+            PUSHLOG_WRITE("CSIContentHandler already expired")
+		    deletePushMsg = ETrue;
+		    }
+        }
+
+	// An SI with the action attribute set to “delete” MUST have an
+    // explicitly assigned value for si-id.
+	if ( !deletePushMsg && ActionFlag() )
+		{
+		if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
+            {
+            if ( !SiIdFlag() || ( SiIdFlag() && iSiIdBuf->Length() == 0 ) )
+                {
+                deletePushMsg = ETrue;
+                }
+            }
+        }
+
+    // Handling out of order delivery & Replacement.
+    TMsvId matchingEntryId = KMsvNullIndexEntryId;
+
+    if ( !deletePushMsg && ( SiIdFlag() || HrefFlag() ) && CreatedFlag() )
+        {
+        deletePushMsg = HandleMsgOrderReceptionL( matchingEntryId );
+        }
+
+    if ( !deletePushMsg && ActionFlag() )
+        {
+        // SI with action=signal-none must not be presented to the end-user.
+        // Note. In S60 signal-none behaves the same as delete: the
+        // message is discarded after processing it!
+        if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgSignalNone )
+            {
+            deletePushMsg = ETrue;
+            }
+        // SI with action=delete must also be discarded.
+        else if ( iPushMsgAction == CSIPushMsgEntry::ESIPushMsgDelete )
+            {
+            deletePushMsg = ETrue;
+            }
+        }
+
+	// Store message if not marked for deletion.
+	if ( !deletePushMsg )
+        {
+		StoreSIMessageL( matchingEntryId );
+        }
+    else
+        {
+        // The new entry must be discarded.
+        // Delete the corresponding matching entry, too.
+        if ( matchingEntryId != KMsvNullIndexEntryId )
+            {
+            iWapPushUtils->DeleteEntryL( matchingEntryId );
+            }
+        }
+
+	iState = EDone;
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ProcessingPushMsgEntryL")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::StoreSIMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::StoreSIMessageL( TMsvId aMatchingEntryId )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::StoreSIMessageL")
+
+	CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+	CleanupStack::PushL( siEntry );
+
+    if ( aMatchingEntryId != KMsvNullIndexEntryId )
+    {
+       PUSHLOG_WRITE("Matching SI found");
+       //Delete this old entry
+       iWapPushUtils->DeleteEntryL( aMatchingEntryId );
+    }
+
+    SetSIPushMsgEntryFieldsL( *siEntry );
+    iSavedMsgId = siEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
+
+#ifdef __TEST_LOG__
+        _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+        _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+        TBuf<32> dateHolder;
+        TBuf<32> timeHolder;
+        TTime recDateTime = siEntry->ReceivedDate();
+        recDateTime.FormatL( dateHolder, KDateFormat );
+        recDateTime.FormatL( timeHolder, KTimeFormat );
+        PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
+        PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+
+	CleanupStack::PopAndDestroy( siEntry ); // siEntry
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::StoreSIMessageL")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMsgOrderReceptionL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::HandleMsgOrderReceptionL")
+
+    __ASSERT_DEBUG( ( SiIdFlag() || HrefFlag() ),
+            ContHandPanic( EPushContHandPanNoSiIdOrHrefAttr ) );
+    __ASSERT_DEBUG( CreatedFlag(),
+            ContHandPanic( EPushContHandPanNoCreatedAttr ) );
+
+    CMsvEntrySelection* matchingIdList = NULL;
+	TBool discardPushMsg( EFalse );
+
+	// Get list of matching stored SI messages.
+	if ( SiIdFlag() && iSiIdBuf->Length() != 0 )
+        {
+		matchingIdList = iWapPushUtils->FindSiIdLC( *iSiIdBuf );
+        }
+	else // HrefFlag()
+        {
+        // Use href as si-id.
+		matchingIdList = iWapPushUtils->FindSiIdLC( *iHrefBuf );
+        }
+    const TInt matchingListCount( matchingIdList->Count() );
+    // Note that the count can be greater than 1.
+
+    PUSHLOG_WRITE_FORMAT("CSIContentHandler Count: %d",matchingListCount)
+
+	if ( 0 < matchingListCount && CreatedFlag() )
+		{
+		CSIPushMsgEntry* siEntry = CSIPushMsgEntry::NewL();
+		CleanupStack::PushL( siEntry );
+
+		// Delete older stored messages and/or mark current message for
+        // deletion if same date or older than stored messages
+        TBool foundOneToBeReplaced = EFalse;
+		for ( TInt count = 0; count < matchingListCount; ++count )
+			{
+			TMsvId matchingSiMsgEntryId( matchingIdList->At(count) );
+
+            siEntry->RetrieveL( *iMsvSession, matchingSiMsgEntryId );
+
+			// Skip date comparisons if creation date not valid -
+            // SI without created attribute never gets replaced.
+			TTime existingSiCreatedTime( siEntry->Created() );
+
+			if ( existingSiCreatedTime == Time::NullTTime() )
+                {
+				// continue;
+                }
+            else
+                {
+                __ASSERT_DEBUG( !foundOneToBeReplaced,
+                                ContHandPanic( EPushContHandPanTooManySi ) );
+                if ( foundOneToBeReplaced )
+                    {
+                    PUSHLOG_WRITE(" Already found one")
+                    // Only one SI has to be found.
+                    // If the program runs into it, then make a
+                    // garbage collection to ensure consistency and
+                    // remove other messages found.
+                    iWapPushUtils->DeleteEntryL( matchingSiMsgEntryId );
+                    // After the 'for' only one SI is allowed that has created
+                    // attribute.
+                    }
+                else
+                    {
+                    foundOneToBeReplaced = ETrue; // A match was found.
+                    // Check if received SI is newer than existing stored Si
+                    // (out of order).
+                    if ( iCreatedTime > existingSiCreatedTime )
+	                    {
+                        PUSHLOG_WRITE(" Replacing...")
+                        // The new SI replaces the existing.
+                        aMatchingEntryId = matchingSiMsgEntryId;
+                        discardPushMsg = EFalse;
+	                    }
+                    else if ( iCreatedTime <= existingSiCreatedTime )
+                        {
+                        PUSHLOG_WRITE(" Discarding...")
+                        // Received SI is older than existing stored Si.
+                        discardPushMsg = ETrue;
+                        }
+                    }
+                }
+			}
+
+		CleanupStack::PopAndDestroy( siEntry ); // siEntry
+		}
+
+	CleanupStack::PopAndDestroy( matchingIdList ); // matchingIdList
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::HandleMsgOrderReceptionL")
+    return discardPushMsg;
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertDateTimeL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::ConvertDateTimeL( const TDesC& aDateTime,
+                                           TTime& aConvertedDate ) const
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ConvertDateTimeL")
+
+	TTime convertedTime = Time::NullTTime();
+	TBool convertedOK = EFalse;
+
+    // check supplied descriptor is the correct length
+	if ( aDateTime.Length() != KValidUTCLength )
+        {
+        PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
+        User::Leave( KErrCorrupt );
+        }
+    else
+		{
+		TBuf<KValidUTCLength> str = aDateTime;
+        PUSHLOG_WRITE_FORMAT(" datetime str: <%S>",&str)
+		if ( !IsValidUTCTime( str ) )
+            {
+            // The UTC time is invalid.
+            PUSHLOG_WRITE(" invalid UTC time")
+            User::Leave( KErrCorrupt );
+            }
+        else
+			{
+            // Now 'str' is in format YYYYMMDD:HHMMSS
+			// Adjust UTC time to zero offset TTime. Only month and day
+            // is effected.
+			const TInt KFirstMonthChar = KValidTTimeMonthStart;
+			const TInt KSecondMonthChar = KFirstMonthChar + 1;
+			const TInt KFirstDayChar = KValidTTimeDayStart;
+			const TInt KSecondDayChar = KFirstDayChar + 1;
+            // Month.
+			// check for special case of month = 10 which becomes 09
+			if ( str[KFirstMonthChar] == '1' && str[KSecondMonthChar] == '0' )
+				{
+				str[KFirstMonthChar] = '0';
+				str[KSecondMonthChar] = '9';
+				}
+			else
+                {
+				// month value is either 11, 12 or less than 10, ie 1 - 9.
+				// reduce day by one, eg 11 becomes 10, 12 becomes 11, 09 becomes 08
+				str[KSecondMonthChar]--;
+                }
+
+            // Day.
+			// check for special cases 10, 20, 30
+			if ( str[KSecondDayChar] == '0' )
+				{
+				// reduce day by 1, ie 10 becomes 09, 20 becomes 19 ...
+				str[KSecondDayChar] = '9';
+				str[KFirstDayChar]--;
+				}
+			else
+                {
+				// day value is between 1 and 9 so reduce day by one
+				// eg 29 becomes 28, 11 bcomes 10, 31 becomes 30
+				str[KSecondDayChar]--;
+                }
+
+			// string is now syntaxically correct, but Set() will return an
+            // error if it's semantically incorrect.
+            User::LeaveIfError( convertedTime.Set( str ) );
+			convertedOK = ETrue;
+			}
+		}
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertDateTimeL")
+	aConvertedDate = convertedTime;
+	return convertedOK;
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::ConvertOpaqueToUtcL
+// ---------------------------------------------------------
+//
+HBufC* CSIContentHandler::ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::ConvertOpaqueToUtcL")
+
+    const TInt opaqueSize = aOpaque.Size();
+    if ( KValidMaxEncodedDateTimeSize < opaqueSize )
+        {
+        PUSHLOG_WRITE_FORMAT(" Bad OPAQUE size: <%d>",opaqueSize)
+        User::Leave( KErrCorrupt );
+        }
+
+    HBufC* converted = HBufC::NewMaxLC( KValidUTCLength );
+    TPtr convertedPtr = converted->Des();
+    convertedPtr.SetLength( 0 ); // Reset.
+
+    // Split up each opaque byte to two bytes.
+    TUint8 byte( 0x00 );
+    TUint8 high( 0x00 );
+    TUint8 low( 0x00 );
+    TInt i = 0;
+    for ( i = 0; i < opaqueSize; ++i )
+        {
+        byte = aOpaque[i];
+        high = (TUint8)( (byte & 0xF0) >> 4 );
+        low  = (TUint8)(  byte & 0x0F );
+        // Check high and low if they are in the range [0-9].
+        if ( 9 < high || 9 < low )
+            {
+            PUSHLOG_WRITE_FORMAT2(" Overflow: <%d, %d>",high,low)
+            User::Leave( KErrOverflow );
+            }
+        convertedPtr.Append( TChar(KAsciiZeroCharCode + high) );
+        convertedPtr.Append( TChar(KAsciiZeroCharCode + low) );
+        }
+
+    // A valid UTC %Datetime contains 14 numerical characters and 6
+    // non-numerical: “1999-04-30T06:40:00Z”.
+    // So fill the remaining bytes with zeros.
+    for ( i = convertedPtr.Length(); i < KValidUTCNumericals; ++i )
+        {
+        convertedPtr.Append( TChar('0') );
+        }
+
+    // Insert the necessary non-numerical boundary characters.
+    i = 0;
+    // Skip year and insert '-'. (Don't forget to increase i with 1 each time!)
+    i += KValidUTCYearBlockLength;
+    convertedPtr.Insert( i++, KCharMinus );
+    // Skip month and insert '-'.
+    i += KValidUTCOtherBlockLength;
+    convertedPtr.Insert( i++, KCharMinus );
+    // Skip day and insert 'T'.
+    i += KValidUTCOtherBlockLength;
+    convertedPtr.Insert( i++, KCharT );
+    // Skip hour and insert ':'.
+    i += KValidUTCOtherBlockLength;
+    convertedPtr.Insert( i++, KCharColon );
+    // Skip minute and insert ':'.
+    i += KValidUTCOtherBlockLength;
+    convertedPtr.Insert( i++, KCharColon );
+    // Skip second and insert 'Z'.
+    i += KValidUTCOtherBlockLength;
+    convertedPtr.Insert( i++, KCharZ );
+
+    CleanupStack::Pop( converted ); // converted
+    PUSHLOG_LEAVEFN("CSIContentHandler::ConvertOpaqueToUtcL")
+	return converted;
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::IsValidUTCTime
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::IsValidUTCTime( TDes& aDateTime ) const
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::IsValidUTCTime")
+
+    TBool isValid( ETrue ); // Return value.
+
+    // Now aDateTime has to be in format YYYY-MM-DDTHH:MM:SSZ
+
+    // check supplied descriptor is the correct length
+	if ( aDateTime.Length() != KValidUTCLength )
+        {
+        PUSHLOG_WRITE_FORMAT(" invalid UTC length <%d>",aDateTime.Length())
+        isValid = EFalse;
+        }
+    else
+        {
+	    // strip out formatting characters
+	    TInt formatCharPos = 4;
+	    aDateTime.Delete( formatCharPos, 1 );
+	    // now move through two characters at a time and remove other chars
+	    // to just leave digits
+	    const TInt KRemainingFormatChars = 5;
+        TInt i( 0 );
+	    for ( i = 0; i < KRemainingFormatChars; ++i )
+		    {
+		    formatCharPos += 2;
+		    aDateTime.Delete( formatCharPos, 1 );
+		    }
+
+        // Now aDateTime has to be in format YYYYMMDDHHMMSS
+
+        __ASSERT_DEBUG( aDateTime.Length() == KValidTTimeLength,
+                        ContHandPanic( EPushContHandPanBadTTimeLength ) );
+
+        // now have UTC string stripped of format characters - check remaining
+        // characters are all digits - YYYYMMDDHHMMSS
+        TChar ch;
+        for ( i = 0; i < KValidTTimeLength; ++i )
+		    {
+		    ch = aDateTime[i];
+		    if ( ch.IsDigit() == EFalse )
+                {
+                PUSHLOG_WRITE_FORMAT(" not digit <%d>",i)
+                isValid = EFalse;
+                }
+		    }
+
+        if ( isValid )
+            {
+            /*
+            In YYYYMMDDHHMMSS
+            YYYY = 4 digit year ("0000" ... "9999")
+            MM = 2 digit month ("01"=January, "02"=February ... "12"=December)
+            DD = 2 digit day ("01", "02" ... "31")
+            HH = 2 digit hour, 24-hour timekeeping system ("00" ... "23")
+            MM = 2 digit minute ("00" ... "59")
+            SS = 2 digit second ("00" ... "59")
+            */
+            TInt err;
+            TUint val;
+            // Do not check year. There are no restrictions.
+            // Check month.
+            TLex parser( aDateTime.Mid( KValidTTimeMonthStart,
+                                        KValidTTimeBlockLength ) );
+            err = parser.Val( val, EDecimal );
+            if ( err )
+                {
+                isValid = EFalse;
+                PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+                }
+            else
+                {
+                PUSHLOG_WRITE_FORMAT(" month: <%d>",val)
+                if ( val < 1 || 12 < val )
+                    {
+                    isValid = EFalse;
+                    }
+                }
+            // Check day.
+            if ( isValid )
+                {
+                parser = aDateTime.Mid( KValidTTimeDayStart,
+                                        KValidTTimeBlockLength );
+                err = parser.Val( val, EDecimal );
+                if ( err )
+                    {
+                    isValid = EFalse;
+                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+                    }
+                else
+                    {
+                    PUSHLOG_WRITE_FORMAT(" day: <%d>",val)
+                    if ( val < 1 || 31 < val )
+                        {
+                        isValid = EFalse;
+                        }
+                    }
+                }
+            // Check hour.
+            if ( isValid )
+                {
+                parser = aDateTime.Mid( KValidTTimeHourStart,
+                                        KValidTTimeBlockLength );
+                err = parser.Val( val, EDecimal );
+                if ( err )
+                    {
+                    isValid = EFalse;
+                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+                    }
+                else
+                    {
+                    PUSHLOG_WRITE_FORMAT(" hour: <%d>",val)
+                    if ( 23 < val )
+                        {
+                        isValid = EFalse;
+                        }
+                    }
+                }
+            // Check minute.
+            if ( isValid )
+                {
+                parser = aDateTime.Mid( KValidTTimeMinuteStart,
+                                        KValidTTimeBlockLength );
+                err = parser.Val( val, EDecimal );
+                if ( err )
+                    {
+                    isValid = EFalse;
+                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+                    }
+                else
+                    {
+                    PUSHLOG_WRITE_FORMAT(" min: <%d>",val)
+                    if ( 59 < val )
+                        {
+                        isValid = EFalse;
+                        }
+                    }
+                }
+            // Check second.
+            if ( isValid )
+                {
+                parser = aDateTime.Mid( KValidTTimeSecondStart,
+                                        KValidTTimeBlockLength );
+                err = parser.Val( val, EDecimal );
+                if ( err )
+                    {
+                    isValid = EFalse;
+                    PUSHLOG_WRITE_FORMAT(" parser err: <%d>",err)
+                    }
+                else
+                    {
+                    PUSHLOG_WRITE_FORMAT(" sec: <%d>",val)
+                    if ( 59 < val )
+                        {
+                        isValid = EFalse;
+                        }
+                    }
+                }
+
+	        // insert colon seperating date from time
+	        const TInt KColonPosition = 8;
+	        aDateTime.Insert( KColonPosition, KCharColon );
+
+            // Now aDateTime has to be in format YYYYMMDD:HHMMSS
+            }
+        }
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::IsValidUTCTime")
+	return isValid; // aDateTime contains a modified buffer.
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::AttributeToTTimeL
+// ---------------------------------------------------------
+//
+TBool CSIContentHandler::AttributeToTTimeL
+                        ( NW_DOM_AttributeHandle_t& aAttrHandle,
+                          TTime& aConvertedDate ) const
+    {
+    PUSHLOG_ENTERFN("CSIContentHandler::AttributeToTTimeL")
+
+    TBool gotDate = EFalse;
+    NW_Status_t stat = NW_STAT_SUCCESS;
+    NW_DOM_AttrVal_t attrVal;
+
+    // It is expected to be String or Opaque.
+    // It may be Opaque, to which we will need a NW_DOM_AttrVal_t structure.
+    stat = NW_DOM_AttributeHandle_getNextVal( &aAttrHandle, &attrVal );
+
+    if ( stat != NW_STAT_WBXML_ITERATE_MORE )
+        {
+        User::LeaveIfError( NwxStatusToErrCode( stat ) );
+        }
+    else
+        {
+        NW_Uint16 valType = NW_DOM_AttrVal_getType( &attrVal );
+
+        if ( valType == NW_DOM_ATTR_VAL_STRING )
+            {
+            CStringOwner* stringOwner = new (ELeave) CStringOwner;
+            CleanupStack::PushL( stringOwner );
+
+            NW_String_t* val = NW_String_new();
+            User::LeaveIfNull( val );
+            stringOwner->SetString( val );
+            //
+            stat = NW_DOM_AttrVal_toString( &attrVal, val, iCharEncoding );
+            User::LeaveIfError( NwxStatusToErrCode( stat ) );
+            NW_Byte* storage = NW_String_getStorage( val );
+            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+            TPtrC8 dataPtr( storage, length );
+            HBufC* dataBuf = HBufC::NewMaxLC( dataPtr.Length() );
+            dataBuf->Des().Copy( dataPtr );
+            gotDate = ConvertDateTimeL( *dataBuf, aConvertedDate );
+
+            CleanupStack::PopAndDestroy( 2, stringOwner ); // dataBuf,
+                                                           // stringOwner
+            }
+        else if ( valType == NW_DOM_ATTR_VAL_OPAQUE )
+            {
+            NW_Uint32 len = 0;
+            NW_Byte* data = NW_DOM_AttrVal_getOpaque( &attrVal, &len );
+            User::LeaveIfNull( data );
+            TPtrC8 dataPtr( data, len );
+
+            HBufC* dateTime = ConvertOpaqueToUtcL( dataPtr );
+            CleanupStack::PushL( dateTime );
+            gotDate = ConvertDateTimeL( *dateTime, aConvertedDate );
+            CleanupStack::PopAndDestroy( dateTime ); // dateTime
+            }
+        else
+            {
+            User::Leave( KErrNotSupported );
+            }
+        }
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::AttributeToTTimeL")
+    return gotDate; // aConvertedDate contains the result.
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+                                        TRequestStatus& aStatus )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
+
+    __ASSERT_DEBUG( aPushMsg != NULL,
+                    ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+    TPtrC8 bodyPtr;
+    aPushMsg->GetMessageBody( bodyPtr );
+    PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+	iMessage = aPushMsg;
+	iAcknowledge = ETrue;
+	SetConfirmationStatus( aStatus );
+
+	iState = EGarbageCollecting;
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::HandleMessageL")
+
+    __ASSERT_DEBUG( aPushMsg != NULL,
+                    ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+    TPtrC8 bodyPtr;
+    aPushMsg->GetMessageBody( bodyPtr );
+    PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+    iAcknowledge = EFalse;
+	iMessage = aPushMsg;
+
+	iState = EGarbageCollecting;
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSIContentHandler::HandleMessageL")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CancelHandleMessage()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::CancelHandleMessage")
+    Cancel();
+    PUSHLOG_LEAVEFN("CSIContentHandler::CancelHandleMessage")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CPushHandlerBase_Reserved1()
+    {
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::CPushHandlerBase_Reserved2
+// ---------------------------------------------------------
+//
+void CSIContentHandler::CPushHandlerBase_Reserved2()
+    {
+    }
+
+// ---------------------------------------------------------
+// CSIContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CSIContentHandler::DoCancel()
+	{
+    PUSHLOG_ENTERFN("CSIContentHandler::DoCancel")
+	Complete( KErrCancel );
+    PUSHLOG_LEAVEFN("CSIContentHandler::DoCancel")
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CSIContentHandler::RunL()
+	{
+    // Handle errors in RunError().
+    PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
+    User::LeaveIfError( iStatus.Int() );
+
+	// use active state machine routine to manage activites:
+	switch ( iState )
+		{
+	    case EGarbageCollecting:
+            {
+		    CollectGarbageL();
+		    break;
+            }
+	    case EFilteringAndParsing:
+            {
+            if ( !FilterPushMsgL() )
+                {
+                // It did not pass the filter. Done.
+	            iState = EDone;
+	            IdleComplete();
+                }
+            else
+                {
+                // Continue.
+		        TInt ret = KErrNone;
+				PUSHLOG_WRITE("CSIContentHandler::RunL : before trapping parsing.")
+				TRAP(ret, ParsePushMsgL());
+				PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunL : after trapping parsing. ret = %d", ret)
+				if ( ret != KErrNone)
+					{
+					PUSHLOG_WRITE("CSIContentHandler::RunL : Parsing failed. discarding message.")
+					iState = EDone;
+					IdleComplete();
+					}
+                }
+		    break;
+            }
+	    case EProcessing:
+            {
+		    ProcessingPushMsgEntryL();
+		    break;
+            }
+	    case EDone:
+            {
+            PUSHLOG_WRITE("CSIContentHandler EDone")
+		    Complete( KErrNone );
+		    break;
+            }
+	    default:
+            {
+            // JIC.
+            PUSHLOG_WRITE("CSIContentHandler default Done")
+		    Complete( KErrNone );
+		    break;
+            }
+		}
+	}
+
+// ---------------------------------------------------------
+// CSIContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CSIContentHandler::RunError( TInt aError )
+	{
+    PUSHLOG_WRITE_FORMAT("CSIContentHandler::RunError: %d",aError)
+
+	iState = EDone;
+	Complete( aError );
+	return KErrNone;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSIContentHandler.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CSIContentHandler.
+*
+*/
+
+
+
+#ifndef __CSICONTENTHANDLER_H__
+#define __CSICONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <msvstd.h>
+#include <nw_dom_attribute.h>
+#include <CharConv.h>
+
+// CONSTANTS
+
+const TUid KUidPushSIContentHandler	= { EUidPushSIContentHandler };
+_LIT(KSIContentHandlerData,"text/vnd.wap.si||application/vnd.wap.sic");
+
+// FORWARD DECLARATIONS
+
+class CSIPushMsgEntry;
+
+// CLASS DECLARATION
+
+/** 
+* CSIContentHandler handles Service Indication content  
+*
+* This handler takes ownership of the SI message and processes it
+* according to the Reception rules 
+* [WAP Service Indication version 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* OVERVIEW:
+*	The main body of this class and its functionality lies within
+*	HandleMessage (asynchonous). This :
+*		1. takes ownership of the push message
+*		2. validates the message and generates a parsed document tree
+*		3. extracts the message attribute values from document tree 
+*		4. processes the received message
+*		5. finishes
+*
+* NB: A received message with no creation date will be stored (unless 
+* its action is set to delete or the expiry condition is met). This 
+* means that the si-id in the message store will not be unique.
+*/
+class CSIContentHandler : public CPushContentHandlerBase
+	{
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @return The constructed object.
+        */
+	    static CSIContentHandler* NewL();
+
+        /**
+        * Destructor.
+        */
+	    virtual ~CSIContentHandler();
+
+    private: // Constructors
+
+        /**
+        * Constructor.
+        */
+	    CSIContentHandler();
+
+        /**
+        * Symbian OS constructor.
+        */
+	    void  ConstructL();
+
+    private: // New functions
+
+        /**
+        * Do Garbage Collection synchronously.
+        * @return None.
+        */
+	    void  CollectGarbageL();
+
+        /**
+        * Parse the current message. If the SI is wbxml encoded then it is 
+        * decoded first to XML format. Then the message details (attributes) 
+        * are earned from the XML tree.
+        * @return None.
+        */
+	    void  ParsePushMsgL();
+
+        /**
+        * Parse the indication element.
+        * @param aIndication The element to be parsed.
+        * @return None.
+        */
+	    void  ParseIndicationL( NW_DOM_ElementNode_t& aIndication );
+
+        /**
+        * Parse an attribute of the indication element.
+        * @param aAttrHandle The attribute to be parsed.
+        * @return None.
+        */
+	    void  ParseIndAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+        /**
+        * Parse the text of the indication element.
+        * @param aTextNode The text node to be parsed.
+        * @return None.
+        */
+	    void  ParseTextL( NW_DOM_TextNode_t& aTextNode );
+
+
+        /**
+        * Converts the given buffer to unicode (UCS-2).
+        * @param aSrc Source text.
+        * @param aCharSetId Character set ID.
+        * @return The UCS-2 unicode buffer.
+        */
+	    HBufC16*  ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId );
+
+        /**
+        * Converts the given buffer to unicode (UCS-2).
+        * @param aString Source text.
+        * @param aCharEncoding Character encoding.
+        * @return The UCS-2 unicode buffer.
+        */
+	    HBufC16*  ConvertToUnicodeL( NW_String_t& aString, NW_Uint32 aCharEncoding );
+
+        /**
+        * Initialise the converter. 
+        * @return None.
+        */
+        void InitialiseCharacterSetConverterL();
+
+
+        /**
+        * Convert the action string to a representative numeric value to 
+        * facilitate storing the message.
+        * @param aActionString The attribute value indicating the action level 
+        *        eg 'signal-high'
+        * @return TUint: a value representing the action type.
+        */
+	    TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+        /**
+        * The entry fields are set to the correct values.
+        * @return None.
+        */
+	    void  SetSIPushMsgEntryFieldsL( CSIPushMsgEntry& aSIPushMsgEntry );
+
+        /**
+        * Do the final processing of the message according to the OMA and S60 
+        * requirements.
+        * @return None.
+        */
+	    void  ProcessingPushMsgEntryL();
+
+        /**
+        * Store the new message to Messaging.
+        * @param aMatchingEntryId ID of the matching SI entry.
+        * @return None.
+        */
+	    void StoreSIMessageL( TMsvId aMatchingEntryId );
+
+        /**
+        * Handle message order reception.
+        * NB: A received message with no creation date will be stored (unless 
+        * its action is set to delete or the expiry condition is met). This 
+        * means that the si-id in the message store will not be unique.
+        * @param aMatchingEntryId ID of the matching SI entry.
+        *        It is changed only if the function returns EFalse (replace)!
+        * @return ETrue if the entry has to be discarded.
+        */
+	    TBool HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId );
+
+	    // conversion utilities
+
+        /** 
+        * Convert UTC date time into native TTime format. Method can leave.
+        * @param aDateTime The UTC string representing the date and time.
+        * @param aConvertedDate Member date variable passed in to accept 
+        *        converted UTC date as TTime varaible.
+        * @return TBool indicates if conversion successful (ETrue) or 
+        *         conversion failed (EFalse)
+        */
+	    TBool ConvertDateTimeL( const TDesC& aDateTime, 
+                                TTime& aConvertedDate ) const;
+
+        /** 
+        * Convert OPAQUE data to UTC date time as specified in SI spec.
+        * @param aOpaque OPAQUE data.
+        * @return The UTC time.
+        */
+	    HBufC* ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const;
+
+        /**
+        * Check given UTC time string conforms to expected format:
+        * YYYY-MM-DDTHH:MM:SSZ and strip out formatting characters
+        * then validate the remaining characters are all digits.
+        * If validated then add TTime formating character so final
+        * string returned will be of the format YYYYMMDD:HHMMSS.
+        * @param aDateTime UTC string which is validated and returned.
+        * @return boolean: indicates if given date is valid (ETrue) 
+        *         or not (EFalse)
+        */
+	    TBool IsValidUTCTime( TDes& aDateTime ) const;
+
+        /** 
+        * Convert OPAQUE or STRING attribute to TTime.
+        * @param aAttrHandle Handle to the attribute.
+        * @param aConvertedDate The resulted TTime.
+        * @return ETrue if the conversion succeeded.
+        */
+	    TBool AttributeToTTimeL( NW_DOM_AttributeHandle_t& aAttrHandle, 
+                                 TTime& aConvertedDate ) const;
+
+	    // Attribute flags
+
+        /**
+        * Flag whether message has an action attribute
+        * @param aAction boolean to set flag to - 
+        *                ETrue for action attrib present
+        *                EFalse for no action attrib.
+        */ 
+	    inline void SetActionFlag( TBool aAction );
+
+        /**
+        * Check status of action flag to see if message has an action 
+        * attribute.
+        * @return TBool ETrue - action attribute present in message
+        *               EFalse - no action attribute.
+        */
+	    inline TBool ActionFlag() const;
+
+        /**
+        * Flag whether message has a created date attribute.
+        * @param aCreated boolean to set flag to - 
+        *                 ETrue for si-created attrib present
+        *                 EFalse for no si-created attrib
+        */ 
+	    inline void SetCreatedFlag( TBool aCreated );
+
+        /**
+        * Check status of created flag to see if message has a si-created 
+        * attribute.
+        * @return TBool ETrue - si-created attribute present in message
+        *               EFalse - no si-created attribute
+        */
+	    inline TBool CreatedFlag() const;
+
+        /**
+        * Flag whether message has a Href attribute
+        * @param aHref boolean to set flag to - 
+        *              ETrue for Href attrib present
+        *              EFalse for no href attrib
+        */ 
+	    inline void SetHrefFlag( TBool aHref );
+
+        /**
+        * Check status of href flag to see if message has an href attribute.
+        * @return TBool
+        *         ETrue - href attribute present in message
+        *         EFalse - no href attribute
+        */
+	    inline TBool HrefFlag() const;
+
+        /**
+        * Flag whether message has an expiry date attribute (si-expires).
+        * @param aExpires boolean to set flag to - 
+        *                 ETrue for si-expires present
+        *                 EFalse for no si-expires date
+        */ 
+	    inline void SetExpiresFlag( TBool aExpires );
+
+        /**
+        * Check status of flag to see if message has an expiry date attribute.
+        * @return TBool
+        *         ETrue - si-expires attribute present in message
+        *         EFalse - no si-expires attribute
+        */
+	    inline TBool ExpiresFlag() const;
+	    
+        /**
+        * Flag whether message has a si-id attribute
+        * @param aSiId boolean to set flag to - 
+        *              ETrue for si-id attrib present
+        *              EFalse for no si-id attrib
+        */ 
+	    inline void SetSiIdFlag( TBool aSiId );
+
+        /**
+        * Check status of flag to see if message has an si-id attribute.
+        * @return TBool
+        *         ETrue - si-id attribute present in message
+        *         EFalse - no si-id attribute
+        */
+	    inline TBool SiIdFlag() const;
+
+        /**
+        * Flag whether message has a Data attribute (text)
+        * @param aData
+        *        boolean to set flag to - ETrue for data attrib present
+        *                                 EFalse for no data attrib
+        */ 
+	    inline void SetDataFlag( TBool aData );
+
+        /**
+        * Check status of data flag to see if message has any data.
+        * @return TBool
+        *         ETrue - data attribute present in message
+        *         EFalse - no data attribute
+        */
+	    inline TBool DataFlag() const;
+
+    private: // Methods from CPushHandlerBase
+	    
+        /**
+        * HandleMessage Async. Version. Takes ownership of Push Message and 
+        * sets self active to continue processing message.
+        * @param aPushMsg CPushMessage to process.
+        * @param aStatus Request status variable for use in asynchronous 
+        *        operations.
+        * @return None.
+        */
+	    void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+        /**
+        * HandleMessage Sync. Version. Takes ownership of Push Message and 
+        * sets self active to continue processing message.
+        * Initial State: Set data members then go to the next state 
+        * @param aPushMsg CPushMessage to process.
+        */
+	    void HandleMessageL( CPushMessage* aPushMsg );
+
+        /** 
+        * Same functionality as DoCancel()
+        */
+	    void CancelHandleMessage();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved1();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved2();
+
+    private: // Methods from CActive
+
+        /**
+        * Terminates any activity
+        * @return None.
+        */
+	    void DoCancel();
+
+        /**
+        * Step through the various representative states for handling a message 
+        * States:
+        *  EGarbageCollecting - Deleting expired SI msgs from messaging
+        *  EFilteringAndParsing - Filter push msg according to Service message 
+        *                settings and Parses SI push message (retrieving the 
+        *                attributes)
+        *  EProcessing - Processing the current entry. OMA and S60 rules are 
+        *                applied, then save or update SI msg in the Msg store
+        *  EDone - Clean up, complete observer
+        * @return None.
+        */
+	    void RunL();
+
+        /**
+        * This is invoked when RunL Leaves with an error so clean up and 
+        * return.
+        * @return Error code to scheduler.
+        */
+	    TInt RunError(TInt aError);
+
+    private: // Data
+
+	    enum
+            {
+            EAction = 0x01, 
+            ECreated = 0x02, 
+            EHref = 0x04, 
+            EExpires = 0x08, 
+            ESiId = 0x10, 
+            EData = 0x20
+            };
+
+	    enum TState
+            {
+            EGarbageCollecting, 
+            EFilteringAndParsing, 
+            EProcessing, 
+            EDone
+            };
+
+        TMsvId          iSavedMsgId; ///< ID of the message saved.
+	    TUint32         iAttributes; ///< Attribute indication (set or not).
+	    TInt            iPushMsgAction;	///< Action attribute
+	    HBufC*          iHrefBuf; ///< Href attribute. Has.
+	    HBufC*          iSiIdBuf; ///< Si-id attribute. Has.
+	    TTime           iExpiresTime; ///< Expiration attribute.
+	    TTime           iCreatedTime; ///< Created attribute.
+	    HBufC*          iData; ///< Message text. Has.
+
+        NW_Uint32       iCharEncoding; ///< Char encoding of the current msg.
+
+        //
+        CCnvCharacterSetConverter* iCharacterSetConverter; ///< Owned.
+        CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* iCharacterSetsAvailable; ///< Owned.
+    };
+
+#include "CSIContentHandler.inl"
+
+#endif	// __CSICONTENTHANDLER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSIContentHandler.inl	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,121 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Inline functions.
+*
+*/
+
+
+
+inline void CSIContentHandler::SetActionFlag(TBool aAction)      
+	{
+	if ( aAction )
+        {
+		iAttributes |= EAction;
+        }
+	else
+        {
+		iAttributes &=~ EAction;
+        }
+	}
+
+inline TBool CSIContentHandler::ActionFlag() const
+	{
+	return iAttributes & EAction;
+	}
+
+inline void CSIContentHandler::SetCreatedFlag( TBool aCreated )
+	{
+	if ( aCreated )
+        {
+		iAttributes |= ECreated;
+        }
+	else
+        {
+		iAttributes &=~ ECreated;
+        }
+	}
+
+inline TBool CSIContentHandler::CreatedFlag() const
+	{
+	return iAttributes & ECreated;
+	}
+
+inline void CSIContentHandler::SetHrefFlag( TBool aHref )
+	{
+	if ( aHref )
+        {
+		iAttributes |= EHref;
+        }
+	else
+        {
+		iAttributes &=~ EHref;
+        }
+	}
+
+inline TBool CSIContentHandler::HrefFlag() const
+	{
+	return iAttributes & EHref;
+	}
+
+inline void CSIContentHandler::SetExpiresFlag( TBool aExpires )
+	{
+	if ( aExpires )
+        {
+		iAttributes |= EExpires;
+        }
+	else
+        {
+		iAttributes &=~ EExpires;
+        }
+	}
+
+inline TBool CSIContentHandler::ExpiresFlag() const
+	{
+	return iAttributes & EExpires;
+	}
+
+inline void CSIContentHandler::SetSiIdFlag( TBool aSiId )
+	{
+	if ( aSiId )
+        {
+		iAttributes |= ESiId;
+        }
+	else
+        {
+		iAttributes &=~ ESiId;
+        }
+	}
+
+inline TBool CSIContentHandler::SiIdFlag() const
+	{
+	return iAttributes & ESiId;
+	}
+
+inline void CSIContentHandler::SetDataFlag( TBool aData )
+	{
+	if ( aData )
+        {
+		iAttributes |= EData;
+        }
+	else
+        {
+		iAttributes &=~ EData;
+        }
+	}
+
+inline TBool CSIContentHandler::DataFlag() const
+	{
+	return iAttributes & EData;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSLContentHandler.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,1221 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CSLContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CSLContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmSettings.h"
+#include "PushAuthenticationUtilities.h"
+#include "PushMtmLog.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmAutoFetchOperation.h"
+#include "PushMtmUiDef.h"
+#include "StringResourceReader.h"
+#include "sl_dict.h"
+#include "PushContentHandlerUtils.h"
+#include <push/cslpushmsgentry.h>
+#include <msvids.h>
+#include <apgtask.h>
+#include <apgcli.h>
+#include <w32std.h>
+#include <PushMtmUi.rsg>
+#include <nw_dom_node.h>
+#include <nw_dom_document.h>
+#include <nw_dom_element.h>
+#include <nw_dom_text.h>
+#include <nw_wbxml_dictionary.h>
+#include <nw_string_char.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h> 
+
+// CONSTANTS
+
+// sl attributes / elements
+_LIT8( KSl,      "sl" );
+_LIT8( KHref,    "href" );
+_LIT8( KAction,  "action" );
+
+// action attribute literals
+_LIT8( KExecHigh,"execute-high" );  
+_LIT8( KExecLow, "execute-low" );
+_LIT8( KCache,   "cache" );
+
+// Text SL MIME type
+_LIT( KSlTextContentType, "text/vnd.wap.sl" );
+
+// Browser command to fetch an URL. See Browser API Specification!
+_LIT( KBrowserCmdFetchUrl, "4 " );
+const TUid KBrowserAppUid = { 0x10008D39 };
+
+const TInt KNoOfDictArrays = 1;
+
+/// Autofetch time delay in seconds.
+const TInt KAutofetchDelayInSec = 5;
+
+// file monitored by browser
+_LIT( KPushMtmUrl, "c:\\system\\temp\\PushMtmUrl.txt" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CSLContentHandler::NewL
+// ---------------------------------------------------------
+//
+CSLContentHandler* CSLContentHandler::NewL()
+	{
+	CSLContentHandler* self = new (ELeave) CSLContentHandler;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::~CSLContentHandler
+// ---------------------------------------------------------
+//
+CSLContentHandler::~CSLContentHandler()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::~CSLContentHandler")
+
+    Cancel();
+    delete iFetchOp;
+    delete iHrefBuf;
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::~CSLContentHandler")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CSLContentHandler
+// ---------------------------------------------------------
+//
+CSLContentHandler::CSLContentHandler()
+:   CPushContentHandlerBase(), 
+    iSavedMsgId( KMsvNullIndexEntryId ), 
+    iPushMsgAction( KErrNotFound ), 
+    iSaveAsRead( EFalse )
+	{
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ConstructL()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::ConstructL")
+    
+    CRepository* PushSL = CRepository::NewL( KCRUidPushMtm );
+    CleanupStack::PushL( PushSL );
+    User::LeaveIfError( PushSL->Get( KPushMtmServiceEnabled , iPushSLEnabled ) );
+    CleanupStack::PopAndDestroy( PushSL ); 
+    
+    CPushContentHandlerBase::ConstructL();
+    // Added to Active Scheduler.
+    PUSHLOG_LEAVEFN("CSLContentHandler::ConstructL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CollectGarbageL()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::CollectGarbageL")
+
+    DoCollectGarbageL();
+
+	if(iPushSLEnabled)
+	    iState = EFilteringAndParsing;
+	else
+	    iState = EDone;
+	
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::CollectGarbageL")
+    }
+
+
+// ---------------------------------------------------------
+// CSLContentHandler::ParsePushMsgL
+// Note that cXML parser dosn't do any validation!
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ParsePushMsgL()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::ParsePushMsgL")
+
+    TPtrC8 bodyPtr;
+    iMessage->GetMessageBody( bodyPtr );
+    // If there is no body in the message leave with an error
+    if ( bodyPtr.Size() == 0 )
+        {
+        PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: Empty body")
+        User::Leave( KErrCorrupt );
+        }
+
+    TPtrC contentType;
+    iMessage->GetContentType( contentType );
+    PUSHLOG_WRITE_FORMAT(" Content type <%S>",&contentType)
+
+    // Add SL dictionary.
+    NW_WBXML_Dictionary_t* dictArray[ KNoOfDictArrays ] = 
+        { (NW_WBXML_Dictionary_t*)&NW_SL_WBXMLDictionary };
+
+    NW_Status_t stat = NW_STAT_SUCCESS;
+
+    RWbxmlDictionary wbxmlDict;
+    wbxmlDict.InitializeL( KNoOfDictArrays, dictArray );
+    CleanupClosePushL<RWbxmlDictionary>( wbxmlDict );
+
+    NW_TinyDom_Handle_t domHandle;
+    NW_Byte* buffer = (NW_Byte*)bodyPtr.Ptr();
+    NW_Int32 length = (NW_Int32)bodyPtr.Size();
+    NW_Bool encoded = ( contentType.CompareF( KSlTextContentType ) == 0 ) ? 
+                                                         NW_FALSE : NW_TRUE;
+    NW_Uint32 publicID = NW_SL_PublicId;
+    NW_Bool extTNotStringTable = NW_FALSE; // What is this?
+    NW_DOM_NodeType_t type = 0;
+    /**********************************
+    *   Root of DOM
+    ***********************************/
+    CDocumentTreeOwner* docTreeOwner = new (ELeave) CDocumentTreeOwner;
+    CleanupStack::PushL( docTreeOwner );
+    NW_DOM_DocumentNode_t* domNode = NW_DOM_DocumentNode_BuildTree
+        ( 
+                            &domHandle, 
+                            buffer, 
+                            length, 
+                            encoded, 
+                            publicID, 
+                            extTNotStringTable 
+        );
+	if (!domNode)
+		{
+		PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: domNode is Null")
+		}
+    User::LeaveIfNull( domNode );
+    docTreeOwner->SetDocTree( domNode );
+
+    type = NW_DOM_Node_getNodeType( domNode );
+    if ( type != NW_DOM_DOCUMENT_NODE )
+        {
+        PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not Document node <%d>",type)
+        User::Leave( KErrArgument );
+        }
+
+    iCharEncoding = NW_DOM_DocumentNode_getCharacterEncoding( domNode );
+    PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Doc char encoding <%x>",iCharEncoding)
+
+    /**********************************
+    *   ELEMENT sl
+    ***********************************/
+	// first make sure if there any children in the dom tree, otherwise we will PANIC(in NW_DOM_DocumentNode_getDocumentElement) and crash WatcherMainThread.
+	TBool domNodeHasChildNodes = EFalse;
+	domNodeHasChildNodes = NW_DOM_Node_hasChildNodes( domNode );
+	PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: check if Dom tree has <SI> node <%d>", domNodeHasChildNodes)
+	if (!domNodeHasChildNodes)
+        {
+        PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: No SL element present in the dom tree. Message corrupted.")
+        User::Leave( KErrCorrupt );
+        }
+
+	PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: before calling getDocumentElement")
+    NW_DOM_ElementNode_t* slElement = 
+        NW_DOM_DocumentNode_getDocumentElement( domNode );
+	if (!slElement)
+		{
+		PUSHLOG_WRITE("CSLContentHandler::ParsePushMsgL: slElement is Null")
+		}
+    User::LeaveIfNull( slElement );
+
+    type = NW_DOM_Node_getNodeType( slElement );
+
+    CStringOwner* stringOwner = new (ELeave) CStringOwner;
+    CleanupStack::PushL( stringOwner );
+
+    NW_String_t* name = NW_String_new();
+    User::LeaveIfNull( name );
+    stringOwner->SetString( name );
+    stat = NW_DOM_Node_getNodeName( slElement, name );
+	PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getNodeName ErrCode: %d", NwxStatusToErrCode( stat ))
+    User::LeaveIfError( NwxStatusToErrCode( stat ) );
+    NW_Byte*  nameBuf = NW_String_getStorage( name );
+    NW_Uint16 nameLen = NW_String_getCharCount( name, iCharEncoding );
+    TPtrC8 namePtr( nameBuf, nameLen );
+
+    if ( type != NW_DOM_ELEMENT_NODE || namePtr.CompareF( KSl ) != 0 )
+        {
+        PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: Not sl element node <%d>",type)
+        User::Leave( KErrArgument );
+        }
+
+    CleanupStack::PopAndDestroy( stringOwner ); // stringOwner
+
+    /**********************************
+    *   Attributes of ELEMENT sl
+    ***********************************/
+    if ( NW_DOM_ElementNode_hasAttributes( slElement ) )
+        {
+        NW_DOM_AttributeListIterator_t attrIter;
+        stat = NW_DOM_ElementNode_getAttributeListIterator
+                             ( slElement, &attrIter );
+		PUSHLOG_WRITE_FORMAT("CSLContentHandler::ParsePushMsgL: getAttribListIter ErrCode: %d", NwxStatusToErrCode( stat ))
+        User::LeaveIfError( NwxStatusToErrCode( stat ) );
+
+        NW_DOM_AttributeHandle_t attrHandle;
+        while( NW_DOM_AttributeListIterator_getNextAttribute
+               ( &attrIter, &attrHandle ) == NW_STAT_WBXML_ITERATE_MORE )
+            {
+            ParseSlAttributeL( attrHandle );
+            }
+        }
+
+    // Cleanup.
+    CleanupStack::PopAndDestroy( 2, &wbxmlDict ); // docTreeOwner, wbxmlDict
+
+    // if 'action' attribute not specified, the value 'execute-low' is used.
+	if ( !ActionFlag() )
+        {
+		iPushMsgAction = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+        SetActionFlag( ETrue );
+        PUSHLOG_WRITE_FORMAT(" Defaulting to ActionFlag: %d",iPushMsgAction)
+        }
+
+    iState = EProcessing;
+    IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::ParsePushMsgL")
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::ParseSlAttributeL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ParseSlAttributeL
+                        ( NW_DOM_AttributeHandle_t& aAttrHandle )
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::ParseSlAttributeL")
+
+    NW_Status_t stat = NW_STAT_SUCCESS;
+
+    CStringOwner* attrNameOwner = new (ELeave) CStringOwner;
+    CleanupStack::PushL( attrNameOwner );
+
+    NW_String_t* attrName = NW_String_new();
+    User::LeaveIfNull( attrName );
+    attrNameOwner->SetString( attrName );
+
+    // Get the name of the attribute.
+    stat = NW_DOM_AttributeHandle_getName( &aAttrHandle, attrName );
+    User::LeaveIfError( NwxStatusToErrCode( stat ) );
+    NW_Byte*  attrNameBuf = NW_String_getStorage( attrName );
+    NW_Uint16 attrNameLen = NW_String_getCharCount( attrName, iCharEncoding );
+    TPtrC8 attrNamePtr( attrNameBuf, attrNameLen );
+
+    if ( attrNamePtr.CompareF( KHref ) == 0 )
+        {
+        if ( !HrefFlag() )
+            {
+            HBufC* tempHrefBuf = NULL;
+
+            CStringOwner* valOwner = new (ELeave) CStringOwner;
+            CleanupStack::PushL( valOwner );
+
+            NW_String_t* val = NW_String_new();
+            User::LeaveIfNull( val );
+            valOwner->SetString( val );
+            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val );
+            if ( stat != NW_STAT_DOM_NO_STRING_RETURNED )
+                {
+                User::LeaveIfError( NwxStatusToErrCode( stat ) );
+                NW_Byte* storage = NW_String_getStorage( val );
+                NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+                TPtrC8 prefixPtr( storage, length );
+                tempHrefBuf = HBufC::NewMaxL( length );
+                // No leavable after it!!! until...
+                tempHrefBuf->Des().Copy( prefixPtr );
+                }
+
+            CleanupStack::PopAndDestroy( valOwner ); // valOwner
+
+            if ( tempHrefBuf )
+                {
+                if ( tempHrefBuf->Length() == 0 )
+                    {
+                    // Zero length Href is considered as nothing.
+                    PUSHLOG_WRITE(" Zero length HrefFlag");
+                    }
+                else
+                    {
+                    iHrefBuf = tempHrefBuf; // ...until here.
+                    SetHrefFlag( ETrue );
+                    PUSHLOG_WRITE_FORMAT(" HrefFlag set <%S>",iHrefBuf);
+                    }
+                }
+            }
+        }
+    else if ( attrNamePtr.CompareF( KAction ) == 0 )
+        {
+        if ( !ActionFlag() )
+            {
+            CStringOwner* stringOwner = new (ELeave) CStringOwner;
+            CleanupStack::PushL( stringOwner );
+
+            NW_String_t* val = NW_String_new();
+            User::LeaveIfNull( val );
+            stringOwner->SetString( val );
+            stat = NW_DOM_AttributeHandle_getValue( &aAttrHandle, val ); 
+            User::LeaveIfError( NwxStatusToErrCode( stat ) );
+            NW_Byte* storage = NW_String_getStorage( val );
+            NW_Uint16 length = NW_String_getCharCount( val, iCharEncoding );
+            TPtrC8 actionPtr( storage, length );
+
+            iPushMsgAction = ConvertActionString( actionPtr );
+            SetActionFlag( ETrue );
+            PUSHLOG_WRITE_FORMAT(" ActionFlag: %d",iPushMsgAction)
+
+            CleanupStack::PopAndDestroy( stringOwner );
+            }
+        }
+    else
+        {
+        __ASSERT_DEBUG( EFalse, 
+            ContHandPanic( EPushContHandPanUnexpSlToken ) );
+        }
+
+    CleanupStack::PopAndDestroy( attrNameOwner ); // attrNameOwner
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::ParseSlAttributeL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ConvertActionString
+// ---------------------------------------------------------
+//
+TUint CSLContentHandler::ConvertActionString
+                         ( const TDesC8& aActionString ) const
+	{
+	const TInt KMatchFound = 0;
+
+	// if 'action' attribute not specified, the value 'execute-low' is used.
+	TUint actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+
+	if ( aActionString.Compare( KExecHigh ) == KMatchFound )
+        {
+		actionValue = CSLPushMsgEntry::ESLPushMsgExecuteHigh;
+        }
+	else if ( aActionString.Compare( KExecLow ) == KMatchFound )
+        {
+		actionValue = CSLPushMsgEntry::ESLPushMsgExecuteLow;
+        }
+	else if ( aActionString.Compare( KCache ) == KMatchFound )
+        {
+		actionValue = CSLPushMsgEntry::ESLPushMsgExecuteCache;
+        }
+
+	return actionValue;
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::SetSlPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& 
+                                                  aSlPushMsgEntry ) const
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
+
+	// Set URL and Action fields.
+    if ( HrefFlag() )
+        {
+	    aSlPushMsgEntry.SetUrlL( *iHrefBuf );
+        }
+
+    __ASSERT_DEBUG( ActionFlag(), 
+                    ContHandPanic( EPushContHandPanUnspecSlAction ) );
+    if ( ActionFlag() )
+        {
+	    aSlPushMsgEntry.SetAction( iPushMsgAction );
+        }
+    else // if not specified, the value 'execute-low' is used.
+        {
+        aSlPushMsgEntry.SetAction( CSLPushMsgEntry::ESLPushMsgExecuteLow );
+        }
+
+	// Set all the relevant header fields.
+	TPtrC8 msgHeaderPtr;
+	iMessage->GetHeader( msgHeaderPtr );
+	aSlPushMsgEntry.SetHeaderL( msgHeaderPtr );
+
+    // Get server address.
+    TPtrC8 srvAddress;
+    if ( iMessage->GetServerAddress( srvAddress ) )
+        {
+	    aSlPushMsgEntry.SetFromL( srvAddress );
+        }
+
+    // First line in Inbox: TMsvEntry::iDetails.
+    if ( srvAddress.Length() == 0 )
+        {
+        // Read from resource.
+        HBufC* details = 
+            iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+        aSlPushMsgEntry.SetMsgDetailsL( *details );
+        CleanupStack::PopAndDestroy( details );
+        }
+    else
+        {
+        // Convert the "From" information to the format required by the UI 
+        // spec and then decode it.
+        HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+        CleanupStack::PushL( details );
+        HBufC* convertedFrom = 
+            CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+        CleanupStack::PushL( convertedFrom );
+        //
+        aSlPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+        //
+        CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+        }
+
+    // Second line in Inbox: TMsvEntry::iDescription.
+    // Read from resource.
+    HBufC* description = 
+        iStrRscReader->AllocReadResourceLC( R_PUSHMISC_INBOX_SERV_MSG );
+    aSlPushMsgEntry.SetMsgDescriptionL( *description );
+    CleanupStack::PopAndDestroy( description );
+
+    // ******** Push MTM specific processing *********
+
+    /*
+    * Unfortunately in CPushMsgEntryBase there is no such functionality 
+    * with which we can reach TMsvEntry as non-const, but we have to 
+    * modify the entry's iMtmData2 member somehow. We can do it 
+    * with either casting or with modifying and saving the entry 
+    * manually after it has been saved by CSLPushMsgEntry. The latter 
+    * solution is more expensive so we choose the first.
+    */
+    TMsvEntry& tEntry = CONST_CAST( TMsvEntry&, aSlPushMsgEntry.Entry() );
+    if ( HrefFlag() )
+        {
+        CPushMtmUtil::SetAttrs( tEntry, EPushMtmAttrHasHref );
+        }
+    else
+        {
+        CPushMtmUtil::ResetAttrs( tEntry, EPushMtmAttrHasHref );
+        }
+
+    // Indication is required if the entry is saved as 'read' (delete & 
+    // replacement notification). It can happen only in case of SL message.
+    // Otherwise the flag has to be cleared!
+    if ( !iSaveAsRead )
+        {
+        // Saving as unread & new.
+        tEntry.SetNew( ETrue );
+        tEntry.SetUnread( ETrue );
+        CPushMtmUtil::ResetAttrs( tEntry, EPushMtmReadButContentChanged );
+        }
+    else
+        {
+        // Saving as read.
+        tEntry.SetNew( EFalse );
+        tEntry.SetUnread( EFalse );
+        CPushMtmUtil::SetAttrs( tEntry, EPushMtmReadButContentChanged );
+        }
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::SetSlPushMsgEntryFieldsL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::ProcessingPushMsgEntryL()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::ProcessingPushMsgEntryL")
+
+    TBool discardPushMsg( EFalse );
+
+    __ASSERT_DEBUG( ActionFlag(), 
+                    ContHandPanic( EPushContHandPanUnspecSlAction ) );
+
+    // S60 requirement: if the href is empty then delete (discard) the msg.
+    if ( HrefFlag() == EFalse )
+        {
+        PUSHLOG_WRITE(" No SL Href.")
+        discardPushMsg = ETrue;
+        }
+    else
+        {
+        __ASSERT_DEBUG( HrefFlag() && iHrefBuf, 
+                        ContHandPanic( EPushContHandPanUnspecSlHref ) );
+
+        // The message will not be discarded
+        discardPushMsg = EFalse;
+
+        CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
+                                              ( *iHrefBuf, KUidWapPushMsgSL );
+        TInt matchingListCount = matchingUrlList->Count();
+        PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
+
+        // Only one SL is allowed with the same Url, so leave the first and 
+        // delete the others.
+        if ( 1 < matchingListCount )
+            {
+            for ( TInt count = 1; count < matchingListCount; ++count )
+                {
+                iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
+                }
+            matchingListCount = 1; // Only one remains.
+            }
+
+	    if ( 0 < matchingListCount )
+		    {
+		    // Find msg of the same href and discard it if it has a lower or 
+            // the same action value.
+            CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
+	        CleanupStack::PushL( matchingSl );
+
+            const TMsvId matchingId = matchingUrlList->At(0);
+            matchingSl->RetrieveL( *iMsvSession, matchingId );
+
+            if ( iPushMsgAction <= matchingSl->Action() ) 
+			    {
+                PUSHLOG_WRITE(" SL: not higher action")
+                discardPushMsg = ETrue;
+                }
+
+            CleanupStack::PopAndDestroy( matchingSl ); // matchingSl, 
+            }
+
+	    CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
+        }
+
+    if ( discardPushMsg )
+        {
+        // Nothing to do.
+        PUSHLOG_WRITE(" SL discarded.")
+        iState = EDone;
+        IdleComplete();
+        }
+    else
+        {
+        iState = HandleServiceInvocationL();
+        IdleComplete();
+        }
+
+    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
+                    ContHandPanic( EPushContHandPanSlMsgIdSet ) );
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::ProcessingPushMsgEntryL")
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleServiceInvocationL
+// ---------------------------------------------------------
+//
+TInt CSLContentHandler::HandleServiceInvocationL() const
+    {
+    PUSHLOG_ENTERFN("CSLContentHandler::HandleServiceInvocationL")
+
+    TInt nextState = ESavePushMsgEntry;
+
+    if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
+        {
+        PUSHLOG_WRITE(" SL cache");
+        TBool isAuthenticated = TPushAuthenticationUtil::
+            AuthenticateMsgL( *iMtmSettings, *iMessage );
+		if ( !isAuthenticated )
+            {
+            PUSHLOG_WRITE(" Not authenticated");
+            // The message is placed to Inbox.
+            nextState = ESavePushMsgEntry;
+            }
+        else
+            {
+            // Authenticated. Fetch SL-cache.
+            nextState = EFetching;
+            }
+        }
+
+    else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteLow )
+        {
+        PUSHLOG_WRITE(" SL execute-low")
+        // It is independent from Automatic/Manual setting and WL 
+        // authentication is not applied. The message is placed to Inbox 
+        // for manual downloading.
+        nextState = ESavePushMsgEntry;
+        }
+
+    else // ESLPushMsgExecuteHigh
+        {
+        PUSHLOG_WRITE(" SL execute-high");
+        // If the settings is Manual or it does not pass the WL authentication 
+		// then it is placed to Inbox for manual downloading.
+        // If the setting is Automatic and it passes the WL authentication, 
+        // the Browser is started standalone to download the URL without any 
+		// user interaction.
+        if ( iMtmSettings->ServiceLoadingType() == 
+			               CPushMtmSettings::EManual )
+            {
+            PUSHLOG_WRITE(" Manual setting")
+            // The message is placed to Inbox.
+            nextState = ESavePushMsgEntry;
+            }
+        else // Automatic loading
+            {
+            PUSHLOG_WRITE(" Automatic setting");
+            // Authenticate the message.
+            TBool isAuthenticated = TPushAuthenticationUtil::
+                AuthenticateMsgL( *iMtmSettings, *iMessage );
+            if ( !isAuthenticated )
+	            {
+                PUSHLOG_WRITE(" Not authenticated");
+	            // The message is placed to Inbox.
+	            nextState = ESavePushMsgEntry;
+	            }
+            else
+	            {
+	            // Authenticated - start downloading.
+	            nextState = EFetching;
+	            }
+            }
+        }
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::HandleServiceInvocationL")
+    return nextState;
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::FetchPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::FetchPushMsgEntryL()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::FetchPushMsgEntryL")
+
+    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
+                    ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+    __ASSERT_DEBUG( HrefFlag() && iHrefBuf, 
+                    ContHandPanic( EPushContHandPanUnspecSlHref ) );
+
+    /* 
+    * In case of execute-high use the Browser to download the service.
+    * In case of cache use the fetch operation to download the service 
+    * silently. 
+    */
+
+    if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteHigh )
+        {
+        PUSHLOG_WRITE(" Start Browser")
+        // Launch the Browser with the URI, then save the message.
+        // Trap errors. If Browser's launching fails, then save the 
+        // message as 'unread'. In case of an error, it is not forwarded.
+        TRAPD( err, StartBrowserL() );
+        iState = ESavePushMsgEntry;
+        // Mark it 'read' after succesfull Browser startup.
+        iSaveAsRead = err ? EFalse : ETrue;
+        IdleComplete();
+        }
+    else if ( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache )
+        {
+        // Fetch the service inside the content handler.
+        iStatus = KRequestPending;
+        SetActive();
+        __ASSERT_DEBUG( !iFetchOp, 
+                        ContHandPanic( EPushContHandPanFetchAlreadyInit ) );
+
+        iFetchOp = CPushMtmAutoFetchOperation::NewL( *iHrefBuf, 
+                                                     KAutofetchDelayInSec, 
+                                                     iStatus );
+        iFetchOp->StartL();
+        PUSHLOG_WRITE(" Fetch op started")
+        iState = EFetchCompleted; // Next state.
+        // Fetch completes it.
+        }
+    else
+        {
+        __ASSERT_DEBUG( EFalse, 
+                        ContHandPanic( EPushContHandPanBadActionValue ) );
+        User::Leave( KErrNotSupported );
+        }
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::FetchPushMsgEntryL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::StartBrowserL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::StartBrowserL()
+    {
+    PUSHLOG_ENTERFN("CSLContentHandler::StartBrowserL")
+
+    // Parameters are separated by space
+    // 1st parameter: type of the further parameters
+    // 2nd parameter: URL
+    //
+    HBufC* param = HBufC::NewLC( KBrowserCmdFetchUrl().Length() + 
+                                 iHrefBuf->Length() );
+    TPtr paramPtr = param->Des();
+    paramPtr.Copy( KBrowserCmdFetchUrl );
+    paramPtr.Append( *iHrefBuf );
+
+    RWsSession wsSession;
+    User::LeaveIfError( wsSession.Connect() );
+    CleanupClosePushL<RWsSession>( wsSession );
+    TApaTaskList taskList( wsSession );
+    TApaTask task = taskList.FindApp( KBrowserAppUid );
+
+    if ( task.Exists() )
+        {
+        PUSHLOG_WRITE("CSLContentHandler Browser::SendMessage")
+
+        RFs             rfs;
+        RFile           file;
+        TPtrC8          param8Ptr;
+        // 8-bit buffer is required.
+        HBufC8* param8 = HBufC8::NewLC( param->Length() );
+        param8->Des().Copy( *param );
+        param8Ptr.Set(param8->Des());
+
+        // Open the file.
+        User::LeaveIfError(rfs.Connect());
+        CleanupClosePushL(rfs);
+
+        // Replace file if exists or Create file if not exist yet
+        User::LeaveIfError( file.Replace( rfs, KPushMtmUrl, EFileWrite | EFileShareExclusive ) );
+        CleanupClosePushL(file);
+
+        // Write to file      
+        User::LeaveIfError( file.Write( param8Ptr ) );
+        
+        // Clean up.
+        CleanupStack::PopAndDestroy(/*file*/);
+        CleanupStack::PopAndDestroy(/*rfs*/);
+        CleanupStack::PopAndDestroy( /*param8*/ );
+        }
+    else 
+        {
+        PUSHLOG_WRITE("CSLContentHandler Browser::StartDocument")
+        RApaLsSession appArcSession;
+        User::LeaveIfError( appArcSession.Connect() );
+        CleanupClosePushL<RApaLsSession>( appArcSession );
+        TThreadId id;
+        User::LeaveIfError
+            (
+                appArcSession.StartDocument( *param, KBrowserAppUid, id )
+            );
+        CleanupStack::PopAndDestroy( &appArcSession );
+        }
+
+    CleanupStack::PopAndDestroy( &wsSession );
+    CleanupStack::PopAndDestroy( param );
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::StartBrowserL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::FetchCompletedL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::FetchCompletedL()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::FetchCompletedL")
+
+    __ASSERT_DEBUG( iPushMsgAction == CSLPushMsgEntry::ESLPushMsgExecuteCache, 
+                    ContHandPanic( EPushContHandPanBadActionValue ) );
+    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
+                    ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+    __ASSERT_DEBUG( iFetchOp, ContHandPanic( EPushContHandPanNoFetchOp ) );
+
+    const TInt fetchRes = iStatus.Int();
+    PUSHLOG_WRITE_FORMAT(" fetchRes <%d>",fetchRes)
+
+    if ( fetchRes != KErrNone )
+        {
+        // Downloading failed. Save the message.
+        iState = ESavePushMsgEntry;
+        }
+    else
+        {
+        // Silent fetching has completed successfully.
+        // The message should not be saved.
+        iState = EDone;
+        }
+
+    // Next state set. Complete.
+    IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::FetchCompletedL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::SavePushMsgEntryL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::SavePushMsgEntryL()
+    {
+    PUSHLOG_ENTERFN("CSLContentHandler::SavePushMsgEntryL")
+
+    __ASSERT_DEBUG( ActionFlag(), 
+                    ContHandPanic( EPushContHandPanUnspecSlAction ) );
+    __ASSERT_DEBUG( HrefFlag() && iHrefBuf, 
+                    ContHandPanic( EPushContHandPanUnspecSlHref ) );
+    __ASSERT_DEBUG( iSavedMsgId == KMsvNullIndexEntryId, 
+                    ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+
+    CMsvEntrySelection* matchingUrlList = iWapPushUtils->FindUrlLC
+                                          ( *iHrefBuf, KUidWapPushMsgSL );
+    TInt matchingListCount = matchingUrlList->Count();
+    PUSHLOG_WRITE_FORMAT(" matchingListCount: %d",matchingListCount)
+
+    // Only one SL is allowed with the same Url, so leave the first and 
+    // delete the others.
+    __ASSERT_DEBUG( matchingListCount <= 1, 
+                    ContHandPanic( EPushContHandPanTooManySl ) );
+    if ( 1 < matchingListCount )
+        {
+        for ( TInt count = 1; count < matchingListCount; ++count )
+            {
+            iWapPushUtils->DeleteEntryL( matchingUrlList->At(count) );
+            }
+        matchingListCount = 1; // Only one remains.
+        }
+
+    TBool saveNewMsg = ETrue; // Save by default.
+    TMsvId matchingEntryId = KMsvNullIndexEntryId;
+
+    // Apply reception rules.
+    if ( matchingListCount == 0 )
+        {
+        // Nothing to do.
+        saveNewMsg = ETrue;
+        }
+    else
+        {
+        CSLPushMsgEntry* matchingSl = CSLPushMsgEntry::NewL();
+        CleanupStack::PushL( matchingSl );
+
+        matchingEntryId = matchingUrlList->At(0);
+        matchingSl->RetrieveL( *iMsvSession, matchingEntryId );
+
+        if ( iPushMsgAction <= matchingSl->Action() ) 
+            {
+            // Discard the new SL: it does not have higher 
+            // action value as the existing.
+            PUSHLOG_WRITE(" SL not higher action - discarded")
+            saveNewMsg = EFalse;
+            }
+        else
+            {
+            // The new has greater action attribute. 
+            // Update the old SL with the new data.
+            saveNewMsg = ETrue;
+            }
+
+        CleanupStack::PopAndDestroy( matchingSl ); // matchingSl
+        }
+
+    CleanupStack::PopAndDestroy( matchingUrlList ); // matchingUrlList
+
+    // Store message if not marked for deletion.
+    if ( saveNewMsg )
+        {
+		StoreSLMessageL( matchingEntryId );
+		}
+
+    iState = EDone;
+    IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::SavePushMsgEntryL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::StoreSLMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::StoreSLMessageL( TMsvId aMatchingEntryId )
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::StoreSLMessageL")
+
+	CSLPushMsgEntry* slEntry = CSLPushMsgEntry::NewL();
+	CleanupStack::PushL( slEntry );
+
+    if ( aMatchingEntryId == KMsvNullIndexEntryId )
+        {
+        PUSHLOG_WRITE(" No matching SL")
+        // Save new to Inbox.
+        SetSlPushMsgEntryFieldsL( *slEntry );
+	    iSavedMsgId = 
+            slEntry->SaveL( *iMsvSession, KMsvGlobalInBoxIndexEntryId );
+        // Set the entry to read and *not* new state depending on iSaveAsRead.
+        if ( !iSaveAsRead )
+            {
+            // Do nothing SaveL saves it as unread.
+            }
+        else
+            {
+            // SaveL owerrides the read settings (iEntry.SetUnread(ETrue);) 
+            // that we set in SetSlPushMsgEntryFieldsL, thus the read status 
+            // has to be reset manually here:
+            iWapPushUtils->MarkServiceUnreadL( iSavedMsgId, EFalse );
+            }
+        }
+    else
+        {
+        PUSHLOG_WRITE(" Matching SL")
+        slEntry->RetrieveL( *iMsvSession, aMatchingEntryId );
+        SetSlPushMsgEntryFieldsL( *slEntry );
+
+        slEntry->UpdateL( *iMsvSession );
+        iSavedMsgId = aMatchingEntryId;
+        // Note that UpdateL does not change the read/unread status.
+
+        // Move the updated msg back to Inbox.
+        TMsvId parentId = slEntry->Entry().Parent();
+        if ( parentId != KMsvGlobalInBoxIndexEntryId )
+	        {
+            PUSHLOG_WRITE(" Moving back to Inbox")
+            CMsvEntry* cParent = iMsvSession->GetEntryL( parentId );
+            CleanupStack::PushL( cParent );
+	        cParent->MoveL( iSavedMsgId, KMsvGlobalInBoxIndexEntryId );
+            CleanupStack::PopAndDestroy( cParent ); // cParent
+	        }
+        }
+
+#ifdef __TEST_LOG__
+        _LIT( KDateFormat, "%E%D%X%N%Y %1 %2 %3" );
+        _LIT( KTimeFormat, "%-B%:0%J%:1%T%:2%S%:3%+B" );
+        TBuf<32> dateHolder;
+        TBuf<32> timeHolder;
+        TTime recDateTime = slEntry->ReceivedDate();
+        recDateTime.FormatL( dateHolder, KDateFormat );
+        recDateTime.FormatL( timeHolder, KTimeFormat );
+        PUSHLOG_WRITE_FORMAT(" rec date: <%S>",&dateHolder)
+        PUSHLOG_WRITE_FORMAT(" rec time: <%S>",&timeHolder)
+#endif // __TEST_LOG__
+
+	CleanupStack::PopAndDestroy( slEntry ); // slEntry
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::StoreSLMessageL")
+	}
+
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
+                                        TRequestStatus& aStatus )
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 2")
+
+    __ASSERT_DEBUG( aPushMsg != NULL, 
+                    ContHandPanic( EPushContHandPanMsgNull ) );
+
+#ifdef __TEST_LOG__
+    TPtrC8 bodyPtr;
+    aPushMsg->GetMessageBody( bodyPtr );
+    PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+	iMessage = aPushMsg;
+	iAcknowledge = ETrue;
+	SetConfirmationStatus( aStatus );
+
+	iState = EGarbageCollecting;
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 2")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::HandleMessageL 1")
+
+    __ASSERT_DEBUG( aPushMsg != NULL, 
+                    ContHandPanic( EPushContHandPanMsgNull ) );
+	
+#ifdef __TEST_LOG__
+    TPtrC8 bodyPtr;
+    aPushMsg->GetMessageBody( bodyPtr );
+    PUSHLOG_HEXDUMP( bodyPtr )
+#endif // __TEST_LOG__
+
+	iAcknowledge = EFalse;
+	iMessage = aPushMsg;
+
+	iState = EGarbageCollecting;
+	IdleComplete();
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::HandleMessageL 1")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CancelHandleMessage()
+	{
+    Cancel();
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CPushHandlerBase_Reserved1()
+	{
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CSLContentHandler::CPushHandlerBase_Reserved2()
+	{
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CSLContentHandler::DoCancel()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::DoCancel")
+    // TODO Cancel outstanding requests!
+	Complete( KErrCancel );
+    PUSHLOG_LEAVEFN("CSLContentHandler::DoCancel")
+	}
+
+// ---------------------------------------------------------
+// CSLContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CSLContentHandler::RunL()
+	{
+    PUSHLOG_ENTERFN("CSLContentHandler::RunL")
+
+    // Handle errors in RunError().
+    PUSHLOG_WRITE_FORMAT(" iStatus.Int(): %d",iStatus.Int())
+
+	switch ( iState )
+		{
+	    case EGarbageCollecting:
+            {
+		    CollectGarbageL();
+		    break;
+            }
+
+
+        case EFilteringAndParsing:
+            {
+            if(iPushSLEnabled)
+                {
+                if ( !FilterPushMsgL() )
+                    {
+                    // It did not pass the filter. Done.
+                    iState = EDone;
+                    IdleComplete();
+                    }
+                else
+                    {
+                    // Continue.
+                    TInt ret = KErrNone;
+                    PUSHLOG_WRITE("CSLContentHandler::RunL : before trapping parsing.")
+                    TRAP(ret, ParsePushMsgL());
+                    PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunL : after trapping parsing. ret = %d", ret)
+                    if ( ret != KErrNone)
+                        {
+                        PUSHLOG_WRITE("CSLContentHandler::RunL : Parsing failed. discarding message.")
+                        iState = EDone;
+                        IdleComplete();
+                        }
+                    }
+                }
+			break;
+            }
+
+        case EProcessing:
+            {
+            if(iPushSLEnabled)
+			ProcessingPushMsgEntryL();
+			break;
+            }
+
+		case EFetching:
+            {
+            if(iPushSLEnabled)
+			FetchPushMsgEntryL();
+			break;
+            }
+
+		case EFetchCompleted:
+            {
+            if(iPushSLEnabled)
+			FetchCompletedL();
+			break;
+            }
+
+		case ESavePushMsgEntry:
+            {
+            if(iPushSLEnabled)
+			SavePushMsgEntryL();
+			break;
+            }
+
+
+        case EDone:
+            {
+            PUSHLOG_WRITE("CSLContentHandler EDone")
+			Complete( KErrNone );
+			break;
+            }
+		default:
+            {
+            // JIC.
+            PUSHLOG_WRITE("CSLContentHandler default EDone")
+			Complete( KErrNone );
+			break;
+            }
+		}
+
+    PUSHLOG_LEAVEFN("CSLContentHandler::RunL")
+    }
+
+// ---------------------------------------------------------
+// CSLContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CSLContentHandler::RunError( TInt aError )
+	{
+    PUSHLOG_WRITE_FORMAT("CSLContentHandler::RunError: %d",aError)
+
+	iState = EDone;
+	Complete( aError );
+	return KErrNone;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSLContentHandler.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,303 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CSLContentHandler.
+*
+*/
+
+
+
+#ifndef __CSLCONTENTHANDLER_H__
+#define __CSLCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+#include <nw_dom_attribute.h>
+
+// CONSTANTS
+
+const TUid KUidPushSLContentHandler	= { EUidPushSLContentHandler };
+_LIT( KSLContentHandlerData, "text/vnd.wap.sl||application/vnd.wap.slc" );
+
+// FORWARD DECLARATIONS
+
+class CSLPushMsgEntry;
+class CPushMtmAutoFetchOperation;
+
+// CLASS DECLARATION
+
+/** 
+* CSLContentHandler Handles Service Loading Content  
+*
+* This handler takes ownership of the SL message and processes it
+* according to the Reception rules 
+* [WAP Service Loading version 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* NB. If __SERIES60_PUSH_SL is not defined, then all SL push messages are 
+*     discarded!
+*/
+class CSLContentHandler : public CPushContentHandlerBase
+	{
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @return The constructed object.
+        */
+	    static CSLContentHandler* NewL();
+
+        /**
+        * D'tor.
+        */
+	    virtual ~CSLContentHandler();
+
+    private: // Constructors
+
+        /**
+        * Constructor.
+        */
+	    CSLContentHandler();
+
+        /**
+        * Symbian OS constructor.
+        */
+	    void ConstructL();
+
+    private: // New functions
+
+        /**
+        * Do Garbage Collection synchronously when a new message arrives.
+        * @return None.
+        */
+	    void  CollectGarbageL();
+
+
+        /**
+        * Parse the Push SL message using XML parser.
+        * If Push Message is an SLC then convert it first to text using 
+        * CWbxmlConverterUtil class.
+        * @return None.
+        */
+	    void ParsePushMsgL();
+
+        /**
+        * Parse an attribute of the sl element.
+        * @param aAttrHandle The attribute to be parsed.
+        * @return None.
+        */
+	    void  ParseSlAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+        /**
+        * Convert the action string to a representative numeric value to 
+        * facilitate storing the message.
+        * @param aActionString The attribute value indicating the action level 
+        *        eg 'execute-high'
+        * @return TUint: a value representing the action type.
+        */
+	    TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+        /**
+        * Set SL entry fields prior to storing message.
+        * @param aSlPushMsgEntry Entry represents message format to use when 
+        *        storing it.
+        * @return None.
+        */
+	    void SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& aSlPushMsgEntry ) const;
+
+        /**
+        * Check if the message has to be discarded due to empty Href or 
+        * there is a message with higher acton value.
+        * @return None.
+        */
+	    void ProcessingPushMsgEntryL();
+
+        /**
+        * Handle Service invocation: decide what to do next according to 
+        * action value and push settings.
+        * @return Next state.
+        */
+	    TInt HandleServiceInvocationL() const;
+
+        /**
+        * Download the indicated content.
+        * In case of execute-high use the Browser to download the service.
+        * In case of cache use the fetch operation to download the service 
+        * silently.
+        * @return None.
+        */
+	    void FetchPushMsgEntryL();
+
+        /**
+        * Start the Browser and instruct it to download the content 
+        * indicated by the Sl's URI.
+        * @return None.
+        */
+	    void StartBrowserL();
+
+        /**
+        * Check the result of the SL-cache downloading. If it fails, save the 
+        * message. If it succeeds, discard the message.
+        * @return None.
+        */
+	    void FetchCompletedL();
+
+        /**
+        * Apply reception rules and save the push message. 
+        * If a message already exists with the same URL, 
+        * it is saved only if it has a higher action value.
+        * @return None.
+        */
+	    void SavePushMsgEntryL();
+
+        /**
+        * Store the new message to Messaging.
+        * @param aMatchingEntryId ID of the matching SI entry.
+        * @return None.
+        */
+	    void StoreSLMessageL( TMsvId aMatchingEntryId );
+
+	    // Attribute flags
+
+        /**
+        * Flag whether message has an action attribute
+        * @param aAction boolean to set flag to - 
+        *                ETrue for action attrib present
+        *                EFalse for no action attrib.
+        */ 
+	    inline void SetActionFlag( TBool aAction );
+
+        /**
+        * Check status of action flag to see if message has an action 
+        * attribute.
+        * @return TBool ETrue - action attribute present in message
+        *               EFalse - no action attribute.
+        */
+	    inline TBool ActionFlag() const;
+
+        /**
+        * Flag whether message has a Href attribute
+        * @param aHref boolean to set flag to - 
+        *              ETrue for Href attrib present
+        *              EFalse for no href attrib
+        */ 
+	    inline void SetHrefFlag( TBool aHref );
+
+        /**
+        * Check status of href flag to see if message has an href attribute.
+        * @return TBool
+        *         ETrue - href attribute present in message
+        *         EFalse - no href attribute
+        */
+	    inline TBool HrefFlag() const;
+
+
+    private: // Methods from CPushHandlerBase
+	    
+        /**
+        * HandleMessage Async. Version. Takes ownership of Push Message and 
+        * sets self active to continue processing message.
+        * @param aPushMsg CPushMessage to process.
+        * @param aStatus Request status variable for use in asynchronous 
+        *        operations.
+        * @return None.
+        */
+	    void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+        /**
+        * HandleMessage Sync. Version. Takes ownership of Push Message and 
+        * sets self active to continue processing message.
+        * Initial State: Set data members then go to the next state 
+        * @param aPushMsg CPushMessage to process.
+        */
+	    void HandleMessageL(CPushMessage* aPushMsg);
+
+        /** 
+        * Same functionality as DoCancel()
+        */
+	    void CancelHandleMessage();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved1();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved2();
+
+    private: // Methods from CActive
+
+        /**
+        * Terminates any activity.
+        * @return None.
+        */
+	    void DoCancel();
+
+        /**
+        * Step through the various representative states for handling a 
+        * message.
+        * @return None.
+        */
+	    void RunL();
+
+        /**
+        * This is invoked when RunL Leaves with an error so clean up and 
+        * return.
+        * @return Error code to scheduler.
+        */
+	    TInt RunError( TInt aError );
+
+    private: // Data
+
+	    enum
+            {
+            EAction = 0x01, 
+            EHref = 0x02
+            };
+
+	    enum TState                 ///< States of this state machine.
+            {
+            EGarbageCollecting, 
+            EFilteringAndParsing,
+            EProcessing, 
+            EFetching, 
+            EFetchCompleted, 
+            ESavePushMsgEntry, 
+            EDone
+            };
+
+        TMsvId          iSavedMsgId; ///< ID of the saved message.
+        TUint32         iAttributes; ///< Attribute indication (set or not).
+	    TInt            iPushMsgAction; ///< SL action.
+	    HBufC*          iHrefBuf; ///< Href attribute. Has.
+
+        /// Asynchronous fetch operation that downloads the SL-cache. Owned.
+        CPushMtmAutoFetchOperation* iFetchOp;
+
+        NW_Uint32       iCharEncoding; ///< Char encoding of the current msg.
+        TBool           iSaveAsRead; ///< Mark the message 'read' after saving.
+        TInt            iPushSLEnabled;
+    };
+
+#include "CSLContentHandler.inl"
+
+#endif	// __CSLCONTENTHANDLER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CSLContentHandler.inl	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Inline functions.
+*
+*/
+
+
+
+
+inline void CSLContentHandler::SetActionFlag( TBool aAction )
+	{
+	if ( aAction )
+        {
+		iAttributes |= EAction;
+        }
+	else
+        {
+		iAttributes &=~ EAction;
+        }
+	}
+
+inline TBool CSLContentHandler::ActionFlag() const
+	{
+	return iAttributes & EAction;
+	}
+
+inline void CSLContentHandler::SetHrefFlag( TBool aHref )
+	{
+	if ( aHref )
+        {
+		iAttributes |= EHref;
+        }
+	else
+        {
+		iAttributes &=~ EHref;
+        }
+	}
+
+inline TBool CSLContentHandler::HrefFlag() const
+	{
+	return iAttributes & EHref;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CUnknownContentHandler.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,694 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CUnknownContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CUnknownContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmLog.h"
+#include "PushContentHandlerPanic.h"
+#include "StringResourceReader.h"
+#include <msvids.h>
+#ifdef __SERIES60_PUSH_SP 
+#include <CUnknownPushMsgEntry.h>
+#include <BioDB.h>        // BIO Message Database and message query methods
+#include <gsmubuf.h>    // CSmsBuffer class
+#include <gsmumsg.h>    // CSmsMessage class
+#include <smuthdr.h>    // CSmsHeader class
+#include <smut.h>        // TSmsUtilities class
+#include <txtrich.h>    // CRichText class
+#include <biouids.h>    // KUidBioMessageTypeMtm const
+#include <apgcli.h>
+#include <apmrec.h>
+#include <DocumentHandler.h>
+#include <Uri16.h>
+#include <UriUtils.h>
+#include <msvuids.h>    // KUidMsvMessageEntry const
+#include <PushMtmUi.rsg>
+
+// SMUT Unbranch
+#include <csmsgetdetdescinterface.h>
+
+#endif // __SERIES60_PUSH_SP 
+
+// CONSTANTS
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::NewL
+// ---------------------------------------------------------
+//
+CUnknownContentHandler* CUnknownContentHandler::NewL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::NewL")
+
+    CUnknownContentHandler* self = new (ELeave) CUnknownContentHandler; 
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::NewL")
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::~CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::~CUnknownContentHandler()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::~CUnknownContentHandler")
+
+    Cancel();
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::~CUnknownContentHandler")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::CUnknownContentHandler()
+:   CPushContentHandlerBase(), 
+    iSavedMsgId( KMsvNullIndexEntryId )
+    {
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ConstructL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::ConstructL")
+
+    CPushContentHandlerBase::ConstructL();
+    // Added to Active Scheduler.
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::ConstructL")
+    }
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CollectGarbageL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::CollectGarbageL")
+
+    DoCollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+    iState = EFilteringAndProcessing;
+#else // __SERIES60_PUSH_SP
+    // Do nothing - message is discarded.
+    iState = EDone;
+#endif // __SERIES60_PUSH_SP
+    IdleComplete();
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::CollectGarbageL")
+    }
+
+#ifdef __SERIES60_PUSH_SP
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ProcessingPushMsgEntryL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+
+    const TBool bioMsg( BioMessageTypeL() );
+    if ( bioMsg )
+        {
+        PUSHLOG_WRITE(" BIO message");
+        // convert to bio format & save
+        SaveBioMessageEntryL();
+        }
+    else
+        {
+        PUSHLOG_WRITE(" Not BIO message");
+
+        // Check if the received content is supported.
+        RApaLsSession apaLs;
+        User::LeaveIfError( apaLs.Connect() );
+        CleanupClosePushL<RApaLsSession>( apaLs );
+
+        // Try to find out the data type.
+        TPtrC contentTypePtr;
+        iMessage->GetContentType( contentTypePtr );
+        HBufC8* contentT8 = HBufC8::NewMaxLC( contentTypePtr.Length() );
+        contentT8->Des().Copy( contentTypePtr );
+        TDataRecognitionResult result;
+        User::LeaveIfError( apaLs.RecognizeData( KNullDesC(), 
+                                                 *contentT8, 
+                                                 result ) );
+        CleanupStack::PopAndDestroy( contentT8 ); // contentT8
+
+        CDocumentHandler* docHandler = CDocumentHandler::NewLC( NULL );
+        TBool supported = docHandler->CanOpenL( result.iDataType );
+
+        CleanupStack::PopAndDestroy( 2, &apaLs ); // docHandler, apaLs
+
+        // Save only supported msg.
+        if ( supported )
+            {
+                // create unknown push message entry and save
+                SaveUnknownPushMsgEntryL();
+            }
+        }
+
+    iState = EDone;
+    IdleComplete();
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::BioMessageTypeL
+// ---------------------------------------------------------
+//
+TBool CUnknownContentHandler::BioMessageTypeL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::BioMessageTypeL")
+
+    // need to create local RFs for BIO otherwise raises exception
+    RFs localFS;
+    CleanupClosePushL( localFS );
+    User::LeaveIfError( localFS.Connect() );
+    CBIODatabase* bioDB = CBIODatabase::NewLC( localFS );
+
+    TPtrC contentTypePtr;
+    iMessage->GetContentType( contentTypePtr );
+
+    iBioMsgUID = KNullUid;
+    TBool isBio = EFalse;
+    // IsBioMessageL returns KErrNone if found or KErrNotFound if not found 
+    if ( bioDB->IsBioMessageL( EBioMsgIdIana, 
+                           contentTypePtr, 
+                           NULL, 
+                           iBioMsgUID ) == KErrNone )
+        {
+        isBio = ETrue;
+        }
+
+    CleanupStack::PopAndDestroy( 2 ); // bioDB, localFS
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::BioMessageTypeL")
+    return isBio;
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveBioMessageEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveBioMessageEntryL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::SaveBioMessageEntryL")
+
+    // create sms message from CPushMessage and then save message
+    RFs fileSession;
+    User::LeaveIfError(fileSession.Connect());
+    CleanupClosePushL(fileSession);
+    CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
+    CleanupStack::PushL(smsBuffer);
+
+    CSmsMessage* smsMessage = CSmsMessage::NewL( fileSession, 
+                                                 CSmsPDU::ESmsDeliver, 
+                                                 smsBuffer );
+    CleanupStack::PushL( smsMessage );
+
+    smsMessage->SmsPDU().SetAlphabet( TSmsDataCodingScheme::ESmsAlphabet8Bit );
+
+    TPtrC8 fieldValue;
+
+    if ( iMessage->GetBinaryHeaderField( EHttpFrom, fieldValue ) ||
+     iMessage->GetBinaryHeaderField( EHttpXWapInitiatorURI, fieldValue ) ||
+     iMessage->GetBinaryHeaderField( EHttpContentLocation, fieldValue ) )
+        {
+        // Convert 8 bit to 16 bit
+        HBufC* tempAddr = HBufC::NewLC( fieldValue.Length() );
+        tempAddr->Des().Copy( fieldValue );
+
+        smsMessage->SmsPDU().SetToFromAddressL( *tempAddr );
+        CleanupStack::PopAndDestroy( tempAddr );
+        }
+
+    if ( iMessage->GetMessageBody( fieldValue ) )
+        {
+        HBufC* tempBody = HBufC::NewLC( fieldValue.Length() );
+        tempBody->Des().Copy( fieldValue );
+
+        smsBuffer->InsertL( 0, *tempBody );
+        CleanupStack::PopAndDestroy( tempBody );
+        }
+
+    CleanupStack::Pop( 2 ); //smsBuffer, smsMessage
+
+    StoreMsgL( smsMessage ); // destroys CSmsMessage (contains smsBuffer)
+    CleanupStack::PopAndDestroy( &fileSession );
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveBioMessageEntryL")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::StoreMsgL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::StoreMsgL( CSmsMessage* aSmsMsg )
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::StoreMsgL")
+
+    CleanupStack::PushL( aSmsMsg );
+
+    // Create a CSmsHeader based on this message. smsHdr takes ownership of aSmsMsg
+    CSmsHeader* smsHdr = CSmsHeader::NewL( aSmsMsg );
+    CleanupStack::Pop( aSmsMsg );
+    CleanupStack::PushL( smsHdr );
+
+    // get root entry
+    CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+    CleanupStack::PushL( msvEntry );
+
+    // create an invisible blank entry 
+    TMsvEntry entry;
+    entry.iType = KUidMsvMessageEntry;
+    entry.SetVisible( EFalse );
+    entry.SetInPreparation( ETrue );
+    entry.SetReadOnly( EFalse );
+    entry.SetUnread( ETrue );
+
+    TMsvId serviceId = SetBioServiceIdL();
+    TBuf<KSmsDescriptionLength> description;    
+
+// SMUT Unbranch
+    CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
+    CleanupStack::PushL( smsPlugin );
+
+    if ( iBioMsgUID != KNullUid )
+        {
+        // sets entry with values passed in
+        TSmsUtilities::PopulateMsgEntry( entry, 
+                                         *aSmsMsg, 
+                                         serviceId, 
+                                         KUidBIOMessageTypeMtm );
+        entry.iBioType = iBioMsgUID.iUid;
+
+        // Look up and set the description
+        TInt index;
+        CBIODatabase* bioDB = CBIODatabase::NewLC( msvEntry->Session().FileSession() );
+        bioDB->GetBioIndexWithMsgIDL( iBioMsgUID, index );
+        description.Copy( bioDB->BifReader(index).Description() );
+        entry.iDescription.Set( description );
+        CleanupStack::PopAndDestroy(); // bioDB
+        }
+    else
+        {
+        // sets entry with values passed in
+        TSmsUtilities::PopulateMsgEntry( entry, *aSmsMsg, serviceId );
+
+        // Look up and set the description
+// SMUT Unbranch
+        smsPlugin->GetDescription( *aSmsMsg, description );
+        entry.iDescription.Set( description );
+        }
+    
+    // Set the details
+    TBuf<KSmsDetailsLength> details;    
+    TInt err = smsPlugin->GetDetails( msvEntry->Session().FileSession(), 
+                                          *aSmsMsg, 
+                                          details );
+    if ( !err )
+        {
+        entry.iDetails.Set( details );
+        }
+
+// SMUT Unbranch
+    CleanupStack::PopAndDestroy( smsPlugin );
+
+    // Store entry in inbox
+    msvEntry->SetEntryL( KMsvGlobalInBoxIndexEntryId );
+    msvEntry->CreateL( entry );
+    msvEntry->Session().CleanupEntryPushL( entry.Id() );
+    msvEntry->SetEntryL( entry.Id() );
+
+    // Save the message
+    CMsvStore* store = msvEntry->EditStoreL();
+    CleanupStack::PushL( store );
+
+    // Save off the CSmsHdr
+    smsHdr->StoreL( *store );
+
+    // Save the body
+    
+    // Create and fill a CRichText object to save to store..
+    CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
+    CleanupStack::PushL( paraFormatLayer );
+    CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+    CleanupStack::PushL( charFormatLayer );
+    CRichText* richText = CRichText::NewL( paraFormatLayer, charFormatLayer );
+    CleanupStack::PushL( richText );
+    HBufC* bufBody=HBufC::NewLC( aSmsMsg->Buffer().Length() );
+    TPtr bufBodyPtr = bufBody->Des();
+    aSmsMsg->Buffer().Extract( bufBodyPtr, 0, aSmsMsg->Buffer().Length() );
+    richText->InsertL( 0, bufBodyPtr ); 
+    store->StoreBodyTextL( *richText );
+    CleanupStack::PopAndDestroy( 4 ); //bufBody, richText, charFormatLayer, paraFormatLayer
+    
+    store->CommitL();
+    entry.SetReadOnly( ETrue );
+    entry.SetVisible( ETrue );
+    entry.SetInPreparation( EFalse );
+    msvEntry->ChangeL( entry );
+
+    CleanupStack::PopAndDestroy(); //store
+    msvEntry->Session().CleanupEntryPop(); //entry
+    CleanupStack::PopAndDestroy( 2 ); //msvEntry, smsHdr
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::StoreMsgL")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetBioServiceIdL
+// ---------------------------------------------------------
+//
+TMsvId CUnknownContentHandler::SetBioServiceIdL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::SetBioServiceIdL")
+
+    CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+
+    CleanupStack::PushL( msvEntry );
+    
+    TMsvId serviceId = KMsvNullIndexEntryId; 
+    TRAPD( err, TSmsUtilities::ServiceIdL( *msvEntry, 
+                                           serviceId, 
+                                           KUidBIOMessageTypeMtm ) );
+    if ( err == KErrNotFound )
+        {
+        serviceId = KMsvLocalServiceIndexEntryId;
+        err = KErrNone;
+        }
+    
+    CleanupStack::PopAndDestroy(); //msvEntry
+    User::LeaveIfError( err );
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::SetBioServiceIdL")
+    return serviceId;
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveUnknownPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveUnknownPushMsgEntryL()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+
+    CUnknownPushMsgEntry* unknownPushMsgEntry = 
+                          CUnknownPushMsgEntry::NewL();
+    CleanupStack::PushL( unknownPushMsgEntry );
+
+    SetUnknownPushMsgEntryFieldsL( *unknownPushMsgEntry );
+
+    iSavedMsgId = unknownPushMsgEntry->SaveL( *iMsvSession, 
+                                              KMsvGlobalInBoxIndexEntryId );
+
+    CleanupStack::PopAndDestroy( unknownPushMsgEntry ); // unknownPushMsgEntry
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+                             ( CUnknownPushMsgEntry& aUnknownPushMsgEntry )
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+
+    // Set all the relevant fields
+
+    // Get server address.
+    TPtrC8 srvAddress;
+    if ( iMessage->GetServerAddress( srvAddress ) )
+        {
+        aUnknownPushMsgEntry.SetFromL( srvAddress );
+        }
+
+    TPtrC contentTypePtr;
+    iMessage->GetContentType( contentTypePtr );
+    aUnknownPushMsgEntry.SetContentTypeL( contentTypePtr );
+
+    TPtrC8 msgBodyPtr;
+    iMessage->GetMessageBody( msgBodyPtr );
+    aUnknownPushMsgEntry.SetMessageDataL( msgBodyPtr );
+
+    // First line in Inbox: TMsvEntry::iDetails.
+    if ( srvAddress.Length() == 0 )
+        {
+        // Read from resource.
+        HBufC* details = 
+            iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+        aUnknownPushMsgEntry.SetMsgDetailsL( *details );
+        CleanupStack::PopAndDestroy( details );
+        }
+    else
+        {
+        // Convert the "From" information to the format required by the UI 
+        // spec and then decode it.
+        HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+        CleanupStack::PushL( details );
+        HBufC* convertedFrom = 
+            CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+        CleanupStack::PushL( convertedFrom );
+        //
+        aUnknownPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+        //
+        CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+        }
+
+    // Second line in Inbox: TMsvEntry::iDescription.
+    TPtrC8 contentUriPtr;
+    iMessage->GetBinaryHeaderField( EHttpXWapContentURI, contentUriPtr );
+    // Copy the 8-bit descriptor into a unicode one.
+    HBufC* contentUri = HBufC::NewMaxLC( contentUriPtr.Length() );
+    contentUri->Des().Copy( contentUriPtr );
+    // Extract file name from X-wap-content-uri.
+    HBufC* fileName = FileNameFromUriL( *contentUri );
+    CleanupStack::PopAndDestroy( contentUri ); // contentUri
+    CleanupStack::PushL( fileName );
+
+    if ( fileName->Length() == 0 )
+        {
+        // TODO: Read from resource.
+        //"Unknown content type" qtn_wap_push_msg_content_not_supported
+        }
+    else
+        {
+        aUnknownPushMsgEntry.SetMsgDescriptionL( *fileName );
+        }
+
+    CleanupStack::PopAndDestroy( fileName ); // fileName
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::FileNameFromUriL
+// ---------------------------------------------------------
+//
+HBufC* CUnknownContentHandler::FileNameFromUriL( const TDesC& aUri ) const
+    {
+    TUriParser pars;
+    User::LeaveIfError( pars.Parse( aUri ) );
+
+    HBufC* res = NULL;
+    if ( pars.IsPresent( EUriPath ) )
+        {
+        TPtrC path = pars.Extract( EUriPath );
+        // Extract the remaining text after the last slash character.
+        // If the path contains a file name, then it has to contain 
+        // a slash also, so if there is no slash then it's sure that there 
+        // is no file name in it.
+        TInt index = path.LocateReverse( TChar('/') );
+        if ( index < 0 )
+            {
+            // No file name.
+            }
+        else if ( ++index < path.Length() ) // If not at the end...
+            {
+            // Last slash found. Extract the text after the slash.
+            res = path.Mid( index ).AllocL();
+            }
+        }
+
+    if ( !res )
+        {
+        res = KNullDesC().AllocL();
+        }
+
+    return res;
+    }
+
+#endif // __SERIES60_PUSH_SP
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg, 
+                                             TRequestStatus& aStatus )
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+    __ASSERT_DEBUG( aPushMsg != NULL, 
+                    ContHandPanic( EPushContHandPanMsgNull ) );
+
+    iMessage = aPushMsg;
+    iAcknowledge = ETrue;
+    SetConfirmationStatus( aStatus );
+    iState = EGarbageCollecting;
+    IdleComplete();
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+    __ASSERT_DEBUG( aPushMsg != NULL, 
+                    ContHandPanic( EPushContHandPanMsgNull ) );
+
+    iAcknowledge = EFalse;
+    iMessage = aPushMsg;
+    iState = EGarbageCollecting;
+    IdleComplete();
+
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::HandleMessageL")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CancelHandleMessage()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::CancelHandleMessage")
+    Cancel();
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::CancelHandleMessage")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved1()
+    {
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved2
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved2()
+    {
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::DoCancel()
+    {
+    PUSHLOG_ENTERFN("CUnknownContentHandler::DoCancel")
+    Complete( KErrCancel );
+    PUSHLOG_LEAVEFN("CUnknownContentHandler::DoCancel")
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::RunL()
+    {
+    // Handle errors in RunError().
+    PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
+    User::LeaveIfError( iStatus.Int() );
+
+    // use active state machine routine to manage activites:
+    switch ( iState )
+        {
+        case EGarbageCollecting:
+            {
+            CollectGarbageL();
+            break;
+            }
+
+#ifdef __SERIES60_PUSH_SP
+
+        case EFilteringAndProcessing:
+            {
+            if ( !FilterPushMsgL() )
+                {
+                // It did not pass the filter. Done.
+                iState = EDone;
+                IdleComplete();
+                }
+            else
+                {
+                // Continue.
+                ProcessingPushMsgEntryL();
+                }
+            break;
+            }
+        
+#endif // __SERIES60_PUSH_SP
+
+        default:
+            {
+            PUSHLOG_WRITE("CUnknownContentHandler default EDone")
+            Complete( KErrNone );
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CUnknownContentHandler::RunError( TInt aError )
+    {
+    PUSHLOG_WRITE_FORMAT("CUnknownContentHandler::RunError: %d",aError)
+
+    iState = EDone;
+    Complete( aError );
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CUnknownContentHandler.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CUnknownContentHandler.
+*
+*/
+
+
+
+#ifndef __CUNKNOWNCONTENTHANDLER_H__
+#define __CUNKNOWNCONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+
+// CONSTANTS
+
+const TUid KUidPushUnknownContentHandler = { EUidPushUnknownContentHandler };
+_LIT( KUnknownContentHandlerData, "*" );
+
+// FORWARD DECLARATIONS
+
+class CSmsMessage;
+class CUnknownPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* CUnknownContentHandler provides the default plugin when the 
+* specific plugin for a data type cannot be matched.
+*
+* If the feature flag __SERIES60_PUSH_SP is defined, then all this 
+* kind of messages are discarded on reception.
+*/ 
+class CUnknownContentHandler : public CPushContentHandlerBase
+	{
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @return The constructed object.
+        */
+	    static CUnknownContentHandler* NewL();
+
+        /**
+        * Destructor.
+        */
+	    virtual ~CUnknownContentHandler();
+
+    private: // Constructors
+
+        /**
+        * Constructor.
+        */
+	    CUnknownContentHandler();
+
+        /**
+        * Symbian OS constructor.
+        */
+	    void ConstructL();
+
+    private: // New functions
+
+        /**
+        * Do Garbage Collection synchronously.
+        * @return None.
+        */
+	    void  CollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+
+        /**
+        * Create/Saving Push Msg Entry in the appropriate message store.
+        * First query the type of push message to check if it is a known BIO
+        * message type: 
+        *   If it is then 
+        *		save Push Message as appropriate BIO message
+        *	else
+        *		save as UnknownPushMsgEntry.
+        * @return None.
+        */
+	    void  ProcessingPushMsgEntryL();
+
+        /**
+        * Check if the given Push Message, which is now owned by the handler,
+        * is a BIO Messsage (setting the member variable iBioMsgUID if it is)
+        * and returning a boolean to indicate success (ETrue) or EFalse otherwise.
+        * @return TBool
+        *  ETrue - push message is a BIO message
+        *  EFalse - push message is not BIO message
+        */
+	    TBool BioMessageTypeL();
+
+        /**
+        * Save CPushMessage as the relevant BIO message type.
+        * Firstly create SMS message and use CPushMessage as
+        * source to populate SMS. Then save SMS message.
+        * @return None.
+        */
+	    void  SaveBioMessageEntryL();
+
+        /**
+        * Create CMsvEntry for sms messsage, stores the entry and 
+        * then delete entry once done.
+        * @param aMessage CSmsMessage which embodies details of CPushMessage.
+        */
+	    void  StoreMsgL( CSmsMessage* aSmsMsg );
+
+        /**
+        * Set the service id for Bio messaging
+        * @return TMsvId The service id for the message store.
+        */
+	    TMsvId SetBioServiceIdL();
+
+        /** 
+        * Save CPushMessage as a CUnknownPushMsgEntry
+        * @return None.
+        */
+	    void  SaveUnknownPushMsgEntryL();
+
+        /**
+        * Sets the Unknown Push Message Entry Fields from the data in
+        * the received CPushMessage:
+        * @param aUnknownPushMsgEntry CUnknownPushMsgEntry to populate with 
+        *        CPushMessage details.
+        */
+	    void  SetUnknownPushMsgEntryFieldsL( CUnknownPushMsgEntry& 
+                                             aUnknownPushMsgEntry );
+
+        /**
+        * Extract the file name from the URI.
+        * @param aUri The URI.
+        * @return The file name part or an empty string.
+        */
+	    HBufC* FileNameFromUriL( const TDesC& aUri ) const;
+
+#endif // __SERIES60_PUSH_SP
+
+    private: // Methods from CPushHandlerBase
+
+        /**
+        * HandleMessage Async. Version. Takes ownership of Push Message and 
+        * sets self active to continue processing message.
+        * @param aPushMsg CPushMessage to process.
+        * @param aStatus Request status variable for use in asynchronous 
+        *        operations.
+        * @return None.
+        */
+	    void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+        /**
+        * HandleMessage Sync. Version. Takes ownership of Push Message and 
+        * sets self active to continue processing message.
+        * Initial State: Set data members then go to the next state 
+        * @param aPushMsg CPushMessage to process.
+        */
+	    void HandleMessageL( CPushMessage* aPushMsg );
+
+        /**
+        * Same functionality as DoCancel()
+        */
+	    void  CancelHandleMessage();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved1();
+
+        /**
+        * Reserved function.
+        */
+	    void CPushHandlerBase_Reserved2();
+	    
+    private: // Methods from CActive
+
+        /**
+        * Cancels the handling of the message and revokes the active status
+        * of the handler 
+        */
+	    void DoCancel();
+
+        /**
+        * Handler States:
+        *    EFilteringAndProcessing - Filter new msg according to Service 
+        *                  message settings and Convert CPushMessage to a 
+        *                  format to save and save the message (either as Bio 
+        *                  msg or UnknownPushMsgEntry)
+        *	 EDone		- Clean up, complete observer
+        */
+	    void RunL();
+
+        /**
+        * This is invoked when RunL Leaves with an error.
+        * Cleans up and returns.
+        * @param aError Error passed into this function
+        */
+	    TInt RunError( TInt aError );
+
+    private: // Data
+
+	    enum TState
+            {
+            EGarbageCollecting, 
+            EFilteringAndProcessing,
+            EDone
+            };
+
+        TMsvId              iSavedMsgId; ///< ID of the saved message.
+	    TUid				iBioMsgUID; ///< BIO msg UID.
+    };
+
+#endif	// __CUNKNOWNCONTENTHANDLER_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerDef.hrh	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Macro definitions and enums for the Push Content Handlers.
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERDEF_HRH
+#define PUSHCONTENTHANDLERDEF_HRH
+
+
+/// PushContentHandler DLL.
+#define EUidPushContentHandlerDll 0x101F854C
+
+/// Implementation UIDs.
+#define EUidPushUnknownContentHandler 0x101F854D
+#define EUidPushSIContentHandler 0x101F854E
+#define EUidPushSLContentHandler 0x101F854F
+#define EUidPushCOContentHandler 0x10008D47
+#define EUidPushMultiPartMixedContentHandler 0x101F8550
+#define EUidPushMultiPartRelAndAltContentHandler 0x101F8551
+
+/** PushContentHandler Interface UID (defined by Symbian).
+* See CContentHandlerBase.h, KUidPushContentHandlerBase. */
+#define EUidPushContentHandlerBase 0x101F3E5E
+
+
+#endif // PUSHCONTENTHANDLERDEF_HRH
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerGroupProxy.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Proxy definition.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerDef.hrh"
+#include "CUnknownContentHandler.h"
+#include "CSIContentHandler.h"
+#include "CSLContentHandler.h"
+#include "CCOContentHandler.h"
+#include "CMultiPartMixedContentHandler.h"
+#include "CMultiPartRelAndAltContentHandler.h"
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+
+const TImplementationProxy ImplementationTable[] = 
+	{
+        IMPLEMENTATION_PROXY_ENTRY( EUidPushUnknownContentHandler, CUnknownContentHandler::NewL ),
+        IMPLEMENTATION_PROXY_ENTRY( EUidPushSIContentHandler, CSIContentHandler::NewL ),
+        IMPLEMENTATION_PROXY_ENTRY( EUidPushSLContentHandler, CSLContentHandler::NewL ),
+        IMPLEMENTATION_PROXY_ENTRY( EUidPushCOContentHandler, CCOContentHandler::NewL ),
+        IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartMixedContentHandler, CMultiPartMixedContentHandler::NewL ),
+        IMPLEMENTATION_PROXY_ENTRY( EUidPushMultiPartRelAndAltContentHandler, CMultiPartRelAndAltContentHandler::NewL )
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+	return ImplementationTable;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Panic utility
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerPanic.h"
+
+// LOCAL CONSTANTS AND MACROS
+
+_LIT( KContHandPanicString, "PushContentHandler(MTM)" );
+
+// ---------------------------------------------------------
+// ContHandPanic
+// ---------------------------------------------------------
+//
+GLDEF_C void ContHandPanic( TPushContentHandlerPanic aReason )
+	{
+	User::Panic( KContHandPanicString, aReason );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerPanic.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Panic utility
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERPANIC_H
+#define PUSHCONTENTHANDLERPANIC_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+
+enum TPushContentHandlerPanic
+	{
+    EPushContHandPanCommandNotSupported = 1, ///< Not supported command.
+    EPushContHandPanBadType, ///< Unsupported message type for an operation.
+    EPushContHandPanFoldersNotSupported, ///< MTM loaded with bad message entry.
+    EPushContHandPanEmptySelection, ///< Entry selection is empty.
+    EPushContHandPanNotInitUrl,
+    EPushContHandPanNoContext,
+    EPushContHandPanAlreadyInitialized,
+    EPushContHandPanBadActionValue,
+    EPushContHandPanBadState, 
+    EPushContHandPanNoFetchOp,
+    EPushContHandPanBadTransaction,
+    EPushContHandPanNoSiIdAttr,
+    EPushContHandPanNoCreatedAttr,
+    EPushContHandPanNoActionAttr,
+    EPushContHandPanTooManySi,
+    EPushContHandPanTooManySl,
+    EPushContHandPanMsgNull,
+    EPushContHandPanBadCreatedType,
+    EPushContHandPanExpiresNotOpaque,
+    EPushContHandPanHrefNotString,
+    EPushContHandPanClassTokenReached,
+    EPushContHandPanUnexpHrefAttrVal,
+    EPushContHandPanUnexpSiToken,
+    EPushContHandPanUnexpSlToken,
+    EPushContHandPanUnspecSiAction,
+    EPushContHandPanUnspecSlAction,
+    EPushContHandPanUnexpectedTimeType,
+    EPushContHandPanBadExpiresType,
+    EPushContHandPanBadTTimeLength,
+    EPushContHandPanNoSiIdOrHrefAttr,
+    EPushContHandPanUnspecSiHref,
+    EPushContHandPanUnspecSlHref,
+    EPushContHandPanSlMsgIdSet,
+    EPushContHandPanSlMsgIdNotSet,
+    EPushContHandPanFetchAlreadyInit,
+    EPushContHandPanAutBadState,
+    EPushContHandPanSiResNotOnStack,
+    EPushContHandPanNullCharSetId,
+    EPushContHandPanNullUcs2Buf
+	};
+
+GLREF_C void ContHandPanic( TPushContentHandlerPanic aReason );
+
+#endif // PUSHCONTENTHANDLERPANIC_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Utilities
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushContentHandlerUtils.h"
+#include <e32std.h>
+#include <nw_dom_document.h>
+
+// ---------------------------------------------------------
+// NwxStatusToErrCode
+// ---------------------------------------------------------
+//
+TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode )
+    {
+    TInt ret( KErrGeneral );
+
+    switch ( aNwxErrorCode )
+        {
+        case NW_STAT_SUCCESS:
+            {
+            ret = KErrNone;
+            break;
+            }
+        case NW_STAT_OUT_OF_MEMORY:
+            {
+            ret = KErrNoMemory;
+            break;
+            }
+        case NW_STAT_CANCELLED:
+        case NW_STAT_CONN_CANCELLED:
+            {
+            ret = KErrCancel;
+            break;
+            }
+        default:
+            {
+            ret = KErrGeneral;
+            break;
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------
+// RWbxmlDictionary::InitializeL
+// ---------------------------------------------------------
+//
+void RWbxmlDictionary::InitializeL( NW_Int32 aCount, 
+                                    NW_WBXML_Dictionary_t* aDictArray[] )
+    {
+    NW_Status_t stat = NW_STAT_SUCCESS;
+    stat = NW_WBXML_Dictionary_initialize( aCount, aDictArray );
+    User::LeaveIfError( NwxStatusToErrCode( stat ) );
+    }
+
+// ---------------------------------------------------------
+// RWbxmlDictionary::Close
+// ---------------------------------------------------------
+//
+void RWbxmlDictionary::Close()
+    {
+    NW_WBXML_Dictionary_destroy();
+    }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::CDocumentTreeOwner() 
+:   iDocTree( NULL )
+    {
+    }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree ) 
+:   iDocTree( aDocTree )
+    {
+    }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::~CDocumentTreeOwner
+// ---------------------------------------------------------
+//
+CDocumentTreeOwner::~CDocumentTreeOwner() 
+    {
+    if ( iDocTree )
+        {
+        NW_DOM_DocumentNode_Delete( iDocTree );
+        }
+    }
+
+// ---------------------------------------------------------
+// CDocumentTreeOwner::SetDocTree
+// ---------------------------------------------------------
+//
+void CDocumentTreeOwner::SetDocTree( NW_DOM_DocumentNode_t* aDocTree ) 
+    {
+    iDocTree = aDocTree;
+    }
+
+// ---------------------------------------------------------
+// CStringOwner::CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::CStringOwner() 
+:   iString( NULL )
+    {
+    }
+
+// ---------------------------------------------------------
+// CStringOwner::CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::CStringOwner( NW_String_t* aString ) 
+:   iString( aString )
+    {
+    }
+
+// ---------------------------------------------------------
+// CStringOwner::~CStringOwner
+// ---------------------------------------------------------
+//
+CStringOwner::~CStringOwner() 
+    {
+    if ( iString )
+        {
+        NW_String_delete( iString );
+        }
+    }
+
+// ---------------------------------------------------------
+// CStringOwner::SetString
+// ---------------------------------------------------------
+//
+void CStringOwner::SetString( NW_String_t* aString ) 
+    {
+    iString = aString;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushContentHandlerUtils.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Utilities
+*
+*/
+
+
+
+#ifndef PUSHCONTENTHANDLERUTILS_H
+#define PUSHCONTENTHANDLERUTILS_H
+
+// INCLUDE FILES
+
+#include <e32def.h>
+#include <e32base.h>
+#include <nwx_status.h>
+#include <nw_wbxml_dictionary.h>
+#include <nw_encoder_stringtable.h>
+#include <nw_string_string.h>
+
+/**
+* Convert cXML status code to Symbian OS error code.
+* @param aNwxErrorCode cXML status.
+* @return Symbian OS error code.
+*/
+TInt NwxStatusToErrCode( NW_Status_t aNwxErrorCode );
+
+/*
+*   The following tiny classes have been introduced to help putting C-style 
+*   Browser Engine structures to the Cleanup Stack, so that we can implement 
+*   a LEAVE-safe code.
+*/
+
+/**
+* Encapsulate WBXML dictionary initialization.
+*/
+class RWbxmlDictionary
+    {
+    public:
+        void InitializeL( NW_Int32 aCount, NW_WBXML_Dictionary_t* aDictArray[] );
+        void Close();
+    };
+
+/**
+* Encapsulate a WBXML document tree.
+*/
+class CDocumentTreeOwner : public CBase
+    {
+    public:
+        CDocumentTreeOwner();
+        CDocumentTreeOwner( NW_DOM_DocumentNode_t* aDocTree );
+        ~CDocumentTreeOwner();
+    public:
+        void SetDocTree( NW_DOM_DocumentNode_t* aDocTree );
+    private:
+        NW_DOM_DocumentNode_t* iDocTree; ///< Owned.
+    };
+
+/**
+* Encapsulate an NW_String_t.
+*/
+class CStringOwner : public CBase
+    {
+    public:
+        CStringOwner();
+        CStringOwner( NW_String_t* aString );
+        ~CStringOwner();
+    public:
+        void SetString( NW_String_t* aString );
+    private:
+        NW_String_t* iString; ///< Owned.
+    };
+
+#endif // PUSHCONTENTHANDLERUTILS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CPushMtmAutoFetchOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmAutoFetchOperation.h"
+#include "PushMtmFetchOperation.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmLog.h"
+
+// CONSTANTS
+
+/// Max retry.
+LOCAL_D const TInt KMaxTry = 2;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::NewL
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation* CPushMtmAutoFetchOperation::NewL
+            (
+                const TDesC& aRequestedUrl, 
+                TInt aTimeDelayInSec, 
+                TRequestStatus& aObserverRequestStatus 
+            )
+    {
+    CPushMtmAutoFetchOperation* op = 
+        new (ELeave) CPushMtmAutoFetchOperation
+            ( aTimeDelayInSec, aObserverRequestStatus );
+    CleanupStack::PushL( op );
+    op->ConstructL( aRequestedUrl );
+    CleanupStack::Pop(); // op
+    return op;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation::~CPushMtmAutoFetchOperation()
+    {
+    Cancel();
+    delete iFetchOp;
+    delete iRequestedUrl;
+	iTimer.Close();
+    }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::StartL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::StartL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::StartL")
+
+    Cancel();
+
+    iTry = 0;
+    iState = EFetch;
+
+	SetActive();
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, KErrNone );
+
+    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::StartL")
+	}
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmAutoFetchOperation::CPushMtmAutoFetchOperation
+                            
+        ( 
+            TInt aTimeDelayInSec, 
+            TRequestStatus& aObserverRequestStatus 
+        )
+:   CActive( EPriorityStandard ), 
+    iObserver( aObserverRequestStatus ),
+    iState( EInit ), 
+    iTimeDelayInSec( aTimeDelayInSec )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::ConstructL( const TDesC& aRequestedUrl )
+    {
+    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::ConstructL")
+
+    iRequestedUrl = HBufC::NewMaxL( aRequestedUrl.Length() );
+    iRequestedUrl->Des().Copy( aRequestedUrl );
+
+    User::LeaveIfError( iTimer.CreateLocal() );
+
+    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::ConstructL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::FetchL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::FetchL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::FetchL")
+
+    delete iFetchOp;
+    iFetchOp = NULL;
+    iStatus = KRequestPending;
+    SetActive();
+    iFetchOp = CPushMtmFetchOperation::NewL( *iRequestedUrl, iStatus );
+    PUSHLOG_WRITE(" Fetch op created")
+
+    ++iTry; // Increase indicator.
+    PUSHLOG_WRITE_FORMAT(" Try: %d",iTry)
+    iFetchOp->StartL();
+    iState = ECheck; // Next state.
+    PUSHLOG_WRITE(" Fetch op started")
+
+    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::FetchL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::DoCancel()
+    {
+    if ( iFetchOp )
+        {
+        iFetchOp->Cancel();
+        }
+
+    iTimer.Cancel();
+
+    TRequestStatus* status = &iObserver;
+    User::RequestComplete( status, KErrCancel );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::RunL
+// ---------------------------------------------------------
+//
+void CPushMtmAutoFetchOperation::RunL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmAutoFetchOperation::RunL")
+
+    __ASSERT_DEBUG( iState != EInit && iState != EDone, 
+                    ContHandPanic( EPushContHandPanAutBadState ) );
+
+    switch ( iState )
+        {
+        case EFetch:
+            {
+            PUSHLOG_WRITE(" EFetch")
+            FetchL();
+            break;
+            }
+
+        case ECheck:
+            {
+            PUSHLOG_WRITE_FORMAT2(" ECheck: %d,%d",iStatus.Int(),iTry)
+            if ( iStatus.Int() != KErrNone && iTry < KMaxTry )
+                {
+                // Wait and Retry.
+                iTimer.Cancel();
+                iStatus = KRequestPending;
+                SetActive();
+                TTimeIntervalMicroSeconds32 delayInMSec = 
+                                            iTimeDelayInSec * 1000000;
+                iTimer.After( iStatus, delayInMSec );
+                iState = EFetch;
+                }
+            else
+                {
+                // No error or no more trial allowed.
+                iState = EDone;
+                PUSHLOG_WRITE_FORMAT(" SignalObs: %d",iStatus.Int());
+                TRequestStatus* status = &iObserver;
+                User::RequestComplete( status, iStatus.Int() );
+                }
+            break;
+            }
+
+        default:
+            {
+            PUSHLOG_WRITE(" default")
+            // JIC.
+            iState = EDone;
+            TRequestStatus* status = &iObserver;
+            User::RequestComplete( status, KErrNone );
+            break;
+            }
+        }
+
+    PUSHLOG_LEAVEFN("CPushMtmAutoFetchOperation::RunL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmAutoFetchOperation::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmAutoFetchOperation::RunError( TInt aError )
+    {
+    PUSHLOG_WRITE_FORMAT("CPushMtmAutoFetchOperation::RunError <%d>",aError);
+
+    // Signal the observer that a leave has occured.
+    TRequestStatus* status = &iObserver;
+    User::RequestComplete( status, aError );
+
+    return KErrNone;
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmAutoFetchOperation.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of PushMtmAutoFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMAUTOFETCHOPERATION_H
+#define PUSHMTMAUTOFETCHOPERATION_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMtmFetchOperation;
+
+// CLASS DECLARATION
+
+/**
+* Asynchronous fetch operation that runs in silent mode and in addition to the 
+* services of CPushMtmFetchOperation it retries downloading of the indicated 
+* service if the first try fails.
+*/
+class CPushMtmAutoFetchOperation : public CActive
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @param aRequestedUrl The requested URL.
+        * @param aTimeDelayInSec Time delay between fetches in seconds.
+        * @param aObserverRequestStatus Completion status.
+        * @return The constructed client.
+        */
+        static CPushMtmAutoFetchOperation* NewL
+            (
+                const TDesC& aRequestedUrl, 
+                TInt aTimeDelayInSec, 
+                TRequestStatus& aObserverRequestStatus 
+            );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CPushMtmAutoFetchOperation();
+
+    public: // Functions from base classes
+
+        /**
+        * Start or restart the operation.
+        */
+        void StartL();
+
+    protected: // Constructors 
+
+        /**
+        * Constructor.
+        * @param aTimeDelayInSec Time delay between fetches in seconds.
+        * @param aObserverRequestStatus Completion status.
+        */
+        CPushMtmAutoFetchOperation( TInt aTimeDelayInSec, 
+                                    TRequestStatus& aObserverRequestStatus );
+
+        /**
+        * Second phase constructor.
+        * @param aRequestedUrl The requested URL.
+        */
+        void ConstructL( const TDesC& aRequestedUrl );
+
+    protected: // New functions
+
+        /**
+        * Issue fetching.
+        */
+        void FetchL();
+
+    protected: // Functions from base classes
+
+        /**
+        * Cancel fetching.
+        * @return None.
+        */
+        void DoCancel();
+
+        /**
+        * Start fetching and make an entry into the operation mapper.
+        * @return None.
+        */
+        void RunL();
+
+        /**
+        * Leave handler protocol implementation: it is called when 
+        * RunL leaves.
+        */
+        TInt RunError( TInt aError );
+
+    protected: // Data
+
+        TRequestStatus& iObserver;  ///< Observer's status.
+        HBufC* iRequestedUrl;       ///< Request URI or NULL. Owned.
+
+        enum TState    ///< State.
+            {
+            EInit,     ///< Initial state.
+            EFetch,    ///< Fetch.
+            ECheck,    ///< Check the result of the fetching.
+            EDone      ///< Operation done.
+            };
+
+        TState iState; ///< Current state of the state machine.
+
+        /// The operation that does downloading. Owned.
+        CPushMtmFetchOperation* iFetchOp;
+        RTimer iTimer; ///< Timer for waiting.
+        TInt iTimeDelayInSec; ///< Time delay between downloadings in seconds.
+        TInt iTry; ///< How many times we have tried downloading so far?
+    };
+
+#endif // PUSHMTMAUTOFETCHOPERATION_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Data supplier for responses loaded from cache
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "PushMtmCacheDataSupplier.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheDataSupplier::CPushMtmCacheDataSupplier(
+    HBufC8* aBody ) 
+    : iBody( aBody )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheDataSupplier* CPushMtmCacheDataSupplier::NewL(
+    HBufC8* aBody )
+    {
+    CPushMtmCacheDataSupplier* self = new(ELeave) CPushMtmCacheDataSupplier( aBody );
+    return self;
+    }
+
+// Destructor
+CPushMtmCacheDataSupplier::~CPushMtmCacheDataSupplier()
+    {
+    ReleaseData();
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheDataSupplier::GetNextDataPart
+// Return the next chunk of response body from the Cache
+// -----------------------------------------------------------------------------
+//
+TBool CPushMtmCacheDataSupplier::GetNextDataPart(
+    TPtrC8 &aDataChunk )
+    {
+    aDataChunk.Set( *iBody );
+    return ETrue;
+    }
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheDataSupplier.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*
+*/
+/*
+* ==============================================================================
+*  Name        : PushMtmCacheDataSupplier.h
+*  Part of     : PushMtm
+*  Interface   : 
+*  Description : 
+*  Version     : 3.1
+*/
+
+
+#ifndef CPUSHMTMCACHEDATASUPPLIER_H
+#define CPUSHMTMCACHEDATASUPPLIER_H
+
+//  INCLUDES
+#include <http/MHTTPDataSupplier.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+
+/**
+ *  Data supplier to supply response body if the url is loaded
+ *  from cache
+ *
+ *  @lib 
+ *  @since 3.1
+ */
+class CPushMtmCacheDataSupplier : public CBase, public MHTTPDataSupplier
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CPushMtmCacheDataSupplier* NewL( HBufC8* aBody );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CPushMtmCacheDataSupplier();      
+     
+    public: // from MHTTPDataSupplier
+        
+        /**
+        * From MHTTPDataSupplier. Free the data chunk that was requested.
+        * @since 2.0
+        */
+        virtual void ReleaseData() { delete iBody; iBody = NULL;}
+        
+        /**
+        * From MHTTPDataSupplier. It is not possible to know
+        * the data size, so return KErrNotFound
+        * @since 2.0
+        */
+        virtual TInt OverallDataSize () { return KErrNotFound; }
+        
+        /**
+        * From MHTTPDataSupplier. Get the next data part of the response body
+        * @since 2.0
+        */
+        virtual TBool GetNextDataPart( TPtrC8& aDataPart );
+        
+        /**
+        * From MHTTPDataSupplier. Not Supported
+        * @since 2.0
+        */
+        virtual TInt Reset() { return KErrNotFound; }
+        
+    private:
+        
+        /**
+        * C++ default constructor.
+        */
+        CPushMtmCacheDataSupplier( HBufC8* aBody );
+        
+    private:    // Data
+        
+        //owned by datasupplier and is destroyed 
+        //when the releasedata function is called
+        HBufC8* iBody;        
+    };
+
+#endif      // CPUSHMTMCACHEDATASUPPLIER_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,363 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CPushMtmCacheSupply
+*
+*/
+
+
+// INCLUDE FILES
+#include "PushMtmCacheSupply.h"
+#include "httpcachemanager.h"
+#include "PushMtmCacheDataSupplier.h"
+
+#include <http/RHTTPTransaction.h>
+#include <http/mhttpdatasupplier.h>
+#include <http/rhttpsession.h>
+#include <httperr.h>
+
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+const TInt KResponseTimeout = 0;
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::CPushMtmCacheSupply
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheSupply::CPushMtmCacheSupply(MCacheSupplyCallbacks* aCacheSupplyCallbacks ):
+      // closed by default
+      iReponseState( THTTPEvent::EClosed )
+    {
+    iCacheEntry.iCacheHandler = NULL;
+    iCacheEntry.iCacheEntry = NULL;
+    iCacheSupplyCallbacks = aCacheSupplyCallbacks;
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::ConstructL(CHttpCacheManager* aCacheMgr)
+    {
+    iCacheManager = aCacheMgr;
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPushMtmCacheSupply* CPushMtmCacheSupply::NewL(CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks  )
+    {
+    CPushMtmCacheSupply* self = new( ELeave ) CPushMtmCacheSupply( aCacheSupplyCallbacks);
+
+    CleanupStack::PushL( self );
+    self->ConstructL(aCacheMgr);
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+// Destructor
+CPushMtmCacheSupply::~CPushMtmCacheSupply()
+    {
+    delete iDataSupplier;
+    CloseRequest();
+    if (iResponseTimer)
+        {
+        iResponseTimer->Cancel();
+        }
+    delete iResponseTimer;
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::StartRequestL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPushMtmCacheSupply::StartRequestL( )
+    {
+    TInt status;
+
+    status = iCacheManager->RequestL( *(iCacheSupplyCallbacks->Transaction()), 
+    TBrCtlDefs::ECacheModeNormal , iCacheEntry );
+    // start a timer that feeds the content to the transaction
+    if( status == KErrNone )
+        {
+        iClosed = EFalse;
+        // set response state. start with the http headers.
+        iReponseState = THTTPEvent::EGotResponseHeaders;
+        //
+        iResponseTimer = CPeriodic::NewL( CActive::EPriorityHigh );
+        iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
+        }
+    return status;
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::CloseRequest
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::CloseRequest()
+    {
+    if( !iClosed )
+	    {
+	    iCacheManager->RequestClosed( (iCacheSupplyCallbacks->Transaction()), iCacheEntry );
+	    iClosed = ETrue;
+	    }
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::HeadersReceived
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::HeadersReceivedL()
+    {
+    // do not cache content we just sent off
+    if( iReponseState == THTTPEvent::EClosed )
+        {
+        RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+        iCacheManager->ReceivedResponseHeadersL( *(iCacheSupplyCallbacks->Transaction()), iCacheEntry );
+        //
+        iNotModified = trans->Response().StatusCode() == HTTPStatus::ENotModified;
+        if( iNotModified )
+            {
+            // change from 304 to 200 -otherwise trans exits with EFailed
+            trans->Response().SetStatusCode( HTTPStatus::EOk );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::BodyReceivedL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::BodyReceivedL()
+    {
+    // do not cache content we just sent off
+    if( iReponseState == THTTPEvent::EClosed )
+        {
+        RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+        MHTTPDataSupplier* supplier = trans->Response().Body();
+        //
+        iCacheManager->ReceivedResponseBodyDataL( *trans, *supplier, iCacheEntry );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResponseComplete
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::ResponseCompleteL()
+    {
+    if( iReponseState == THTTPEvent::EClosed )
+        {
+        RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+        // not modified needs body before response complete
+        if( iNotModified )
+            {
+            // use cache
+            // close response first
+            iCacheManager->ResponseComplete( *trans, iCacheEntry );
+            // request the item from cache
+            if( iCacheManager->RequestL( *trans, TBrCtlDefs::ECacheModeOnlyCache, iCacheEntry ) == KErrNone )
+                {
+                // ser
+                iReponseState = THTTPEvent::EGotResponseBodyData;
+                //
+                SendBodyL();
+                CloseRequest();
+                }
+            }
+        else
+            {
+            // normal response complete
+            iCacheManager->ResponseComplete( *trans, iCacheEntry );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResponseCallbackL
+//
+//
+// -----------------------------------------------------------------------------
+//
+TInt CPushMtmCacheSupply::ResponseCallbackL(
+    TAny* aAny )
+    {
+    //
+    CPushMtmCacheSupply* thisObj = (CPushMtmCacheSupply*)aAny;
+    thisObj->SupplyResponseL();
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::SupplyResponseL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::SupplyResponseL()
+    {
+    RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+    //
+    switch( iReponseState )
+        {
+        case THTTPEvent::EGotResponseHeaders:
+            {
+            //
+            iFailed = EFalse;
+            if( iCacheManager->RequestHeadersL( *trans, iCacheEntry ) == KErrNone )
+                {
+                //
+                trans->Response().SetStatusCode( HTTPStatus::EOk );
+                //
+                iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseHeaders );
+                // move to the next state
+                iReponseState = THTTPEvent::EGotResponseBodyData;
+                }
+            else
+                {
+                // move to the next state
+                iFailed = ETrue;
+                // move to the next state
+                iReponseState = THTTPEvent::EResponseComplete;
+                }
+            break;
+            }
+        case THTTPEvent::EGotResponseBodyData:
+            {
+            //
+            SendBodyL();
+            // move to the next state
+            iReponseState = THTTPEvent::EResponseComplete;
+            break;
+            }
+        case THTTPEvent::EResponseComplete:
+            {
+            iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EResponseComplete );
+            // move to the next state
+            iReponseState = !iFailed ? THTTPEvent::ESucceeded : THTTPEvent::EFailed;
+            break;
+            }
+        case THTTPEvent::ESucceeded:
+            {
+            // move to the next state
+            iReponseState = THTTPEvent::EClosed;
+            // cancel timer
+            iResponseTimer->Cancel();
+            //
+            iCacheSupplyCallbacks->HandleEventL( THTTPEvent::ESucceeded );
+            // this obj is destroyed at this point
+            break;
+            }
+        case THTTPEvent::EFailed:
+            {
+            // move to the next state
+            iReponseState = THTTPEvent::EClosed;
+            // cancel timer
+            iResponseTimer->Cancel();
+            //
+            iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EFailed );
+            // this obj is destroyed at this point
+            break;
+            }
+        default:
+            {
+            //
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::SendBodyL
+//
+//
+// -----------------------------------------------------------------------------
+//
+void CPushMtmCacheSupply::SendBodyL()
+    {
+    RHTTPTransaction* trans = iCacheSupplyCallbacks->Transaction();
+    //
+    TBool lastChunk;
+    // currently it is always the last chunk
+    HBufC8* body = iCacheManager->RequestNextChunkL( *trans, lastChunk, iCacheEntry );
+    if( body )
+        {
+        CleanupStack::PushL( body );
+        // create datasupplier and attach it to the transaction
+        if( !iDataSupplier )
+            iDataSupplier = CPushMtmCacheDataSupplier::NewL( body );
+        trans->Response().SetBody( *iDataSupplier );
+        CleanupStack::Pop(); // body
+        //
+        iCacheSupplyCallbacks->HandleEventL( THTTPEvent::EGotResponseBodyData );
+        }
+    else
+        {
+        // move to the next state
+        iFailed = ETrue;
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::PauseSupply
+// -----------------------------------------------------------------------------
+void CPushMtmCacheSupply::PauseSupply()
+	{
+	if( iResponseTimer && iResponseTimer->IsActive() )
+		iResponseTimer->Cancel();
+	}
+
+// -----------------------------------------------------------------------------
+// CPushMtmCacheSupply::ResumeSupply
+// -----------------------------------------------------------------------------
+void CPushMtmCacheSupply::ResumeSupply()
+	{
+	if( iResponseTimer && !iResponseTimer->IsActive() )
+		iResponseTimer->Start( KResponseTimeout, KResponseTimeout, TCallBack( &ResponseCallbackL, this ) );
+	}
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmCacheSupply.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,214 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Definition of CPushMtmCacheSupply
+*
+*/
+
+
+#ifndef CPUSHMTMCACHESUPPLY_H
+#define CPUSHMTMCACHESUPPLY_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <brctldefs.h>
+#include "httpcachemanager.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CHttpTransaction;
+class CPeriodic;
+class CPushMtmCacheDataSupplier;
+
+// CLASS DECLARATION
+
+
+
+class MCacheSupplyCallbacks
+    {
+    public:
+        virtual RHTTPTransaction* Transaction() = 0;
+        virtual void HandleEventL(THTTPEvent aEvent) = 0;
+    };
+
+
+/**
+*  This class handles http transactions.
+*  @lib PushMtmContentHandler
+*  @since 3.1
+*/
+class CPushMtmCacheSupply : public CBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        * @param
+        * @param
+        * @param
+        * @return Http cache  object.
+        */
+        static CPushMtmCacheSupply* NewL( CHttpCacheManager* aCacheMgr, MCacheSupplyCallbacks* aCacheSupplyCallbacks );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CPushMtmCacheSupply();
+
+    public: // new functions
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        TInt StartRequestL(  );
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void CloseRequest();
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void HeadersReceivedL();
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void BodyReceivedL();
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void ResponseCompleteL();
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        TInt ResponseState() const { return iReponseState;}
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        TBool IsSupplying()             { return iResponseTimer!=0; }
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+		void PauseSupply();
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+		void ResumeSupply();
+
+    private:
+
+        /**
+        * Construct.
+        * @param
+        * @param
+        * @parem
+        * @return
+        */
+        CPushMtmCacheSupply( MCacheSupplyCallbacks* aCacheSupplyCallbacks  );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL(CHttpCacheManager* aCacheMgr);
+
+    private: //
+
+        /**
+        * Callback for async response
+        * @since 3.1
+        * @param  aAny this pinter
+        * @return TInt KErrNone
+        */
+        static TInt ResponseCallbackL( TAny* aAny );
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void SupplyResponseL();
+
+        /**
+        *
+        * @since 3.1
+        * @param
+        * @return
+        */
+        void SendBodyL();
+
+    private:    // Data
+
+        //
+        CHttpCacheManager*              iCacheManager;          // not owned
+        //
+        TInt                            iReponseState;
+        //
+        CPeriodic*                      iResponseTimer;         // owned
+        //
+        TBool                           iFailed;
+        //
+        TBool                           iNotModified;
+        //
+        THttpCacheEntry                 iCacheEntry;
+        // ETrue if the cache object is closed
+        TBool							iClosed;
+
+        CPushMtmCacheDataSupplier*      iDataSupplier;
+        MCacheSupplyCallbacks*          iCacheSupplyCallbacks;
+  };
+
+#endif      // CPUSHMTMCACHESUPPLY_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,1043 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CPushMtmFetchOperation.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmFetchOperation.h"
+#include "PushContentHandlerPanic.h"
+#include "PushMtmLog.h"
+#include <push/cslpushmsgentry.h>
+#include <Uri8.h>
+#include <SysUtil.h>
+#include <cookiefilterinterface.h>
+#include <uaproffilter_interface.h>
+#include <CommDbConnPref.h>
+#include <cdbcols.h>
+#include <browseruisdkcrkeys.h>
+#include "PushMtmPrivateCRKeys.h"
+#include <centralrepository.h> 
+#include <commdb.h>
+#include <ApDataHandler.h>
+#include <ApAccessPointItem.h>
+#include <ApUtils.h>
+#include <ApSelect.h>
+#include <httpfilteracceptheaderinterface.h>
+#include <httpfilteriopinterface.h>
+#include <httpfiltercommonstringsext.h>
+#include <deflatefilterinterface.h>
+#include <FeatMgr.h>
+
+// ================= MACROS =======================
+
+#ifdef _DEBUG
+    /// Guard "debug-only" argument name with this (expands to argument).
+    #define DEBUG_ONLY( argName ) argName
+#else /* not defined _DEBUG */
+    /// Guard "debug-only" argument name with this (expands to nothing).
+    #define DEBUG_ONLY( argName )
+#endif /* def _DEBUG */
+
+// ================= LOCAL CONSTANTS =======================
+
+_LIT8( KHttpProtString, "HTTP/TCP" );
+_LIT8( KUserAgent, "Push MTM" );
+
+/// Base HTTP error code. See Extended Error Handling UI Specification!
+LOCAL_C const TInt KPushMtmHttpErrorBase = -25000;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::NewL
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation* CPushMtmFetchOperation::NewL
+                                    (
+                                        const TDesC& aRequestedUrl, 
+                                        TRequestStatus& aObserverRequestStatus 
+                                    )
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::NewL")
+
+    CPushMtmFetchOperation* op = 
+        new (ELeave) CPushMtmFetchOperation( aObserverRequestStatus );
+    CleanupStack::PushL( op );
+    op->ConstructL( aRequestedUrl );
+    CleanupStack::Pop( op ); // op
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::NewL")
+    return op;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::~CPushMtmFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation::~CPushMtmFetchOperation()
+    {
+    Cancel();
+    delete ( iCacheMgr );
+    delete iCacheSupply;
+    iHttpTrans.Close();
+    iHttpSess.Close();
+    iConn.Close();
+    iSockServ.Close();
+    delete iRequestedUrl;
+    delete iSourceUri;
+    delete iBody;
+    FeatureManager::UnInitializeLib();
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StartL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::StartL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartL")
+
+    Cancel();
+
+    iResult = KErrNone;
+    iState = EInit;
+
+	SetActive();
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, KErrNone );
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CPushMtmFetchOperation
+// ---------------------------------------------------------
+//
+CPushMtmFetchOperation::CPushMtmFetchOperation
+                        ( TRequestStatus& aObserverRequestStatus ) 
+:   CActive( EPriorityStandard ), 
+    iObserver( aObserverRequestStatus ),
+    iState( EInit ),
+    iResult( KErrNone )
+    {
+    CActiveScheduler::Add( this );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::ConstructL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::ConstructL( const TDesC& aRequestedUrl )
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::ConstructL")
+
+    iRequestedUrl = HBufC8::NewMaxL( aRequestedUrl.Length() );
+    iRequestedUrl->Des().Copy( aRequestedUrl );
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::ConstructL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetDefaultInetAccessPointL
+// ---------------------------------------------------------
+//
+TBool CPushMtmFetchOperation::GetDefaultInetAccessPointL
+                              ( TUint32& aIapId ) const
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
+
+    // Try to find the default AP.
+    // The Browser may stores the default AP in the shared data.
+    CRepository* repository = CRepository::NewL( KCRUidBrowser );
+    CleanupStack::PushL( repository );
+
+    TInt wapApId;
+    User::LeaveIfError
+        ( repository->Get( KBrowserDefaultAccessPoint, wapApId ) );
+    TUint32 wapApId32( wapApId );
+    TUint32 iapId32( 0 );
+
+    CleanupStack::PopAndDestroy( repository );
+    repository = 0;
+
+    CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP );
+    CleanupStack::PushL( commsDb );
+    CApDataHandler* apDataHandler = CApDataHandler::NewLC( *commsDb );
+    CApAccessPointItem* apItem = CApAccessPointItem::NewLC();
+    TRAPD( err, apDataHandler->AccessPointDataL( wapApId32, *apItem ) );
+    CApUtils* apUtils = CApUtils::NewLC( *commsDb );
+
+    TBool wapApFound( EFalse );
+    TBool iapFound( EFalse );
+
+    PUSHLOG_WRITE_FORMAT("  err: <%d>",err)
+    if ( err == KErrNone )
+        {
+        wapApFound = ETrue;
+        }
+    else // err != KErrNone
+        {
+        // The first valid access point has to be selected if exists
+        CApSelect* apSelect = CApSelect::NewLC
+                                            (
+                                                *commsDb, 
+                                                KEApIspTypeAll, 
+                                                EApBearerTypeAll, 
+                                                KEApSortNameAscending
+                                            );
+        if ( apSelect->MoveToFirst() )
+            {
+            wapApFound = ETrue;
+            wapApId32 = apSelect->Uid();
+            }
+        CleanupStack::PopAndDestroy( apSelect ); // apSelect
+        }
+
+    if ( wapApFound )
+        {
+        // Get the IAP ID from the WAP AP ID.
+#ifndef __SERIES60_WSP
+        iapId32 = 0;
+        TRAPD( errTransl, iapId32 = apUtils->IapIdFromWapIdL( wapApId32 ) );
+        PUSHLOG_WRITE_FORMAT("  IapIdFromWapIdL errTransl: <%d>",errTransl)
+        if ( errTransl == KErrNone )
+            {
+            iapFound = ETrue;
+            }
+#else
+        iapId32 = wapApId32;
+        iapFound = ETrue;
+#endif // __SERIES60_WSP
+        }
+
+    CleanupStack::PopAndDestroy( 4 ); // apUtils, apItem, 
+                                            // apDataHandler, commsDb
+
+    if ( iapFound )
+        {
+        aIapId = iapId32;
+        }
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::GetDefaultInetAccessPointL")
+    return iapFound;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::InitializeL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::InitializeL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::InitializeL")
+
+    User::LeaveIfError( iSockServ.Connect() );
+    PUSHLOG_WRITE("CPushMtmFetchOperation iSockServ.Connect() OK")
+    User::LeaveIfError( iConn.Open( iSockServ ) );
+    PUSHLOG_WRITE("CPushMtmFetchOperation iConn.Open() OK")
+
+    // Open the HTTP session.
+    iHttpSess.OpenL( KHttpProtString );
+    PUSHLOG_WRITE("CPushMtmFetchOperation iHttpSess.OpenL OK")
+
+    // Set our Socket Server handle and Connection as session properties.
+    iHttpSess.ConnectionInfo().SetPropertyL
+        (
+            StringF( HTTP::EHttpSocketServ ),
+            THTTPHdrVal( iSockServ.Handle() )
+        );
+    PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketServ set")
+    iHttpSess.ConnectionInfo().SetPropertyL
+        (
+            StringF( HTTP::EHttpSocketConnection ),
+            THTTPHdrVal( REINTERPRET_CAST( TInt, &iConn ) )
+        );
+    PUSHLOG_WRITE("CPushMtmFetchOperation EHttpSocketConnection set")
+
+    // Open different string tables to the session. These are required 
+    // by the Accept Header Filter.
+    iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetTable() );
+    PUSHLOG_WRITE("CPushMtmFetchOperation table 1 opened");
+    iHttpSess.StringPool().OpenL( HttpFilterCommonStringsExt::GetLanguageTable() );
+    PUSHLOG_WRITE("CPushMtmFetchOperation table 2 opened");
+
+    // Install the very same set of filters that BrowserEngine installs.
+    // The following filters must not be installed:
+    // - Authentication Filter, because the fetch operation and the push mtm 
+    //   subsystem does not support credentials.
+    // - Conn Handler Filter, because the fetch operation let it to the HTTP 
+    //   core framework to create connection - it just sets the acces point.
+
+    // Install UAProf filter.
+    CHttpUAProfFilterInterface::InstallFilterL( iHttpSess );
+    PUSHLOG_WRITE(" UAProf installed")
+
+    // Install cookie filter.
+    CHttpCookieFilter::InstallFilterL( iHttpSess );
+    PUSHLOG_WRITE(" Cookie filter installed")
+
+    // Create cache manager
+    FeatureManager::InitializeLibL();
+    iCacheMgr = CHttpCacheManager::NewL();
+    PUSHLOG_WRITE(" Cache Manager installed")
+
+    // Install Accept Header Filter.
+    CHttpFilterAcceptHeaderInterface::InstallFilterL( iHttpSess );
+    PUSHLOG_WRITE(" Accept Header Filter installed")
+
+    // Install IOP Filter.
+    CHttpFilterIopInterface::InstallFilterL( iHttpSess, iopOptionHostHeader );
+    PUSHLOG_WRITE(" IOP Filter installed")
+
+    // Install Deflate Filter.
+    CHttpDeflateFilter::InstallFilterL( iHttpSess );
+    PUSHLOG_WRITE(" Deflate Filter installed");
+
+    TUint32 defIapId( 0 );
+    TBool defIapIdFound = EFalse;
+    TCommDbConnPref commPrefs;
+#ifndef __WINS__
+    // Use Browser default AP & comms db:
+    defIapIdFound = GetDefaultInetAccessPointL( defIapId );
+    PUSHLOG_WRITE_FORMAT("  defIapIdFound: <%d>",(TInt)defIapIdFound)
+    PUSHLOG_WRITE_FORMAT("  defIapId:      <%d>",defIapId)
+    commPrefs.SetDialogPreference( ECommDbDialogPrefDoNotPrompt );
+    if ( defIapIdFound )
+        {
+        commPrefs.SetIapId( defIapId );
+        }
+#else // __WINS__
+    // Prompt the user to select access point
+    commPrefs.SetDialogPreference( ECommDbDialogPrefPrompt );
+#endif // __WINS__
+
+    iState = EStartRequest;
+
+    iStatus = KRequestPending;
+    SetActive();
+    iConn.Start( commPrefs, iStatus );
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::InitializeL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StartRequestL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::StartRequestL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::StartRequestL")
+
+    // Create the transaction.
+    CreateTransactionL();
+
+    CheckCacheL();
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::StartRequestL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CheckCacheL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::CheckCacheL()
+
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::CheckCacheL")
+    iCacheSupply = CPushMtmCacheSupply::NewL(iCacheMgr, this);
+    TInt ret = iCacheSupply->StartRequestL();
+    iStatus = KRequestPending;
+	SetActive();
+    if (ret != KErrNone) // Not in cache
+        {
+        iState = ERequest;
+        iCachedResponse = ETrue;
+        TRequestStatus* status = &iStatus;
+        User::RequestComplete( status, KErrNone);
+        }
+    else
+        {
+        iState = EDone;
+        iCachedResponse = EFalse;
+        }
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CheckCacheL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RequestL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::RequestL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::RequestL")
+
+    iState = EDone;
+
+    iStatus = KRequestPending;
+	SetActive();
+    SubmitTransactionL();
+    // Do not call InvokeRun(). Let MHFRunL to handle the request.
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::RequestL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::Done
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::Done()
+    {
+    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::Done iResult: <%d>",iResult);
+
+    delete iRequestedUrl;
+    iRequestedUrl = NULL;
+
+    // Notify parent.
+    TRequestStatus* status = &iObserver;
+    User::RequestComplete( status, iResult );
+//  iState = EInit;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::CreateTransactionL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::CreateTransactionL()
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::CreateTransactionL")
+
+    __ASSERT_DEBUG( iRequestedUrl, 
+                    ContHandPanic( EPushContHandPanNotInitUrl ) );
+
+    // Create the transaction.
+    TUriParser8 uri;
+    User::LeaveIfError( uri.Parse( *iRequestedUrl ) );
+    iHttpTrans = 
+        iHttpSess.OpenTransactionL( uri, *this, StringF( HTTP::EGET ) );
+    PUSHLOG_WRITE("CPushMtmFetchOperation OpenTransactionL OK")
+
+    // Set request headers.
+    RHTTPHeaders hdr = iHttpTrans.Request().GetHeaderCollection();
+    SetHeaderL( hdr, HTTP::EUserAgent, KUserAgent );
+    SetHeaderL( hdr, HTTP::EAccept, HTTP::EAnyAny );
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::CreateTransactionL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SubmitTransactionL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SubmitTransactionL()
+    {
+    iHttpTrans.SubmitL();
+    PUSHLOG_WRITE("CPushMtmFetchOperation iHttpTrans.SubmitL OK")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::HandleResponseHeadersL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::HandleResponseHeadersL( RHTTPResponse aResponse )
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::HandleResponseHeadersL")
+
+    TInt httpCode = aResponse.StatusCode();
+    PUSHLOG_WRITE_FORMAT(" HttpStatus: %d",httpCode)
+
+#ifdef __TEST_LOG__
+    LogHeadersL( aResponse.GetHeaderCollection() );
+#endif // __TEST_LOG__
+
+    if ( HTTPStatus::IsSuccessful( httpCode ) && 
+         ( httpCode != HTTPStatus::ENoContent ) )
+        {
+        // Successful GET.
+        PUSHLOG_WRITE(" Successful GET")
+        // Get content type.
+        iDataType = TDataType
+            ( GetContentTypeL( aResponse.GetHeaderCollection() ) );
+        // Get source URI.
+        HBufC8* buf = GetSourceUriL( iHttpTrans ).AllocL();
+        PUSHLOG_WRITE(" Source URI got")
+        delete iSourceUri;
+        iSourceUri = buf;
+        // No error:
+        iResult = KErrNone;
+        }
+    else
+        {
+        // See Extended Error Handling UI Specification!
+        iResult = KPushMtmHttpErrorBase - httpCode;
+        PUSHLOG_WRITE_FORMAT(" iResult: <%d>",iResult)
+        }
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::HandleResponseHeadersL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::VersionRetryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmFetchOperation::VersionRetryL()
+    {
+    TBool retryDone( EFalse );
+
+    // Check what http version we are using.
+    THTTPHdrVal val;
+    TBool exists = iHttpSess.ConnectionInfo().Property
+        (
+        StringF( HTTP::EHTTPVersion ), 
+        val
+        );
+    if ( exists && TInt( val ) == HTTP::EHttp11 )
+        {
+        // Currently using HTTP/1.1. Cancel transaction and resubmit it using
+        // HTTP/1.0.
+        iHttpTrans.Cancel();
+        iHttpSess.ConnectionInfo().SetPropertyL
+            (
+            StringF( HTTP::EHTTPVersion ),
+            THTTPHdrVal( StringF( HTTP::EHttp10 ) )
+            );
+        SubmitTransactionL();
+        retryDone = ETrue;
+        }
+
+    return retryDone;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::AppendResponse
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::AppendResponse( const TDesC8& aDataChunk )
+    {
+    TInt err( KErrNone );
+    HBufC8* newBodyBuf = NULL;
+
+    if ( !iBody )
+        {
+        // iBody does not exist yet; allocate buffer for the first data chunk.
+        newBodyBuf = HBufC8::New( aDataChunk.Length() );
+        }
+    else
+        {
+        const TInt needed( iBody->Des().Length() + aDataChunk.Length() );
+        if ( iBody->Des().MaxLength() < needed )
+            {
+            // iBody exists, but small.
+            newBodyBuf = iBody->ReAlloc( needed );
+            iBody = NULL; // ReAlloc deleted it!
+            }
+        else
+            {
+            // iBody exists and the new chunk fits into it.
+            }
+        }
+
+    if ( newBodyBuf )
+        {
+        __ASSERT_DEBUG( iBody == NULL, 
+                        ContHandPanic( EPushContHandPanAlreadyInitialized ) );
+        delete iBody; // Not necessary, JIC.
+        iBody = newBodyBuf;
+        }
+    else
+        {
+        if (aDataChunk.Length() > 0)
+            {
+            err = KErrNoMemory;
+            }
+        }
+
+    if ( !err )
+        {
+        iBody->Des().Append( aDataChunk );
+        }
+
+    return err;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders, 
+                                         HTTP::TStrings aHdrField, 
+                                         const TDesC8& aHdrValue )
+    {
+    RStringF valStr = iHttpSess.StringPool().OpenFStringL( aHdrValue );
+    CleanupClosePushL<RStringF>( valStr );
+    SetHeaderL( aHeaders, aHdrField, valStr );
+    CleanupStack::PopAndDestroy();  // close valStr
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders, 
+                                         HTTP::TStrings aHdrField, 
+                                         HTTP::TStrings aHdrValue )
+    {
+    SetHeaderL( aHeaders, aHdrField, StringF( aHdrValue ) );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::SetHeaderL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::SetHeaderL( RHTTPHeaders aHeaders, 
+                                         HTTP::TStrings aHdrField, 
+                                         const RStringF aHdrValue )
+    {
+    THTTPHdrVal val( aHdrValue );
+    aHeaders.SetFieldL( StringF( aHdrField ), val );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetContentTypeL
+// ---------------------------------------------------------
+//
+const TDesC8& CPushMtmFetchOperation::GetContentTypeL( RHTTPHeaders aHeaders )
+    {
+    THTTPHdrVal hdrVal;
+    User::LeaveIfError
+        ( aHeaders.GetField( StringF( HTTP::EContentType ), 0, hdrVal ) );
+    if ( hdrVal.Type() != THTTPHdrVal::KStrFVal )
+        {
+        User::Leave( KErrArgument );
+        }
+    return hdrVal.StrF().DesC();
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::GetSourceUriL
+// ---------------------------------------------------------
+//
+const TDesC8& CPushMtmFetchOperation::GetSourceUriL
+                                      ( RHTTPTransaction aTransaction )
+    {
+    // TODO if redirected URI exists, how do we get it?
+    // For the moment request URI is used.
+    return aTransaction.Request().URI().UriDes();
+    }
+
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::LogHeadersL
+// ---------------------------------------------------------
+//
+#ifndef __TEST_LOG__
+
+void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders /*aHeaders*/ )
+    {
+    }
+
+#else // #ifdef __TEST_LOG__
+
+void CPushMtmFetchOperation::LogHeadersL( RHTTPHeaders aHeaders )
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::LogHeadersL")
+
+    _LIT( KDateFormat, "%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S.%C%:3" );
+
+    PUSHLOG_WRITE("Headers:");
+
+    RStringPool strP = iHttpTrans.Session().StringPool();
+    THTTPHdrFieldIter it = aHeaders.Fields();
+
+    while ( !it.AtEnd() )
+        {
+        RStringTokenF fieldName = it();
+        RStringF fieldNameStr = strP.StringF( fieldName );
+        THTTPHdrVal fieldVal;
+        if ( aHeaders.GetField( fieldNameStr, 0, fieldVal ) == KErrNone )
+            {
+            const TInt KMaxLogStrLen = 64;
+            TPtrC8 fieldName8 = fieldNameStr.DesC();
+            TInt fieldNameLen = fieldName8.Length();
+            fieldNameLen = ( KMaxLogStrLen < fieldNameLen ) ? 
+                             KMaxLogStrLen : fieldNameLen;
+            fieldName8.Set( fieldName8.Mid( 0, fieldNameLen ) );
+            HBufC* fieldNameHBufC = HBufC::NewMaxLC( fieldName8.Length() );
+            TPtr fieldName = fieldNameHBufC->Des();
+            fieldName.Copy( fieldName8 );
+
+            switch ( fieldVal.Type() )
+                {
+                case THTTPHdrVal::KTIntVal:
+                    {
+                    PUSHLOG_WRITE_FORMAT2
+                        (" <%S> (%d)",&fieldName,fieldVal.Int())
+                    break;
+                    }
+
+                case THTTPHdrVal::KStrFVal:
+                    {
+                    RStringF fieldValStr = strP.StringF( fieldVal.StrF() );
+                    TPtrC8 fieldVal8 = fieldValStr.DesC();
+                    // Truncate if too long.
+                    TInt fieldValLen = fieldVal8.Length();
+                    fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ? 
+                                     KMaxLogStrLen : fieldValLen;
+                    fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
+                    // Truncate end.
+                    HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
+                    TPtr fieldVal = fieldValHBufC->Des();
+                    fieldVal.Copy( fieldVal8 );
+                    PUSHLOG_WRITE_FORMAT2
+                        (" <%S> (%S)",&fieldName,&fieldVal)
+                    CleanupStack::PopAndDestroy( fieldValHBufC ); 
+                                                // fieldValHBufC
+                    break;
+                    }
+
+                case THTTPHdrVal::KStrVal:
+                    {
+                    RString fieldValStr = strP.String( fieldVal.Str() );
+                    TPtrC8 fieldVal8 = fieldValStr.DesC();
+                    // Truncate if too long.
+                    TInt fieldValLen = fieldVal8.Length();
+                    fieldNameLen = ( KMaxLogStrLen < fieldValLen ) ? 
+                                     KMaxLogStrLen : fieldValLen;
+                    fieldVal8.Set( fieldVal8.Mid( 0, fieldValLen ) );
+                    // Truncate end.
+                    HBufC* fieldValHBufC = HBufC::NewMaxLC( fieldVal8.Length() );
+                    TPtr fieldVal = fieldValHBufC->Des();
+                    fieldVal.Copy( fieldVal8 );
+                    PUSHLOG_WRITE_FORMAT2
+                        (" <%S> (%S)",&fieldName,&fieldVal)
+                    CleanupStack::PopAndDestroy( fieldValHBufC ); 
+                                                // fieldValHBufC
+                    break;
+                    }
+
+                case THTTPHdrVal::KDateVal:
+                    {
+                    TDateTime date = fieldVal.DateTime();
+                    TBuf<40> dateTimeString;
+                    TTime t( date );
+                    TRAP_IGNORE( t.FormatL( dateTimeString, KDateFormat ) );
+                    PUSHLOG_WRITE_FORMAT2
+                        (" <%S> (%S)",&fieldName,&dateTimeString)
+                    break;
+                    }
+
+                default:
+                    {
+                    PUSHLOG_WRITE_FORMAT2
+                        (" <%S> unrecognised value type (%d)",
+                           &fieldName,fieldVal.Type())
+                    break;
+                    }
+                }
+
+            // Display realm for WWW-Authenticate header.
+            RStringF wwwAuth = strP.StringF
+                ( HTTP::EWWWAuthenticate, RHTTPSession::GetTable() );
+            if ( fieldNameStr == wwwAuth )
+                {
+                PUSHLOG_WRITE(" fieldNameStr == wwwAuth")
+                // check the auth scheme is 'basic'
+                RStringF basic = strP.StringF
+                    ( HTTP::EBasic, RHTTPSession::GetTable() );
+                RStringF realm = strP.StringF
+                    ( HTTP::ERealm, RHTTPSession::GetTable() );
+                THTTPHdrVal realmVal;
+                if ( ( fieldVal.StrF() == basic ) && 
+                    ( !aHeaders.GetParam( wwwAuth, realm, realmVal ) ) )
+                    {
+                    RStringF realmValStr = strP.StringF( realmVal.StrF() );
+                    PUSHLOG_WRITE_FORMAT(" Realm <%S>",&realmValStr);
+                    }
+                }
+
+            CleanupStack::PopAndDestroy( fieldNameHBufC ); // fieldNameHBufC
+            }
+        ++it;
+        }
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::LogHeadersL")
+    }
+
+#endif // __TEST_LOG__
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::DoCancel
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::DoCancel()
+    {
+    switch ( iState )
+        {
+        /*case EStartConnect:
+            {
+            // Complete ourselves - nothing is outstanding.
+            TRequestStatus* ownStatus = &iStatus;
+            User::RequestComplete( ownStatus, KErrCancel );
+            break;
+            }*/
+
+        /*case EConnect:
+            {
+            //__ASSERT_DEBUG( iConn, ContHandPanic( ECodInternal ) );
+            //iConn->Cancel(); // This will complete our status.
+            break;
+            }*/
+
+        case EStartRequest:
+        case ECheckCache:
+        case ERequest:
+            {
+            delete iCacheSupply;
+            iCacheSupply = NULL;
+
+            iHttpTrans.Close();
+            // Now the transaction has been closed. Closing it does not
+            // complete our status, so we do it manually.
+            TRequestStatus* status = &iStatus;
+            SetActive();
+            User::RequestComplete( status, iResult );
+            break;
+            }
+
+        case EInit:
+        default:
+            {
+            // No requests should be outstanding in these states.
+            //ContHandPanic( ECodInternal );
+            break;
+            }
+        }
+
+    iResult = KErrCancel;
+    Done();
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RunL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::RunL()
+    {
+    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL status = %d", iState);
+    // Handle errors in RunError().
+    User::LeaveIfError( iStatus.Int() );
+
+    switch ( iState )
+        {
+        case EInit:
+            {
+            InitializeL();
+            break;
+            }
+
+        case EStartRequest:
+            {
+            StartRequestL();
+            break;
+            }
+
+        case ERequest:
+            {
+            RequestL();
+            break;
+            }
+
+        case EDone:
+            {
+            Done();
+            break;
+            }
+
+        default:
+            {
+            // JIC.
+            Done();
+            break;
+            }
+        }
+    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunL moving to status = %d", iState);
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::RunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::RunError( TInt aError )
+    {
+    PUSHLOG_WRITE_FORMAT("CPushMtmFetchOperation::RunError <%d>",aError)
+
+    iResult = aError;
+    delete iCacheSupply;
+    iCacheSupply = NULL;
+    iHttpTrans.Close();
+    Done();
+
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::MHFRunL
+// ---------------------------------------------------------
+//
+void CPushMtmFetchOperation::MHFRunL
+    ( 
+        RHTTPTransaction DEBUG_ONLY( aTransaction ), 
+        const THTTPEvent& aEvent 
+    )
+    {
+    PUSHLOG_ENTERFN("CPushMtmFetchOperation::MHFRunL")
+    __ASSERT_DEBUG( aTransaction == iHttpTrans, 
+                    ContHandPanic( EPushContHandPanBadTransaction ) );
+    switch ( aEvent.iStatus )
+        {
+        case THTTPEvent::EGotResponseHeaders:
+            {
+            PUSHLOG_WRITE(" EGotResponseHeaders")
+            // pass headers to the cache first
+            TRAP_IGNORE( iCacheSupply->HeadersReceivedL() );
+            // Now we know that the request was processed by the server.
+            HandleResponseHeadersL( iHttpTrans.Response() );
+            break;
+            }
+
+        case THTTPEvent::EGotResponseBodyData:
+            {
+            PUSHLOG_WRITE(" EGotResponseBodyData")
+            // pass chunk to the cache first
+            TRAP_IGNORE( iCacheSupply->BodyReceivedL() );
+            // Get body data and save it.
+            TInt err( KErrNone );
+            MHTTPDataSupplier* body = iHttpTrans.Response().Body();
+            if ( !body )
+                {
+                PUSHLOG_WRITE(" NULL body")
+                }
+            else
+                {
+                TPtrC8 bodyPtr;
+                // Caution: no leaving between body->GetNextDataPart and
+                // body->ReleaseData calls! Data must always be released.
+#ifdef __TEST_LOG__
+                TBool isLast = body->GetNextDataPart( bodyPtr ); // No leave...
+                PUSHLOG_WRITE_FORMAT(" last? (%d)",(isLast?1:0))
+#else // ifndef __TEST_LOG__
+                (void)body->GetNextDataPart( bodyPtr ); // No leave...
+#endif // __TEST_LOG__
+                //if ( iHttpTrans.Request().Method() == StringF( HTTP::EGET ) )
+                err = AppendResponse( bodyPtr );
+                body->ReleaseData();                          // ...until here.
+                PUSHLOG_WRITE_FORMAT(" err: (%d)",err)
+                User::LeaveIfError( err );
+                }
+            break;
+            }
+
+        case THTTPEvent::EResponseComplete:
+            {                  
+            // do not mix it up with the ESucceeded
+            // The transaction's response is complete. An incoming event. 
+            TRAP_IGNORE( iCacheSupply->ResponseCompleteL() );
+            break;
+            }
+
+        case THTTPEvent::ERequestComplete:
+            {
+            // request is all set
+            iCacheSupply->CloseRequest();
+            break;
+            }
+
+        case THTTPEvent::EFailed:
+            {
+            PUSHLOG_WRITE(" EFailed")
+            // Safety code: we should already have an error code.
+            if ( iResult == KErrNone )
+                {
+                iResult = KErrGeneral;
+                }
+            // TODO. Fall through.
+            }
+
+        case THTTPEvent::ESucceeded:
+            {
+            PUSHLOG_WRITE(" ESucceeded")
+            delete iCacheSupply;
+            iCacheSupply = NULL;
+            iHttpTrans.Close();
+            // Transaction is finished, invoke RunL now.
+            TRequestStatus* status = &iStatus;
+            if (!IsActive())
+                {
+                SetActive();
+                }
+            User::RequestComplete( status, iResult );
+            break;
+            }
+
+        case THTTPEvent::ERedirectedPermanently:
+            {
+            PUSHLOG_WRITE(" ERedirectedPermanently")
+            // Do nothing just continue.
+            break;
+            }
+
+        default:
+            {
+            PUSHLOG_WRITE(" default case")
+            // Handle errors in MHFRunError.
+            User::LeaveIfError( aEvent.iStatus );
+            break;
+            }
+        }
+
+    PUSHLOG_LEAVEFN("CPushMtmFetchOperation::MHFRunL")
+    }
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::MHFRunError
+// ---------------------------------------------------------
+//
+TInt CPushMtmFetchOperation::MHFRunError
+    ( 
+        TInt aError, 
+        RHTTPTransaction DEBUG_ONLY( aTransaction ), 
+        const THTTPEvent& /*aEvent*/ 
+    )
+    {
+    __ASSERT_DEBUG( aTransaction == iHttpTrans, 
+                    ContHandPanic( EPushContHandPanBadTransaction ) );
+    iResult = aError;
+    iCacheSupply->CloseRequest();
+    iHttpTrans.Close();
+
+    // Transaction is finished, invoke RunL now. 
+    // iResult contains the (error) code.
+    if ( !IsActive() )
+        {
+	    SetActive();
+        }
+    TRequestStatus* status = &iStatus;
+    User::RequestComplete( status, KErrNone );
+
+    return KErrNone;
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,309 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Declaration of CPushMtmFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMFETCHOPERATION_H
+#define PUSHMTMFETCHOPERATION_H
+
+// INCLUDE FILES
+
+#include <e32std.h>
+#include <e32base.h>
+#include <http.h>
+#include <stringpool.h>
+#include <apmstd.h>
+#include <es_sock.h>
+#include "httpcachemanager.h"
+#include "PushMtmCacheSupply.h"
+
+// FORWARD DECLARATIONS
+
+class CMsvEntry;
+
+// CLASS DECLARATION
+
+/**
+* Asynchronous fetch operation that downloads the service indicated by an SL 
+* pushed service message.
+* 
+* The operation can run in silent mode without requiring any user intervention.
+*/
+class CPushMtmFetchOperation : public CActive, 
+                               public MHTTPTransactionCallback,
+                               public MCacheSupplyCallbacks
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @param aRequestedUrl The requested URL.
+        * @param aObserverRequestStatus Observer's status.
+        * @return The constructed operation.
+        */
+        static CPushMtmFetchOperation* NewL
+            (
+                const TDesC& aRequestedUrl, 
+                TRequestStatus& aObserverRequestStatus 
+            );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CPushMtmFetchOperation();
+
+    public: // Functions from base classes
+
+        /**
+        * Start or restart the operation.
+        */
+        void StartL();
+
+        RHTTPTransaction* Transaction(){ return &iHttpTrans; }
+        void HandleEventL(THTTPEvent aEvent) { MHFRunL(iHttpTrans, aEvent); }
+
+    protected: // Constructors
+
+        /**
+        * Constructor.
+        * @param aObserverRequestStatus Observer's status.
+        */
+        CPushMtmFetchOperation( TRequestStatus& aObserverRequestStatus );
+
+        /**
+        * Second phase constructor.
+        * @param aRequestedUrl The requested URL.
+        * @return None.
+        */
+        void ConstructL( const TDesC& aRequestedUrl );
+
+    protected: // New functions
+
+        /**
+        * Get the ID of the defauld internet access point set in the Browser 
+        * Preferences that is used for connection creation.
+        * @param aIapId The ID of the access point, if found. The value of 
+        *        this variable is not changed if no default ap can be found.
+        * @return Indicate if default ap could be found.
+        */
+        TBool GetDefaultInetAccessPointL( TUint32& aIapId ) const;
+
+    protected:    // state machine parts
+
+        /**
+        * Initiate connecting.
+        */
+        void InitializeL();
+
+        /**
+        * StartRequestL
+        */
+        void StartRequestL();
+
+        /**
+        * CheckCacheL
+        */
+        void CheckCacheL();
+
+        /**
+        * Initiate connecting.
+        */
+        void RequestL();
+
+        /**
+        * Clean up and notify parent.
+        */
+        void Done();
+
+        /**
+        * Create transaction, set request headers (and body for POST request).
+        */
+        void CreateTransactionL();
+
+        /**
+        * Submit the transaction (make the HTTP request).
+        */
+        void SubmitTransactionL();
+
+        /**
+        * Handle response from server.
+        * @param aResponse Response from server.
+        */
+        void HandleResponseHeadersL( RHTTPResponse aResponse );
+
+        /**
+        * HTTP Version Not Supported. Resubmit transaction using HTTP/1.0.
+        * @return ETrue if transaction was resubmitted, EFalse if not (i.e
+        * we already use HTTP/1.0).
+        */
+        TBool VersionRetryL();
+
+        /**
+        * Append a new chunk of response data to the reponse buffer.
+        * @return KErrNone or KErrNoMemory.
+        */
+        TInt AppendResponse( const TDesC8& aDataChunk );
+
+    protected:    // helpers
+
+        /**
+        * Helper function to set a header.
+        * @param aHeaders Set the header to this header set.
+        * @param aHdrField Header field name.
+        * @param aHdrValue Header value.
+        */
+        void SetHeaderL
+            (
+            RHTTPHeaders aHeaders,
+            HTTP::TStrings aHdrField,
+            const TDesC8& aHdrValue
+            );
+
+        /**
+        * Helper function to set a header.
+        * @param aHeaders Set the header to this header set.
+        * @param aHdrField Header field name.
+        * @param aHdrValue Header value.
+        */
+        void SetHeaderL
+            (
+            RHTTPHeaders aHeaders,
+            HTTP::TStrings aHdrField,
+            HTTP::TStrings aHdrValue
+            );
+
+        /**
+        * Helper function to set a header.
+        * @param aHeaders Set the header to this header set.
+        * @param aHdrField Header field name.
+        * @param aHdrValue Header value.
+        */
+        void SetHeaderL
+            (
+            RHTTPHeaders aHeaders,
+            HTTP::TStrings aHdrField,
+            const RStringF aHdrValue
+            );
+
+        /**
+        * Helper function to get the Content-Type header value.
+        * @param aHeaders HTTP header set.
+        * @return Content-Type header value.
+        */
+        const TDesC8& GetContentTypeL( RHTTPHeaders aHeaders );
+
+        /**
+        * Helper function to get the source URI of a transaction.
+        * @param aTransaction Transaction.
+        * @return Source URI.
+        */
+        const TDesC8& GetSourceUriL( RHTTPTransaction aTransaction );
+
+        /**
+        * Get a shared string from the session stringpool.
+        * @param aId Id of string.
+        * @return Shared string from HTTP string table. No need to close.
+        */
+        inline RStringF StringF( HTTP::TStrings aId );
+
+    protected:    // debug utilities
+
+        /**
+        * In debug build, log headers. In release build, do nothing.
+        * @param aHeaders Headers to log.
+        */
+        void LogHeadersL( RHTTPHeaders aHeaders );
+
+    protected: // Functions from base classes
+
+        /**
+        * Cancel fetching.
+        * @return None.
+        */
+        void DoCancel();
+
+        /**
+        * Start fetching and make an entry into the operation mapper.
+        * @return None.
+        */
+        void RunL();
+
+        /**
+        * Leave handler protocol implementation: it is called when 
+        * RunL leaves.
+        */
+        TInt RunError( TInt aError );
+
+    protected:  // from MHTTPTransactionCallback
+
+        /**
+        * Handle transaction event.
+        * @param aTransaction The transaction that the event has occurred on.
+        * @param aEvent The event that has occurred.
+        */
+        void MHFRunL( RHTTPTransaction aTransaction, 
+                      const THTTPEvent& aEvent );
+
+        /**
+        * Handle errors occured in MHFRunL().
+        * @param aError The leave code that RunL left with.
+        * @param aTransaction The transaction that was being processed.
+        * @param aEvent The Event that was being processed.
+        * @return KErrNone.
+        */
+        TInt MHFRunError( TInt aError, 
+                          RHTTPTransaction aTransaction, 
+                          const THTTPEvent& aEvent );
+
+    protected: // Data
+
+        TRequestStatus& iObserver;  ///< Observer's status.
+        HBufC8* iRequestedUrl;      ///< Request URI or NULL. Owned.
+
+        enum TState         ///< State.
+            {
+            EInit,          ///< Initial state.
+            EStartRequest,  ///< Create HTTP session & request
+            ECheckCache,    ///< Check if content is in cache
+            ERequest,       ///< HTTP request.
+            EDone
+            };
+
+        TState iState;              ///< Current state.
+        TInt iResult;               ///< Resulting error code.
+
+        RSocketServ iSockServ;      ///< Socket Server session handle.
+        RConnection iConn;          ///< Connection handle.
+
+        CHttpCacheManager* iCacheMgr;///< Cache Manager. Owned.
+
+        RHTTPSession iHttpSess;     ///< HTTP session. Owned.
+        RHTTPTransaction iHttpTrans;///< Transaction. Owned.
+
+        HBufC8* iSourceUri;         ///< Source URI. Owned.
+        HBufC8* iBody;              ///< Response body. Owned.
+        TDataType iDataType;        ///< Data type.
+        THttpCacheEntry iCacheEntry;///< Holds the cache entry
+        CPushMtmCacheSupply* iCacheSupply;
+        TBool iCachedResponse;
+    };
+
+#include "PushMtmFetchOperation.inl"
+
+#endif // PUSHMTMFETCHOPERATION_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/PushMtmFetchOperation.inl	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Inline method definitions of class CPushMtmFetchOperation.
+*
+*/
+
+
+
+#ifndef PUSHMTMFETCHOPERATION_INL
+#define PUSHMTMFETCHOPERATION_INL
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmFetchOperation::StringF
+// ---------------------------------------------------------
+//
+RStringF CPushMtmFetchOperation::StringF( HTTP::TStrings aId )
+    {
+    return iHttpSess.StringPool().StringF( aId, RHTTPSession::GetTable() );
+    }
+
+#endif /* def PUSHMTMFETCHOPERATION_INL */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/StringResourceReader.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Implementation of CStringResourceReader
+*
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "StringResourceReader.h"
+#include <f32file.h>
+#include <barsread.h>
+#include <bautils.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CStringResourceReader::CStringResourceReader
+// ---------------------------------------------------------
+//
+CStringResourceReader::CStringResourceReader
+    ( RFs& aFs, const TDesC& aRscFileWithPathAndDrive )
+:   CBase(), iFs( aFs ), iInitialized( EFalse )
+    {
+    iRscFileName.Copy( aRscFileWithPathAndDrive );
+    }
+
+// ---------------------------------------------------------
+// CStringResourceReader::~CStringResourceReader
+// ---------------------------------------------------------
+//
+CStringResourceReader::~CStringResourceReader()
+    {
+    iResourceFile.Close();
+    }
+
+// ---------------------------------------------------------
+// CStringResourceReader::AllocReadResourceL
+// ---------------------------------------------------------
+//
+HBufC* CStringResourceReader::AllocReadResourceL( TInt aResId )
+    {
+    InitializeL();
+    //
+    HBufC8* buf8 = iResourceFile.AllocReadLC( aResId );
+#ifdef _UNICODE
+    const TPtrC buf( (const TUint16*)buf8->Ptr(), buf8->Size()/2 );
+#else
+    const TPtrC buf( buf8->Ptr(), buf8->Size() );
+#endif
+    HBufC* retBuf = buf.AllocL();
+    CleanupStack::PopAndDestroy( buf8 );
+
+    return retBuf;
+    }
+
+// ---------------------------------------------------------
+// CStringResourceReader::AllocReadResourceLC
+// ---------------------------------------------------------
+//
+HBufC* CStringResourceReader::AllocReadResourceLC( TInt aResId )
+    {
+    HBufC* temp = AllocReadResourceL( aResId );
+    CleanupStack::PushL( temp );
+    return temp;
+    }
+
+// ---------------------------------------------------------
+// CStringResourceReader::InitializeL
+// ---------------------------------------------------------
+//
+void CStringResourceReader::InitializeL()
+    {
+    if ( !iInitialized )
+        {
+        TFileName resourceFileName( iRscFileName );
+        BaflUtils::NearestLanguageFile( iFs, resourceFileName );
+        iResourceFile.OpenL( iFs, resourceFileName );
+        iResourceFile.ConfirmSignatureL( iResourceFile.SignatureL() );
+        iInitialized = ETrue;
+        }
+    }
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/StringResourceReader.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*      Declaration of CStringResourceReader.
+*      
+*
+*/
+
+
+#ifndef STRINGRESOURCEREADER_H
+#define STRINGRESOURCEREADER_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <e32std.h>
+#include <barsc.h>
+
+// FORWARD DECLARATIONS
+
+class RFs;
+
+// CLASS DECLARATION
+
+/**
+* Utility class that helps reading string resources without CONE.
+* Not intended for derivation.
+*/
+class CStringResourceReader : public CBase
+    {
+    public: // Constructors and destructor
+
+        CStringResourceReader( RFs& aFs, const TDesC& aRscFileWithPathAndDrive );
+
+        ~CStringResourceReader();
+
+    public: // New functions
+
+        /**
+        * Return a given string from resource.
+        * @param aResId Resource ID.
+        * @return See above.
+        */
+        HBufC* AllocReadResourceL( TInt aResId );
+        HBufC* AllocReadResourceLC( TInt aResId );
+
+    private: // New functions
+
+        void InitializeL();
+
+    private: // Data members
+
+        RFs& iFs;                ///< File server session.
+        TBuf<64> iRscFileName;
+        RResourceFile iResourceFile;
+        TBool iInitialized;
+    };
+
+#endif // STRINGRESOURCEREADER_H
+
+// End of file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/si_dict.c	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * Dictionary = SI
+ * Public id = 5
+ * Doc Type = -//WAPFORUM//DTD SI 1.0//EN
+ */
+
+#include "si_dict.h"
+
+
+static const NW_Ucs2 NW_SI_ElementTag_si[] = {'s','i','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_indication[] = {'i','n','d','i','c','a','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_info[] = {'i','n','f','o','\0'};
+static const NW_Ucs2 NW_SI_ElementTag_item[] = {'i','t','e','m','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * tag entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SI_tag_token_0[4] = {
+	{0x05, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_si},
+	{0x06, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_indication},
+	{0x07, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_info},
+	{0x08, (NW_String_UCS2Buff_t *) NW_SI_ElementTag_item}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * tag entries - sorted by name
+ */
+static const
+NW_Byte NW_SI_tag_name_0[4] = {
+	1,
+	2,
+	3,
+	0,
+};
+
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_none[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','n','o','n','e','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_low[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','l','o','w','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_medium[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','m','e','d','i','u','m','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_signal_high[] = {'a','c','t','i','o','n','=','s','i','g','n','a','l','-','h','i','g','h','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action_delete[] = {'a','c','t','i','o','n','=','d','e','l','e','t','e','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_created[] = {'c','r','e','a','t','e','d','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href[] = {'h','r','e','f','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_si_expires[] = {'s','i','-','e','x','p','i','r','e','s','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_si_id[] = {'s','i','-','i','d','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_class[] = {'c','l','a','s','s','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
+static const NW_Ucs2 NW_SI_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * attribute entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SI_attribute_token_0[19] = {
+	{0x05, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_none},
+	{0x06, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_low},
+	{0x07, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_medium},
+	{0x08, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_signal_high},
+	{0x09, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action_delete},
+	{0x0a, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_created},
+	{0x0b, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href},
+	{0x0c, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___},
+	{0x0d, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_http___www_},
+	{0x0e, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___},
+	{0x0f, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_href_https___www_},
+	{0x10, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_expires},
+	{0x11, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_si_id},
+	{0x12, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_class},
+	{0x13, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag_action},
+	{0x85, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__com_},
+	{0x86, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__edu_},
+	{0x87, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__net_},
+	{0x88, (NW_String_UCS2Buff_t *) NW_SI_AttributeTag__org_}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+/*
+ * attribute entries - sorted by name
+ */
+static const
+NW_Byte NW_SI_attribute_name_0[19] = {
+	15,
+	16,
+	17,
+	18,
+	14,
+	4,
+	3,
+	1,
+	2,
+	0,
+	13,
+	5,
+	6,
+	7,
+	8,
+	9,
+	10,
+	11,
+	12,
+};
+
+/*
+ * Tag codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SI_tag_codepages[1] = {
+	{4, (NW_WBXML_DictEntry_t*)&NW_SI_tag_token_0[0], (NW_Byte *)&NW_SI_tag_name_0[0]},
+};
+
+/*
+ * Attribute codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SI_attribute_codepages[1] = {
+	{19, (NW_WBXML_DictEntry_t*)&NW_SI_attribute_token_0[0], (NW_Byte *)&NW_SI_attribute_name_0[0]},
+};
+
+static const NW_Ucs2 NW_SI_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','I',' ','1','.','0','/','/','E','N','\0'};
+
+/*
+ * Dictionary
+ */
+const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary = {
+	NW_SI_PublicId,
+	(NW_Ucs2 *)NW_SI_docType,
+	1, (NW_WBXML_Codepage_t*)&NW_SI_tag_codepages[0],
+	1, (NW_WBXML_Codepage_t*)&NW_SI_attribute_codepages[0],
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/si_dict.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+#ifndef HEADER_GUARD_si_dict_h
+#define HEADER_GUARD_si_dict_h
+
+
+#include <nw_wbxml_dictionary.h>
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define NW_SI_PublicId 5
+
+typedef enum NW_SI_ElementToken_0_e{
+	NW_SI_ElementToken_si = 0x0005,
+	NW_SI_ElementToken_indication = 0x0006,
+	NW_SI_ElementToken_info = 0x0007,
+	NW_SI_ElementToken_item = 0x0008
+}NW_SI_ElementToken_0_t;
+
+
+typedef enum NW_SI_AttributeToken_0_e{
+	NW_SI_AttributeToken_action_signal_none = 0x0005,
+	NW_SI_AttributeToken_action_signal_low = 0x0006,
+	NW_SI_AttributeToken_action_signal_medium = 0x0007,
+	NW_SI_AttributeToken_action_signal_high = 0x0008,
+	NW_SI_AttributeToken_action_delete = 0x0009,
+	NW_SI_AttributeToken_created = 0x000a,
+	NW_SI_AttributeToken_href = 0x000b,
+	NW_SI_AttributeToken_href_http___ = 0x000c,
+	NW_SI_AttributeToken_href_http___www_ = 0x000d,
+	NW_SI_AttributeToken_href_https___ = 0x000e,
+	NW_SI_AttributeToken_href_https___www_ = 0x000f,
+	NW_SI_AttributeToken_si_expires = 0x0010,
+	NW_SI_AttributeToken_si_id = 0x0011,
+	NW_SI_AttributeToken_class = 0x0012,
+	NW_SI_AttributeToken_action = 0x0013,
+	NW_SI_AttributeToken__com_ = 0x0085,
+	NW_SI_AttributeToken__edu_ = 0x0086,
+	NW_SI_AttributeToken__net_ = 0x0087,
+	NW_SI_AttributeToken__org_ = 0x0088
+}NW_SI_AttributeToken_0_t;
+
+extern const NW_WBXML_Dictionary_t NW_SI_WBXMLDictionary;
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Fri Sep 26 19:53:43 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator si.dict si_dict.c si_dict.h
+*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/sl_dict.c	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,198 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * Dictionary = SL
+ * Public id = 6
+ * Doc Type = -//WAPFORUM//DTD SL 1.0//EN
+ */
+
+#include "sl_dict.h"
+
+
+static const NW_Ucs2 NW_SL_ElementTag_sl[] = {'s','l','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * tag entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SL_tag_token_0[1] = {
+	{0x05, (NW_String_UCS2Buff_t *) NW_SL_ElementTag_sl}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * tag entries - sorted by name
+ */
+static const
+NW_Byte NW_SL_tag_name_0[1] = {
+	0,
+};
+
+static const NW_Ucs2 NW_SL_AttributeTag_action_execute_low[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','l','o','w','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action_execute_high[] = {'a','c','t','i','o','n','=','e','x','e','c','u','t','e','-','h','i','g','h','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action_cache[] = {'a','c','t','i','o','n','=','c','a','c','h','e','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href[] = {'h','r','e','f','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_http___[] = {'h','r','e','f','=','h','t','t','p',':','/','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_http___www_[] = {'h','r','e','f','=','h','t','t','p',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_https___[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_href_https___www_[] = {'h','r','e','f','=','h','t','t','p','s',':','/','/','w','w','w','.','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag_action[] = {'a','c','t','i','o','n','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__com_[] = {'.','c','o','m','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__edu_[] = {'.','e','d','u','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__net_[] = {'.','n','e','t','/','\0'};
+static const NW_Ucs2 NW_SL_AttributeTag__org_[] = {'.','o','r','g','/','\0'};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * attribute entries - sorted by token
+ */
+static const
+NW_WBXML_DictEntry_t NW_SL_attribute_token_0[13] = {
+	{0x05, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_low},
+	{0x06, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_execute_high},
+	{0x07, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action_cache},
+	{0x08, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href},
+	{0x09, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___},
+	{0x0a, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_http___www_},
+	{0x0b, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___},
+	{0x0c, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_href_https___www_},
+	{0x0d, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag_action},
+	{0x85, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__com_},
+	{0x86, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__edu_},
+	{0x87, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__net_},
+	{0x88, (NW_String_UCS2Buff_t *) NW_SL_AttributeTag__org_}
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+/*
+ * attribute entries - sorted by name
+ */
+static const
+NW_Byte NW_SL_attribute_name_0[13] = {
+	9,
+	10,
+	11,
+	12,
+	8,
+	2,
+	1,
+	0,
+	3,
+	4,
+	5,
+	6,
+	7,
+};
+
+/*
+ * Tag codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SL_tag_codepages[1] = {
+	{1, (NW_WBXML_DictEntry_t*)&NW_SL_tag_token_0[0], (NW_Byte *)&NW_SL_tag_name_0[0]},
+};
+
+/*
+ * Attribute codepage table
+ */
+static const
+NW_WBXML_Codepage_t NW_SL_attribute_codepages[1] = {
+	{13, (NW_WBXML_DictEntry_t*)&NW_SL_attribute_token_0[0], (NW_Byte *)&NW_SL_attribute_name_0[0]},
+};
+
+static const NW_Ucs2 NW_SL_docType[] = {'-','/','/','W','A','P','F','O','R','U','M','/','/','D','T','D',' ','S','L',' ','1','.','0','/','/','E','N','\0'};
+
+/*
+ * Dictionary
+ */
+const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary = {
+	NW_SL_PublicId,
+	(NW_Ucs2 *)NW_SL_docType,
+	1, (NW_WBXML_Codepage_t*)&NW_SL_tag_codepages[0],
+	1, (NW_WBXML_Codepage_t*)&NW_SL_attribute_codepages[0],
+};
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/sl_dict.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+#ifndef HEADER_GUARD_sl_dict_h
+#define HEADER_GUARD_sl_dict_h
+
+#include <nw_wbxml_dictionary.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define NW_SL_PublicId 6
+
+typedef enum NW_SL_ElementToken_0_e{
+	NW_SL_ElementToken_sl = 0x0005
+}NW_SL_ElementToken_0_t;
+
+
+typedef enum NW_SL_AttributeToken_0_e{
+	NW_SL_AttributeToken_action_execute_low = 0x0005,
+	NW_SL_AttributeToken_action_execute_high = 0x0006,
+	NW_SL_AttributeToken_action_cache = 0x0007,
+	NW_SL_AttributeToken_href = 0x0008,
+	NW_SL_AttributeToken_href_http___ = 0x0009,
+	NW_SL_AttributeToken_href_http___www_ = 0x000a,
+	NW_SL_AttributeToken_href_https___ = 0x000b,
+	NW_SL_AttributeToken_href_https___www_ = 0x000c,
+	NW_SL_AttributeToken_action = 0x000d,
+	NW_SL_AttributeToken__com_ = 0x0085,
+	NW_SL_AttributeToken__edu_ = 0x0086,
+	NW_SL_AttributeToken__net_ = 0x0087,
+	NW_SL_AttributeToken__org_ = 0x0088
+}NW_SL_AttributeToken_0_t;
+
+extern const NW_WBXML_Dictionary_t NW_SL_WBXMLDictionary;
+
+/*
+** WARNING
+**
+** DO NOT EDIT - THIS CODE IS AUTOMATICALLY GENERATED
+**               FROM A DATA FILE BY THE DICTIONARY CREATION PROGRAM
+**
+** This file generated on Tue Sep 30 14:30:25 2003
+**                        (coordinated universal time)
+**
+** Command line: dict_creator sl.dict sl_dict.c sl_dict.h
+*/
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapter.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,221 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Handles white list settings in provisioning.
+*
+*/
+
+
+#ifndef WHITELISTADAPTER_H
+#define WHITELISTADAPTER_H
+
+// INCLUDE FILES
+	// User includes
+#include "WhiteListAdapterDef.h"
+	// System includes
+#include <CWPAdapter.h>
+#include <msvapi.h>
+#include <MWPContextExtension.h>
+
+// FORWARD DECLARATIONS
+
+class CPushMtmSettings;
+class CWPCharacteristic;
+class CWPParameter;
+class MWPPairVisitor;
+class TWhiteListAdapterItem;
+
+// CLASS DECLARATION
+
+/**
+* An ECOM adapter plug-in. It is responsible for maintaining data in a
+* WAP Provisioning pushed message : we get appropriate physical proxy
+* addresses from the message and store them in Push MTM settings. It is the
+* Push Content Handler that will use these addresses to filter out
+* unauthorized pushed SL messages.
+* Note : although an adapter should always be prepared for displaying the
+* processed and stored settings in the appropriate format, the stored items
+* in this specific adapter will _never_ be displayed. Thus, ItemCount,
+* SummaryTitle and SummaryText methods have been written considering this
+* approach.
+*/
+class CWhiteListAdapter : public CWPAdapter, 
+                          public MMsvSessionObserver, 
+                          public MWPContextExtension
+	{
+	public :	// construction, destruction
+		/**
+		* Two-phased constructor.
+		*/
+		static CWhiteListAdapter* NewL();
+
+		/**
+		* Destructor.
+		*/
+		~CWhiteListAdapter();
+
+	public :	// from CWPAdapter
+
+        /**
+		* Check the number of settings items.
+		* @see CWPAdapter
+		*/
+		/*virtual*/ TInt ItemCount() const;
+
+		/**
+		* Returns the title of the nth summary line. 
+		* @see CWPAdapter
+		*/
+		/*virtual*/ const TDesC16& SummaryTitle( TInt aIndex ) const;
+		
+		/**
+		* Returns the text of the nth summary line. 
+		* @see CWPAdapter
+		*/
+		/*virtual*/ const TDesC16& SummaryText( TInt aIndex ) const;
+		
+		/**
+		* Saves one setting handled by the adapter.
+		* @see CWPAdapter
+		*/
+		/*virtual*/ void SaveL( TInt aItem );
+
+		/**
+		* Returns ETrue if the adapter can set the settings as default.
+		* @see CWPAdapter
+		*/
+		/*virtual*/ TBool CanSetAsDefault( TInt aItem ) const;
+
+		/**
+		* Adapter sets the settings as default.
+		* @see CWPAdapter
+		*/
+		/*virtual*/ void SetAsDefaultL( TInt aItem );
+
+		/**
+		* Calls the pair visitor for each detail line of an item.
+		* @see CWPAdapter
+		*/
+		/*virtual*/ TInt DetailsL( TInt aItem, MWPPairVisitor& aVisitor );
+
+        /**
+        * Returns a pointer to a context extension.
+        * @param aExtension 
+        *        Contains a pointer to MWPContextExtension if supported.
+        * @return KErrNotSupported if not supported, KErrNone otherwise
+        */
+        /*virtual*/ TInt ContextExtension( MWPContextExtension*& aExtension );
+
+    public: // From MWPVisitor (inheritance is through CWPAdapter)
+
+        /**
+		* Called for each characteristic found.
+		* @see MWPVisitor
+		*/
+		/*virtual*/ void VisitL( CWPCharacteristic& aCharacteristic );
+		
+		/**
+		* Called for each parameter found.
+		* @see MWPVisitor
+		*/
+		/*virtual*/ void VisitL( CWPParameter& aParameter );
+
+		/**
+		* Called for each link to a logical proxy or access point.
+		* @see MWPVisitor
+		*/
+		/*virtual*/ void VisitLinkL( CWPCharacteristic& aCharacteristic );
+
+	public :	// from MMsvSessionObserver
+		/**
+		* Indicates an event has occurred.
+		* @see MMsvSessionObserver
+		*/
+		/*virtual*/ void HandleSessionEventL( TMsvSessionEvent aEvent,
+											TAny* aArg1,
+											TAny* aArg2,
+											TAny* aArg3 );
+
+	private :	// construction
+		/**
+		* Constructor.
+		*/
+		CWhiteListAdapter();
+
+		/**
+		* Second-phase constructor.
+		*/
+		void ConstructL();
+
+	private :	// internal new methods
+		/**
+		* This method is for interpreting a string as push support.
+		* If the value of the string is '1', then push is enabled,
+		* if it's equal to '0', then push is disabled, otherwise the proxy
+		* does not care of push.
+		* @param aPushSupport String to be processed.
+		* @return TPushSupport enumeration value.
+		*/
+		TPushSupport ResolvePushSupport( const TDesC& aPushSupport );
+
+    private: // From MWPContextExtension
+
+        /**
+        * Returns the data used for saving.
+        * @param aIndex The index of the data
+        * @return The data. Ownership is transferred.
+        */
+        const TDesC8& SaveDataL( TInt aIndex ) const;
+
+        /**
+        * Deletes a saved item.
+        * @param aSaveData The data used for saving
+        */
+        void DeleteL( const TDesC8& aSaveData );
+
+        /**
+        * Returns the UID of the adapter.
+        * @return UID
+        */
+        TUint32 Uid() const;
+
+	private :	// data members
+
+        RPointerArray<TWhiteListAdapterItem> iItems;	///< Physical proxies
+
+        /**
+        * These items are parts of the current logical proxy and have not
+        * been added to the final item array (i.e. iItems array), because
+        * further processing is needed.
+        */
+        RPointerArray<TWhiteListAdapterItem> iItemsToBeAdded;
+
+		TPushSupport iLogicalProxyPushSupport;
+
+		TBool iPhysicalProxyIsVisited;			///< In order to differentiate
+												///< if we are visiting a
+												///< ph. or a log. proxy
+
+		TWhiteListAdapterItem* iCurrentItem;	///< Current physical proxy.
+												///< Has.
+
+		CMsvSession* iMsvSession;				///< Session to the Message
+												///< Server. Has.
+		CPushMtmSettings* iPushMtmSettings;		///< Push MTM Settings object.
+												///< Has.
+	};
+
+#endif	// WHITELISTADAPTER_H
+
+// End of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterDef.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Common constants for the White List Adapter plug-in.
+*
+*/
+
+
+
+#ifndef WHITELISTADAPTERDEF_H
+#define WHITELISTADAPTERDEF_H
+
+// DATA TYPES
+
+enum TPushSupport
+	{
+	EPushEnabled,	///< Explicitly set to enabled
+	EPushDisabled,	///< Explicitly set to disabled
+	EPushDontCare	///< Has not been set
+	};
+
+#endif	// WHITELISTADAPTERDEF_H
+
+// End of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterItem.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,136 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Class the represents a physical proxy (in context of WAP Provisioning).
+*
+*/
+
+
+#ifndef WHITELISTADAPTERITEM_H
+#define WHITELISTADAPTERITEM_H
+
+// INCLUDE FILES
+
+	// User includes
+#include "PushInitiator.h"
+#include "WhiteListAdapterDef.h"
+	// System includes
+#include <e32std.h>
+
+// CLASS DECLARATION
+
+/**
+* This class encapsulates a proxy item found in a WAP Provisioning document.
+* It is designed for describing a particular White List address.
+*/
+class TWhiteListAdapterItem
+	{
+	public :	// construction, destruction
+		/**
+		* Default constructor.
+		*/
+		TWhiteListAdapterItem();
+
+	public :	// getter/setter methods
+		/**
+		* Use this method to get the address.
+		* @return The stored proxy address.
+		*/
+		const TDesC& Address() const;
+
+		/**
+		* Use this method to get the address type.
+		* @return The type of the stored proxy address.
+		*/
+		CPushInitiator::TAddrType AddressType() const;
+
+        /**
+        * Tells the ID of the item.
+        * @return Item ID.
+        */
+        TUint32 Id() const;
+
+        /**
+        * Tells the ID of the item in a buffer.
+        * @return Item ID in a buffer.
+        */
+        const TDesC8& IdBuf() const;
+
+        /**
+        * Tells the push support.
+        * @return Push support.
+        */
+        TPushSupport PushSupport() const;
+
+		/**
+		* Sets the address.
+		* @param aAddress The proxy address to be set.
+		*/
+		void SetAddress( const TDesC& aAddress );
+
+		/**
+		* Sets the address type.
+		* @param aAddressType The proxy address type to be set.
+		*/
+		void SetAddressType( const TDesC& aAddressType );
+
+		/**
+		* Sets the ID of the item.
+		* @param aID The ID.
+		*/
+        void SetId( TUint32 aId );
+
+        /**
+		* Sets the physical proxy ID.
+		* @param aProxyId The physical proxy identifier to be set.
+		*/
+		void SetProxyId( const TDesC& aProxyId );
+
+		/**
+		* Sets whether or not the proxy address is push enabled.
+		* @param aPushEnabled If the value is 1, then push is enabled,
+		* otherwise (i.e. when the value is 0) the push is disabled.
+		*/
+		void SetPushSupport( TPushSupport aPushSupport );
+
+	public :	// other public methods
+
+        /**
+		* Tells whether the freshly initialized adapter item contains
+		* information about a valid proxy address. The proxy address is
+		* invalid if either it is not type of the correct address type
+		* or the proxy server is not push enabled.
+		* @return ETrue if the proxy address is valid, EFalse otherwise.
+		*/
+		TBool Valid() const;
+
+	private :	// data members
+
+        TPtrC iAddress;				///< Physical proxy gateway address
+
+		CPushInitiator::TAddrType iAddressType;
+
+        /// ID of the item after it has been added to MTM Settings.
+        TUint32 iId;
+        /// ID of the item packaged into a buffer pointer.
+        TPckgC<TUint32> iIdBufPtr;
+
+		TPtrC iProxyId;				///< Proxy identifier (or name)
+
+		TPushSupport iPushSupport;
+	};
+
+#endif	// WHITELISTADAPTERITEM_H
+
+// End of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterLogger.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*      Logging macros for White List Adapter.
+*      
+*
+*/
+
+
+#ifndef WHITELISTADAPTER_LOGGER_H
+#define WHITELISTADAPTER_LOGGER_H
+
+// INCLUDES
+
+#include <e32std.h>
+#include <e32def.h>
+#include <flogger.h>
+
+// TYPES
+
+enum TWhiteListAdapterLogMask       ///< Log mask bits.
+    {
+    ELogOff         = 0x00000000,   ///< Don't log.
+    ELogBasic       = 0x00000001,   ///< Log only basic activities.
+    ELogDetailed    = 0x00000002,   ///< Detailed activities use this mask.
+    ELogAll         = 0xFFFFFFFF    ///< Log all.
+    };
+
+// MACROS
+
+// Determines what to log. Construct this from TWhiteListAdapterLogMask values.
+#define WHITELISTADAPTER_LOG_MASK ELogAll
+/// Determines log detail (0==basic level).
+#define WHITELISTADAPTER_LOG_LEVEL 5
+
+// CLASS DECLARATION
+
+/**
+* Logger class.
+*/
+class WhiteListAdapterLogger
+    {
+    public:     // new methods
+
+    /**
+    * Write formatted log.
+    * @param aMask Log mask.
+    * @param aLevel Log level.
+    * @param aFmt Format string.
+    */
+    static void Write
+        ( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... );
+
+    /**
+    * Write formatted log.
+    * @param aMask Log mask.
+    * @param aLevel Log level.
+    * @param aFmt Format string.
+    * @param aList Variable argument list.
+    */
+    static void Write
+        (
+        TInt32 aMask,
+        TInt aLevel,
+        TRefByValue<const TDesC16> aFmt,
+        VA_LIST& aList
+        );
+
+    /**
+    * Write formatted log.
+    * @param aMask Log mask.
+    * @param aLevel Log level.
+    * @param aFmt Format string.
+    */
+    static void Write
+        ( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... );
+
+    /**
+    * Write formatted log.
+    * @param aMask Log mask.
+    * @param aLevel Log level.
+    * @param aFmt Format string.
+    * @param aList Variable argument list.
+    */
+    static void Write
+        (
+        TInt32 aMask,
+        TInt aLevel,
+        TRefByValue<const TDesC8> aFmt,
+        VA_LIST& aList
+        );
+
+    /**
+    * Write hex dump.
+    * @param aMask Log mask.
+    * @param aLevel Log level.
+    * @param aHeader Header string.
+    * @param aMargin Margin.
+    * @param aPtr Data.
+    * @param aLen Data length.
+    */
+    static void HexDump
+        (
+        TInt32 aMask,
+        TInt aLevel, 
+        const TText* aHeader,
+        const TText* aMargin,
+        const TUint8* aPtr,
+        TInt aLen
+        );
+    };
+
+#ifdef __TEST_WHITELISTADAPTER_LOG__
+
+    /// Write formatted to log.
+    #define CLOG( body ) WhiteListAdapterLogger::Write body
+    /// Write hex dump.
+    #define CDUMP( body ) WhiteListAdapterLogger::HexDump body
+    /// Guard "log-only" argument name with this (expands to argument).
+    #define LOG_ONLY( argName ) argName
+
+#else /* not defined __TEST_WHITELISTADAPTER_LOG__ */
+
+    /// Do nothing (log disabled).
+    #define CLOG( body )
+    /// Do nothing (log disabled).
+    #define CDUMP( body )
+    /// Guard "log-only" argument name with this (expands to nothing).
+    #define LOG_ONLY( argName )
+
+
+#endif /* def __TEST_WHITELISTADAPTER_LOG__ */
+
+#endif /* def WHITELISTADAPTER_LOGGER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterPanic.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Panic handling for white list management.
+*
+*/
+
+
+#ifndef WHITELISTADAPTERPANIC_H
+#define WHITELISTADAPTERPANIC_H
+
+// INCLUDE FILES
+	// System includes
+#include <e32def.h>
+
+// DATA TYPES
+
+enum TWhiteListAdapterPanics
+	{
+	ENoItemsToBeDisplayed,	///< A UI control tries to display items
+	EArrayIndexOutOfBounds,	///< Self-explanatory
+	ENullProxy				///< Physicial proxy cannot be found
+	};
+
+// FUNCTION PROTOTYPES
+
+/**
+* Panic handling in White List Adapter module. It's role is centralizing
+* panics.
+* @param aPanic Panic code, defined in THermesProtocolPanic.
+*/
+void Panic( TInt aPanic );
+
+
+#endif	// WHITELISTADAPTERPANIC_H
+
+// End of file
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterInc/WhiteListAdapterUids.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  UID definitions for the White List Adapter plug-in.
+*
+*/
+
+
+
+#ifndef WHITELISTADAPTERUIDS_H
+#define WHITELISTADAPTERUIDS_H
+
+// ================= UIDs ======================
+
+/// DLL UID
+#define KWhiteListAdapterDllUid 0x10008D3E
+
+// ECOM DLL implementation UID - White List Adapter
+#define KWhiteListAdapterImplementationUid 0x101F85EF
+
+// ECOM DLL interface UID
+#define KProvisioningAdapterInterfaceUid 0x101F84D5
+
+#endif	// WHITELISTADAPTERUIDS_H
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapter.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,522 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Handles white list settings in provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+
+	// User includes
+#include "PushInitiator.h"
+#include "PushInitiatorList.h"
+#include "PushMtmSettings.h"
+#include "WhiteListAdapter.h"
+#include "WhiteListAdapterDef.h"
+#include "WhiteListAdapterItem.h"
+#include "WhiteListAdapterLogger.h"
+#include "WhiteListAdapterPanic.h"
+#include "WhiteListAdapterUids.h"
+	// System includes
+#include <CWPCharacteristic.h>
+#include <CWPParameter.h>
+
+// CONSTANTS
+
+// 'Push enabled' flag settings
+const TInt KPushEnabledFlagLength = 1;
+const TUint16 KPushEnabledFlagTrue = '1';
+const TUint16 KPushEnabledFlagFalse = '0';
+
+// Granularity value for dynamic arrays
+const TInt KDynamicArrayGranularity = 3;
+
+// ================= MEMBER FUNCTIONS ======================
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::CWhiteListAdapter
+// ---------------------------------------------------------
+//
+CWhiteListAdapter::CWhiteListAdapter() : CWPAdapter(),
+iItems( KDynamicArrayGranularity ),
+iItemsToBeAdded( KDynamicArrayGranularity ),
+iLogicalProxyPushSupport( EPushDontCare ), iPhysicalProxyIsVisited( EFalse )
+	{
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "WhiteListAdapter c'tor" ) ) );
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ConstructL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::ConstructL()
+	{
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "-> WhiteListAdapter::ConstructL" ) ) );
+
+    iMsvSession = CMsvSession::OpenSyncL( *this );
+	iPushMtmSettings = CPushMtmSettings::NewL();
+
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "<- WhiteListAdapter::ConstructL" ) ) );
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::NewL
+// ---------------------------------------------------------
+//
+CWhiteListAdapter* CWhiteListAdapter::NewL()
+	{
+	CWhiteListAdapter* self = new (ELeave) CWhiteListAdapter;
+
+	CleanupStack::PushL( self );
+
+	self->ConstructL();
+
+	CleanupStack::Pop();	// self
+
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::~CWhiteListAdapter
+// ---------------------------------------------------------
+//
+CWhiteListAdapter::~CWhiteListAdapter()
+	{
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "-> WhiteListAdapter d'tor" ) ) );
+
+	delete iCurrentItem;
+
+	delete iPushMtmSettings; // It has to be deleted before iMsvSession, 
+    // because it uses iMsvSession->FileSession().
+	delete iMsvSession;
+
+    CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "WhiteListAdapter d'tor, iItemsToBeAdded.Count:%d" ),
+        iItemsToBeAdded.Count() ) );
+    iItemsToBeAdded.ResetAndDestroy();
+    iItemsToBeAdded.Close();
+
+    CLOG( ( ELogDetailed, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "WhiteListAdapter d'tor, iItems.Count:%d" ), iItems.Count() ) );
+	iItems.ResetAndDestroy();
+	iItems.Close();
+
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "<- WhiteListAdapter d'tor" ) ) );
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ItemCount
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::ItemCount() const
+	{
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "WhiteListAdapter::ItemCount %d" ), iItems.Count() ) );
+
+	return iItems.Count();
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SummaryTitle
+// ---------------------------------------------------------
+//
+const TDesC16& CWhiteListAdapter::SummaryTitle( TInt /*aIndex*/ ) const
+	{
+    // As WL text will never be shown, we simply return an empty string here.
+	return KNullDesC16();
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SummaryText
+// ---------------------------------------------------------
+//
+const TDesC16& CWhiteListAdapter::SummaryText( TInt /*aIndex*/ ) const
+	{
+    // As WL text will never be shown, we simply return an empty string here.
+	return KNullDesC16();
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SaveL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::SaveL( TInt aItem )
+	{
+	__ASSERT_DEBUG( 0 <= aItem && aItem < iItems.Count(),
+				Panic( EArrayIndexOutOfBounds ) );
+
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "-> WhiteListAdapter::SaveL %d" ), aItem ) );
+
+	CPushInitiator* pi = new (ELeave) CPushInitiator;
+	CleanupStack::PushL( pi );
+	pi->SetAddressL( iItems[aItem]->Address(),
+					 iItems[aItem]->AddressType() );
+
+	TUint32 entryId = iPushMtmSettings->PushInitiatorList().AddL( pi );
+	CleanupStack::Pop( pi );	// pi, ownership taken over
+    // Save the ID of the added entry:
+    iItems[aItem]->SetId( entryId );
+
+	iPushMtmSettings->SaveL();
+
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "<- WhiteListAdapter::SaveL" ) ) );
+    }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::CanSetAsDefault
+// ---------------------------------------------------------
+//
+TBool CWhiteListAdapter::CanSetAsDefault( TInt /*aItem*/ ) const
+	{
+	return EFalse;
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SetAsDefaultL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::SetAsDefaultL( TInt /*aItem*/ )
+	{
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::DetailsL
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::DetailsL( TInt /*aItem*/,
+                                  MWPPairVisitor& /*aVisitor*/ )
+	{
+	return KErrNotSupported;
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ContextExtension
+// ---------------------------------------------------------
+//
+TInt CWhiteListAdapter::ContextExtension( MWPContextExtension*& aExtension )
+    {
+    aExtension = this;
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitL( CWPCharacteristic& aCharacteristic )
+	{
+	if ( aCharacteristic.Type() == KWPPxLogical )
+		{
+        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+            _L( "-> WhiteListAdapter::VisitL PXLOGICAL" ) ) );
+
+		aCharacteristic.AcceptL( *this );
+
+        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+            _L( "WhiteListAdapter::VisitL PXLOGICAL visited, push support is %d" ),
+            iLogicalProxyPushSupport ) );
+
+        // iItemsToBeAdded contains physical proxies whose push support
+        // is either PushEnabled or PushDontCare (i.e. PushDisabled proxies
+        // are not present in this array).
+        if ( iLogicalProxyPushSupport == EPushEnabled )
+            {
+            // Knowing that the logical proxy's push support is PushEnabled,
+            // we have to add each element of the above-mentioned array.
+            for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
+                {
+                // If addition fails, then we delete the item. Otherwise,
+                // the ownership has been taken over by iItems array.
+                if ( iItems.Append( iItemsToBeAdded[i] ) != KErrNone )
+                    {
+                    delete iItemsToBeAdded[i];
+                    }
+                }
+            }
+        else
+            {
+            // We're here : logical proxy's push support is either PushDontCare
+            // or PushDisabled. In this case we have to add only those elements
+            // in the array whose push support is PushEnabled. This is because
+            // physical proxy's push support definition is stronger than the
+            // logical proxy's definition.
+            for ( TInt i = 0; i < iItemsToBeAdded.Count(); i++ )
+                {
+                TWhiteListAdapterItem* item = iItemsToBeAdded[i];
+                if ( item->PushSupport() == EPushEnabled )
+                    {
+                    // If addition fails, then we delete the item. Otherwise,
+                    // the ownership has been taken over by iItems array.
+                    if ( iItems.Append( item ) != KErrNone )
+                        {
+                        delete item;
+                        }
+                    }
+                else
+                    {
+                    delete item;
+                    }
+                }
+            }
+
+        // There is only one thing we need to do here : reset the array.
+        // At this point, each element in the array is invalid : if the
+        // element happened to be valid, then the other array (iItems)
+        // took over the ownership. Otherwise (i.e. the element was
+        // invalid), the element got deleted manually.
+        // Thus, we can safely reset the array.
+        iItemsToBeAdded.Reset();
+
+		iLogicalProxyPushSupport = EPushDontCare;
+
+        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+            _L( "<- WhiteListAdapter::VisitL PXLOGICAL" ) ) );
+		}
+	else if ( aCharacteristic.Type() == KWPPxPhysical )
+		{
+		// This deletion is for safety's sake : if one of the leaving methods
+		// in this section (below) has left, then it may happen that this
+		// method is called again and iCurrentItem is not NULL. If it is the
+		// case, we can avoid having an orphaned memory area by deleting the
+		// current item before allocating a new one.
+		// However, in most cases iCurrentItem will be NULL.
+        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+            _L( "-> WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
+
+        delete iCurrentItem;
+		iCurrentItem = NULL;
+		iCurrentItem = new (ELeave) TWhiteListAdapterItem();
+
+		iPhysicalProxyIsVisited = ETrue;
+
+		aCharacteristic.AcceptL( *this );
+
+		iPhysicalProxyIsVisited = EFalse;
+
+		if ( iCurrentItem->Valid() )
+			{
+			User::LeaveIfError( iItemsToBeAdded.Append( iCurrentItem ) );
+            iCurrentItem = NULL; // Ownership transferred.
+			
+            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+              _L( "WhiteListAdapter::VisitL PXPHYSICAL valid & added" ) ) );
+			}
+		else
+			{
+            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+                _L( "WhiteListAdapter::VisitL PXPHYSICAL invalid" ) ) );
+			// invalid physical proxy (at least from our point of view)
+			delete iCurrentItem;
+            iCurrentItem = NULL;
+			}
+
+        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+            _L( "<- WhiteListAdapter::VisitL PXPHYSICAL" ) ) );
+		}
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitL( CWPParameter& aParameter )
+	{
+	switch ( aParameter.ID() )
+		{
+		case EWPParameterPhysicalProxyID :
+			{
+			__ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+                _L( "WhiteListAdapter::VisitL PhysicalProxyID" ) ) );
+
+			if ( iCurrentItem )
+				{
+				iCurrentItem->SetProxyId( aParameter.Value() );
+				}
+
+			break;
+			}
+		case EWPParameterPxAddr :
+			{
+			__ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+                _L( "WhiteListAdapter::VisitL PxAddr" ) ) );
+
+            if ( iCurrentItem )
+				{
+				iCurrentItem->SetAddress( aParameter.Value() );
+				}
+
+			break;
+			}
+		case EWPParameterPxAddrType :
+			{
+			__ASSERT_DEBUG( iCurrentItem, Panic( ENullProxy ) );
+
+            CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+                _L( "WhiteListAdapter::VisitL PxAddrType" ) ) );
+
+			if ( iCurrentItem )
+				{
+				iCurrentItem->SetAddressType( aParameter.Value() );
+				}
+
+			break;
+			}
+		case EWPParameterPushEnabled :
+			{
+			if ( iCurrentItem )
+				{
+                CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+                    _L( "WhiteListAdapter::VisitL Physical PushEnabled" ) ) );
+
+                // it is a physical proxy
+				iCurrentItem->SetPushSupport
+								( ResolvePushSupport( aParameter.Value() ) );
+				}
+			else
+				{
+                CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+                    _L( "WhiteListAdapter::VisitL Logical PushEnabled" ) ) );
+
+				// it is a logical proxy
+				iLogicalProxyPushSupport =
+									ResolvePushSupport( aParameter.Value() );
+				}
+
+			break;
+			}
+		default :
+			break;
+		}
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::VisitLinkL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::VisitLinkL( CWPCharacteristic& /*aCharacteristic*/ )
+	{
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::HandleSessionEventL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::HandleSessionEventL( TMsvSessionEvent /*aEvent*/,
+											TAny* /*aArg1*/,
+											TAny* /*aArg2*/,
+											TAny* /*aArg3*/ )
+	{
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::ResolvePushSupport
+// ---------------------------------------------------------
+//
+TPushSupport CWhiteListAdapter::ResolvePushSupport( const TDesC& aPushSupport )
+	{
+	TPushSupport support = EPushDontCare;
+
+	if ( aPushSupport.Length() == KPushEnabledFlagLength )
+		{
+		if ( aPushSupport[0] == KPushEnabledFlagTrue )
+			{
+			support = EPushEnabled;
+			}
+		else if ( aPushSupport[0] == KPushEnabledFlagFalse )
+			{
+			support = EPushDisabled;
+			}
+		}
+
+	return support;
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::SaveDataL
+// ---------------------------------------------------------
+//
+const TDesC8& CWhiteListAdapter::SaveDataL( TInt aIndex ) const
+	{
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "WhiteListAdapter::SaveDataL %d %d %d" ), 
+        iItems.Count(), aIndex, iItems[aIndex]->Id() ) );
+    return ( iItems[aIndex]->IdBuf() );
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::DeleteL
+// ---------------------------------------------------------
+//
+void CWhiteListAdapter::DeleteL( const TDesC8& aSaveData )
+	{
+    // Copy source into a package buffer:
+    TPckgBuf<TUint32> entryIdBuf;
+    entryIdBuf.Copy( aSaveData );
+    // Extract the entry ID:
+    TUint32 entryId( entryIdBuf() );
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "WhiteListAdapter::DeleteL ID %d" ), entryId ) );
+
+    // Now entryId holds the ID - we can remove it from WL:
+    CPushInitiatorList& whiteList = iPushMtmSettings->PushInitiatorList();
+    // Find the index of the Initiator with the given ID.
+    TInt index( KErrNotFound );
+    // As the entries are unique in WL by the ID, it's enough 
+    // to continue the loop until first hit.
+    const TInt count( whiteList.Count() );
+    for ( TInt i = 0; i < count; ++i )
+        {
+        const CPushInitiator& initiator = whiteList.At(i);
+        if ( initiator.EntryID() == entryId )
+            {
+            index = i;
+            // Found:
+            break;
+            }
+        }
+
+    CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+        _L( "WhiteListAdapter::DeleteL index %d" ), index ) );
+    if ( index != KErrNotFound )
+        {
+        whiteList.Delete( index );
+        // Commit changes.
+        iPushMtmSettings->SaveL();
+        CLOG( ( ELogBasic, WHITELISTADAPTER_LOG_LEVEL,
+            _L( "WhiteListAdapter::DeleteL Saved..." ) ) );
+        }
+	}
+
+// ---------------------------------------------------------
+// CWhiteListAdapter::Uid
+// ---------------------------------------------------------
+//
+TUint32 CWhiteListAdapter::Uid() const
+	{
+    return (TUint32)KWhiteListAdapterImplementationUid;
+	}
+
+// End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterGroupProxy.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Table of plugins for ECom
+*
+*/
+
+
+
+// INCLUDE FILES
+	// System includes
+#include <e32std.h>
+#include <ecom/implementationproxy.h>
+
+	// User includes
+#include "WhiteListAdapter.h"
+#include "WhiteListAdapterUids.h"
+
+// CONSTANTS
+
+const TImplementationProxy KImplementationTable[] = 
+	{
+	IMPLEMENTATION_PROXY_ENTRY( KWhiteListAdapterImplementationUid, CWhiteListAdapter::NewL )
+	};
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// ImplementationGroupProxy
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+	{
+	aTableCount = sizeof(KImplementationTable) / sizeof(TImplementationProxy);
+
+	return KImplementationTable;
+	}
+
+//  End of File  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterItem.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Handles white list settings in provisioning.
+*
+*/
+
+
+// INCLUDE FILES
+	// User includes
+#include "WhiteListAdapterItem.h"
+
+// CONSTANTS
+
+_LIT( KIPv4AddressType, "IPV4" );
+_LIT( KIPv6AddressType, "IPV6" );
+_LIT( KE164AddressType, "E164" );
+_LIT( KAlphanumericAddressType, "ALPHA" );
+
+// ================= MEMBER FUNCTIONS ======================
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::TWhiteListAdapterItem
+// ---------------------------------------------------------
+//
+TWhiteListAdapterItem::TWhiteListAdapterItem() 
+:   iAddress( KNullDesC ), 
+    iAddressType( CPushInitiator::ETypeE164 ), 
+    iId( 0 ), 
+    iIdBufPtr( iId ), 
+    iProxyId( KNullDesC ), 
+    iPushSupport( EPushDontCare )
+	{
+	iAddressType = CPushInitiator::ETypeIpv4;
+	iPushSupport = EPushDontCare;
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Address
+// ---------------------------------------------------------
+//
+const TDesC& TWhiteListAdapterItem::Address() const
+	{
+	return iAddress;
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::AddressType
+// ---------------------------------------------------------
+//
+CPushInitiator::TAddrType TWhiteListAdapterItem::AddressType() const
+	{
+	return iAddressType;
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Id
+// ---------------------------------------------------------
+//
+TUint32 TWhiteListAdapterItem::Id() const
+    {
+    return iId;
+    }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::IdBuf
+// ---------------------------------------------------------
+//
+const TDesC8& TWhiteListAdapterItem::IdBuf() const
+    {
+    return iIdBufPtr;
+    }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::PushSupport
+// ---------------------------------------------------------
+//
+TPushSupport TWhiteListAdapterItem::PushSupport() const
+    {
+    return iPushSupport;
+    }
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetAddress
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetAddress( const TDesC& aAddress )
+	{
+	iAddress.Set( aAddress );
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetAddressType
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetAddressType( const TDesC& aAddressType )
+	{
+	if ( !aAddressType.Compare( KIPv4AddressType ) )
+		{
+		iAddressType = CPushInitiator::ETypeIpv4;
+		}
+	else if ( !aAddressType.Compare( KIPv6AddressType ) )
+		{
+		iAddressType = CPushInitiator::ETypeIpv6;
+		}
+	else if ( !aAddressType.Compare( KE164AddressType ) )
+		{
+		iAddressType = CPushInitiator::ETypeE164;
+		}
+	else if ( !aAddressType.Compare( KAlphanumericAddressType ) )
+		{
+		iAddressType = CPushInitiator::ETypeAlpha;
+		}
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetId
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetId( TUint32 aId )
+	{
+	iId = aId;
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetProxyId
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetProxyId( const TDesC& aProxyId )
+	{
+	iProxyId.Set( aProxyId );
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::SetPushSupport
+// ---------------------------------------------------------
+//
+void TWhiteListAdapterItem::SetPushSupport( TPushSupport aPushSupport )
+	{
+	iPushSupport = aPushSupport;
+	}
+
+// ---------------------------------------------------------
+// TWhiteListAdapterItem::Valid
+// ---------------------------------------------------------
+//
+TBool TWhiteListAdapterItem::Valid() const
+	{
+	TBool valid = EFalse;
+
+	// TODO : checking IP address/phone number validity (MsgBioUtils?)
+
+	if ( ( iPushSupport == EPushEnabled || iPushSupport == EPushDontCare ) &&
+		( iAddressType == CPushInitiator::ETypeE164 ) &&
+		( 0 < iAddress.Length() ) )
+		{
+		valid = ETrue;
+		}
+
+	return valid;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterLogger.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*      Implementation of class WhiteListAdapterLogger.   
+*      
+*
+*/
+
+
+#ifdef __TEST_WHITELISTADAPTER_LOG__
+
+// INCLUDE FILES
+    // System includes
+#include <flogger.h>
+
+    // User includes
+#include "WhiteListAdapterLogger.h"
+
+// ================= CONSTANTS =======================
+
+/// White List Adapter logging directory.
+_LIT( KWhiteListAdapterLogDir, "WLA" );
+/// White List Adapter log file name.
+_LIT( KWhiteListAdapterLogFile, "Log.txt" );
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, ... )
+    {
+    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+        {
+        VA_LIST list;
+        VA_START( list, aFmt );
+        RFileLogger::WriteFormat
+            (
+            KWhiteListAdapterLogDir,
+            KWhiteListAdapterLogFile,
+            EFileLoggingModeAppend,
+            aFmt,
+            list
+            );
+        VA_END( list );
+        }
+    }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC16> aFmt, VA_LIST& aList )
+    {
+    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+        {
+        RFileLogger::WriteFormat
+            (
+            KWhiteListAdapterLogDir,
+            KWhiteListAdapterLogFile,
+            EFileLoggingModeAppend,
+            aFmt,
+            aList
+            );
+        }
+    }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, ... )
+    {
+    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+        {
+        VA_LIST list;
+        VA_START( list, aFmt );
+        RFileLogger::WriteFormat
+            (
+            KWhiteListAdapterLogDir,
+            KWhiteListAdapterLogFile,
+            EFileLoggingModeAppend,
+            aFmt,
+            list
+            );
+        VA_END( list );
+        }
+    }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::Write()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::Write
+( TInt32 aMask, TInt aLevel, TRefByValue<const TDesC8> aFmt, VA_LIST& aList )
+    {
+    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+        {
+        RFileLogger::WriteFormat
+            (
+            KWhiteListAdapterLogDir,
+            KWhiteListAdapterLogFile,
+            EFileLoggingModeAppend,
+            aFmt,
+            aList
+            );
+        }
+    }
+
+// ---------------------------------------------------------
+// WhiteListAdapterLogger::HexDump()
+// ---------------------------------------------------------
+//
+void WhiteListAdapterLogger::HexDump
+        (
+        TInt32 aMask,
+        TInt aLevel, 
+        const TText* aHeader,
+        const TText* aMargin,
+        const TUint8* aPtr,
+        TInt aLen
+        )
+    {
+    if( ( aMask & WHITELISTADAPTER_LOG_MASK ) &&
+        ( aLevel <= WHITELISTADAPTER_LOG_LEVEL ) )
+        {
+        RFileLogger::HexDump
+            (
+            KWhiteListAdapterLogDir,
+            KWhiteListAdapterLogFile,
+            EFileLoggingModeAppend,
+            aHeader,
+            aMargin,
+            aPtr,
+            aLen
+            );
+        }
+    }
+
+#endif // __TEST_WHITELISTADAPTER_LOG__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/WhiteListAdapterSrc/WhiteListAdapterPanic.cpp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Panic handling for white list management.
+*
+*/
+
+
+// INCLUDE FILES
+	// System includes
+#include <e32std.h>
+
+	// User includes
+#include "WhiteListAdapterPanic.h"
+
+// CONSTANTS
+
+_LIT( KWhiteListAdapterPanicString, "WhiteListAdapter" );
+
+// External function(s)
+
+void Panic( TInt aPanic )
+	{
+	User::Panic( KWhiteListAdapterPanicString, aPanic );
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/PushContentHandlerClean.mk	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,102 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#
+# Remove Symbian Push Content Handler DLL and registry resource files.
+# These push content handlers are replaced by the content handlers delivered 
+# in the Push MTM.
+#
+
+LANGUAGE=sc
+
+#
+# Files to be removed: ECOM DLLs and registry files.
+#
+
+# The old-named push content handler DLL left by PushMtm or Symbian:
+TARGETDLL1=pushcontenthandler.dll
+# ECOM resource left by Symbian
+TARGETRESOURCE1=pushcontenthandler.r$(LANGUAGE)
+# SI & SL content handlers left by Symbian
+TARGETDLL2=sislcontenthandlers.dll
+# ECOM resource left by Symbian (for SI & SL content handlers)
+TARGETRESOURCE2=sislcontenthandlers.r$(LANGUAGE)
+# Just in case: remove the ECOM registry - the system will create a new
+ECOMREGISTRY=$(EPOCROOT)epoc32\$(PLATFORM)\c\system\data\plugins\ecom.rom.dat
+# Remove Symbian push mtm
+TARGETMTMDLL=wappushmtmclientserver.dll
+
+#
+# Target directories
+#
+
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+	TARGETDIRRESOURCE=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\z\resource\plugins
+else
+endif
+TARGETDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
+GENERICTARGETDIRRESOURCE=$(EPOCROOT)epoc32\data\z\resource\plugins
+TARGETMTMDIRDLL=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)
+
+#
+# Remove the files
+#
+
+do_tidy:
+	if exist "$(TARGETDIRDLL)\$(TARGETDLL1)" del "$(TARGETDIRDLL)\$(TARGETDLL1)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+	if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
+	del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
+endif
+	if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)" \
+	del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE1)"
+	if exist "$(TARGETDIRDLL)\$(TARGETDLL2)" del "$(TARGETDIRDLL)\$(TARGETDLL2)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+	if exist "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
+	del "$(TARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
+endif
+	if exist "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)" \
+	del "$(GENERICTARGETDIRRESOURCE)\$(TARGETRESOURCE2)"
+ifeq (wins,$(findstring wins, $(PLATFORM)))
+	if exist "$(ECOMREGISTRY)" del "$(ECOMREGISTRY)"
+endif
+	if exist "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)" del "$(TARGETMTMDIRDLL)\$(TARGETMTMDLL)"
+
+do_nothing:
+
+#
+# The targets invoked by abld 
+#
+
+MAKMAKE : do_tidy
+
+RESOURCE : do_nothing
+
+SAVESPACE : do_nothing
+
+BLD : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+
+CLEANLIB : do_nothing
+
+FINAL : do_nothing
+
+CLEAN : do_tidy
+
+RELEASABLES : do_nothing
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/PushMtmPushContentHandler.mmp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,147 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Project specification file
+*
+*/
+
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+
+TARGET          PushMtmPushContentHandler.dll
+TARGETTYPE      PLUGIN
+
+// UIDs - 2nd UID specifies an ECom dll,
+// 3rd UID is unique identifier
+// (EUidPushContentHandlerDll in PushContentHandlerDef.hrh).
+UID             0x10009D8D 0x101F854C
+
+CAPABILITY      CAP_ECOM_PLUGIN
+VENDORID        VID_DEFAULT
+
+SOURCEPATH      ../PushContentHandler
+START RESOURCE      101F854C.rss
+#ifdef __S60_32__
+LANG sc 
+#else
+LANGUAGE_IDS 
+#endif
+TARGET      PushMtmPushContentHandler.rsc
+END // RESOURCE
+
+USERINCLUDE     ../PushContentHandler
+USERINCLUDE     ../../Inc
+USERINCLUDE     ../../MtmUtilInc
+USERINCLUDE     ../../MtmUiInc
+
+/* todo: to be removed once push header are updated */
+USERINCLUDE     /epoc32/include/push
+
+APP_LAYER_SYSTEMINCLUDE
+OS_LAYER_ESTLIB_SYSTEMINCLUDE
+#if defined(__PLATFORM_VERSION_32__)
+SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(push)
+SYSTEMINCLUDE   APP_LAYER_PUBLIC_EXPORT_PATH(ecom)
+#endif
+
+SOURCEPATH      ../PushContentHandler
+SOURCE          CCOContentHandler.cpp
+SOURCE          CMultiPartMixedContentHandler.cpp
+SOURCE          CMultiPartRelAndAltContentHandler.cpp
+SOURCE          CPushContentHandlerBase.cpp
+SOURCE          CUnknownContentHandler.cpp
+SOURCE          CSIContentHandler.cpp
+SOURCE          CSLContentHandler.cpp
+SOURCE          PushContentHandlerGroupProxy.cpp
+SOURCE          PushContentHandlerPanic.cpp
+SOURCE          PushContentHandlerUtils.cpp
+SOURCE          PushMtmAutoFetchOperation.cpp
+SOURCE          PushMtmFetchOperation.cpp
+SOURCE		      PushMtmCacheSupply.cpp
+SOURCE		      PushMtmCacheDataSupplier.cpp
+SOURCE          si_dict.c
+SOURCE          sl_dict.c
+SOURCE          StringResourceReader.cpp
+
+// Define the following __TEST_LOG_MMP macro if logging is required.
+// Uncomment it if you want logging. This macro is used only in the mmp file.
+// In the source files use __TEST_LOG__.
+//#define __TEST_LOG_MMP
+
+#if defined __TEST_LOG_MMP
+MACRO           __TEST_LOG__
+#endif
+
+LIBRARY	apengine.lib
+
+LIBRARY         apgrfx.lib
+LIBRARY         apmime.lib
+
+LIBRARY         bafl.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY         Bifu.lib
+LIBRARY         BioDB.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY         CharConv.lib
+
+LIBRARY         commdb.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY         commonui.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY         ECom.lib
+LIBRARY         efsrv.lib
+
+LIBRARY         esock.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY         etext.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY         euser.lib
+#ifdef __TEST_LOG_MMP
+DEBUGLIBRARY         flogger.lib
+#endif
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY         gsmu.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY         http.lib
+LIBRARY         BrowserCache.lib
+LIBRARY         HttpFilterCommon.lib
+LIBRARY         inetprotutil.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY         MiscPushMsgUtils.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY         msgs.lib
+LIBRARY         PushMsgEntry.lib
+LIBRARY         PushMtmUtil.lib
+LIBRARY         SISLPushMsgUtils.lib
+
+#ifdef __SERIES60_PUSH_SP
+LIBRARY         smcm.lib
+#endif // __SERIES60_PUSH_SP
+
+LIBRARY         WapPushUtils.lib
+
+LIBRARY			ws32.lib
+
+LIBRARY         cXmlParser.lib
+LIBRARY         CENTRALREPOSITORY.lib
+LIBRARY         featmgr.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/PushMtmWhiteListAdapter.mmp	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Specification file of White List Adapter plug-in
+*
+*/
+
+#include <platform_paths.hrh>
+#include <platform/mw/browser_platform_variant.hrh>
+#include <defaultcaps.hrh>
+#include "../WhiteListAdapterInc/WhiteListAdapterUids.h"
+
+TARGET		PushMtmWhiteListAdapter.dll
+TARGETTYPE	PLUGIN
+
+// UIDs - 2nd UID specifies an ECom dll,
+// 3rd UID is a unique identifier from WhiteListAdapterDef.h
+UID		0x10009D8D KWhiteListAdapterDllUid
+
+CAPABILITY CAP_ECOM_PLUGIN
+VENDORID   VID_DEFAULT
+
+// RESOURCES
+
+START RESOURCE      ../Data/10008D3E.rss
+#ifdef __S60_32__
+LANG sc 
+#else
+LANGUAGE_IDS 
+#endif
+TARGET      PushMtmWhiteListAdapter.rsc
+END // RESOURCE
+
+// INCLUDE DIRECTORIES
+
+USERINCLUDE	../WhiteListAdapterInc
+USERINCLUDE	../../MtmUtilInc
+
+APP_LAYER_SYSTEMINCLUDE
+
+// SOURCE FILES
+
+SOURCEPATH	../WhiteListAdapterSrc
+SOURCE		WhiteListAdapter.cpp
+SOURCE		WhiteListAdapterGroupProxy.cpp
+SOURCE		WhiteListAdapterItem.cpp
+SOURCE		WhiteListAdapterLogger.cpp
+SOURCE		WhiteListAdapterPanic.cpp
+
+// LIBRARIES
+
+LIBRARY		Euser.lib
+LIBRARY		msgs.lib		// for MMsvSessionObserver
+LIBRARY		ProvisioningEngine.lib	// for CWPAdapter & Co.
+LIBRARY		PushMtmUtil.lib		// for Push MTM Settings
+
+// Define this macro is you wish to enable logging
+//#define __TEST_WHITELISTADAPTER_LOG_ENABLED
+
+#ifdef __TEST_WHITELISTADAPTER_LOG_ENABLED
+	MACRO __TEST_WHITELISTADAPTER_LOG__
+	DEBUGLIBRARY flogger.lib
+#endif	// __TEST_WHITELISTADAPTER_LOG_ENABLED
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/group/bld.inf	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Build specification file
+*
+*/
+
+#include <platform_paths.hrh>
+#include "../../../../../mw/web/web_plat/browser_platform_api/inc/browser_platform_variant.hrh"
+
+PRJ_PLATFORMS
+
+DEFAULT
+
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+#if defined( __S60_32__) || defined( __PLATFORM_VERSION_S60_50__)  || defined( __PLATFORM_VERSION_5250__)
+// Remove Symbian Push Content Handler
+gnumakefile PushContentHandlerClean.mk
+#endif
+// Build our Push Content Handler
+PushMtmPushContentHandler.mmp
+
+#ifdef __PUSH_WHITELIST
+
+// Build our White List Adapter plug-in
+PushMtmWhiteListAdapter.mmp
+
+#endif // __PUSH_WHITELIST
+
+
+PRJ_TESTMMPFILES
+
+
+PRJ_TESTEXPORTS
+