201025
authorhgs
Fri, 25 Jun 2010 16:18:56 +0530
changeset 28 10ce313e5859
parent 17 d6ba66e59a81
child 29 41f2cd9c3aa1
201025
group/bld.inf
messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/ALWAYSONLINEMANAGERCLIENTU.DEF
messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/ALWAYSONLINEMANAGERSERVERU.DEF
messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/alwaysonlinemanagerclientu.def
messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/alwaysonlinemanagerserveru.def
messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/ALWAYSONLINEMANAGERCLIENTU.DEF
messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/ALWAYSONLINEMANAGERSERVERU.DEF
messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/alwaysonlinemanagerclientu.def
messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/alwaysonlinemanagerserveru.def
messagingfw/alwaysonline/AlwaysOnlineManager/EABI/AlwaysOnlineManagerClientU.DEF
messagingfw/alwaysonline/AlwaysOnlineManager/EABI/AlwaysOnlineManagerServerU.DEF
messagingfw/alwaysonline/AlwaysOnlineManager/eabi/alwaysonlinemanagerclientu.def
messagingfw/alwaysonline/AlwaysOnlineManager/eabi/alwaysonlinemanagerserveru.def
messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/ALWAYSONLINESTARTER.DEF
messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/ALWAYSONLINESTARTERU.DEF
messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/alwaysonlinestarter.def
messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/alwaysonlinestarteru.def
messagingfw/alwaysonline/group/bld.inf
messagingfw/alwaysonline/rom/AlwaysOnline.iby
messagingfw/biomsgfw/BDB/BLD.INF
messagingfw/biomsgfw/BDB/bld.inf
messagingfw/biomsgfw/BDBTSRC/testbif/BLD.INF
messagingfw/biomsgfw/BDBTSRC/testbif/bld.inf
messagingfw/biomsgfw/BIFU/BLD.INF
messagingfw/biomsgfw/BIFU/bld.inf
messagingfw/biomsgfw/BIOC/BLD.INF
messagingfw/biomsgfw/BIOC/bld.inf
messagingfw/biomsgfw/BIOS/BLD.INF
messagingfw/biomsgfw/BIOS/bld.inf
messagingfw/biomsgfw/BITS/BLD.INF
messagingfw/biomsgfw/BITS/bld.inf
messagingfw/biomsgfw/BIUT/BLD.INF
messagingfw/biomsgfw/BIUT/bld.inf
messagingfw/biomsgfw/BioWatchers/BLD.INF
messagingfw/biomsgfw/BioWatchers/bld.inf
messagingfw/biomsgfw/Rom/BLD.INF
messagingfw/biomsgfw/Rom/bld.inf
messagingfw/biomsgfw/T_BIOMSG/Group/BLD.INF
messagingfw/biomsgfw/T_BIOMSG/Group/bld.inf
messagingfw/biomsgfw/cbcp/CBusinessCardParser class.htm
messagingfw/biomsgfw/group/BLD.INF
messagingfw/biomsgfw/group/bioerr.ra
messagingfw/biomsgfw/group/bld.inf
messagingfw/biomsgfw/wapptsrc/wappxml.rtf
messagingfw/msgcommonutils/rom/msgcommonutils.iby
messagingfw/msgsrvnstore/group/bld.inf
messagingfw/msgsrvnstore/group/msgerr.ra
messagingfw/msgsrvnstore/server/group/MSGS.mmp
messagingfw/msgsrvnstore/server/group/MSGS.rss
messagingfw/msgsrvnstore/server/group/MSGS_AutoShutdown.mmp
messagingfw/msgsrvnstore/server/group/bld.inf
messagingfw/msgsrvnstore/server/loc/msgs.loc
messagingfw/msgsrvnstore/server/rom/messageserver.hby
messagingfw/msgsrvnstore/server/rom/messageserver_rsc.iby
messagingfw/msgsrvnstore/serverexe/group/BLD.INF
messagingfw/msgsrvnstore/serverexe/group/bld.inf
messagingfw/msgtest/group/bld.inf
messagingfw/msgtest/targetautomation/BLD.INF
messagingfw/msgtest/targetautomation/Delay/BLD.INF
messagingfw/msgtest/targetautomation/Delay/bld.inf
messagingfw/msgtest/targetautomation/SerialLog/BLD.INF
messagingfw/msgtest/targetautomation/SerialLog/bld.inf
messagingfw/msgtest/targetautomation/bld.inf
messagingfw/msgtest/testutils/base/group/TestUtils.mdl
messagingfw/msgtest/testutils/group/BLD.INF
messagingfw/msgtest/testutils/group/bld.inf
messagingfw/msgtest/tools/autorun/group/BLD.INF
messagingfw/msgtest/tools/autorun/group/bld.inf
messagingfw/msgtest/tools/copylogs/group/BLD.INF
messagingfw/msgtest/tools/copylogs/group/bld.inf
messagingfw/msgtest/tools/group/bld.inf
messagingfw/msgtest/tools/spoofserver/group/Bld.inf
messagingfw/msgtest/tools/spoofserver/group/bld.inf
messagingfw/msgtestfw/Configurations/EmailMessage/DRM_SeparateDelivery01.txt
messagingfw/msgtestfw/TestCases/ScriptedTestCases/SendAs/MSG-SENDAS-SMS-CIT-0014-Add_To_MultipleRecipientAddr.ini
messagingfw/msgtestfw/TestCases/ScriptedTestCases/SendAs/data/HugeTextFile.txt
messagingfw/msgtestproduct/email/imap/testdata/EmailMessage/1MBBody.txt
messagingfw/msgtestproduct/email/imap/testdata/EmailMessage/DRM_SeparateDelivery01.txt
messagingfw/msgtestproduct/email/imap/testdata/sys/CorruptDb.db
messagingfw/msgtestproduct/email/pop/testdata/EmailMessage/1MBBody.txt
messagingfw/msgtestproduct/media/testdata/corrupt.db
messagingfw/msgtests/group/bld.inf
messagingfw/scheduledsendmtm/group/scheduling.mdl
messagingfw/scheduledsendmtm/schedulesendmtm/inc/MsvSchedulePackage.h
messagingfw/watcherfw/group/watcher.mmp
msgfw_plat/always_online_client_api/inc/AlwaysOnlineManagerClient.h
msgfw_plat/always_online_plugin_api/inc/AlwaysOnlineEComInterface.h
--- a/group/bld.inf	Mon May 03 12:58:18 2010 +0300
+++ b/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -17,5 +17,4 @@
 
 #include "../msgfw_plat/group/bld.inf"
 //#include "../msgfw_pub/group/bld.inf"
-#include "../msgbranched/group/bld.inf"
 #include "../messagingfw/group/bld.inf"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/ALWAYSONLINEMANAGERCLIENTU.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,8 @@
+EXPORTS
+	Connect__26RAlwaysOnlineClientSession @ 1 NONAME R3UNUSED ; RAlwaysOnlineClientSession::Connect(void)
+	RelayCommandL__26RAlwaysOnlineClientSession30TAlwaysOnlineServerAPICommandsR5TDes8 @ 2 NONAME R3UNUSED ; RAlwaysOnlineClientSession::RelayCommandL(TAlwaysOnlineServerAPICommands, TDes8 &)
+	RunServerL__Fv @ 3 NONAME R3UNUSED ; RunServerL(void)
+	Version__C26RAlwaysOnlineClientSession @ 4 NONAME R3UNUSED ; RAlwaysOnlineClientSession::Version(void) const
+	__26RAlwaysOnlineClientSession @ 5 NONAME R3UNUSED ; RAlwaysOnlineClientSession::RAlwaysOnlineClientSession(void)
+	SendSinglePacketL__26RAlwaysOnlineClientSession30TAlwaysOnlineServerAPICommandsR5TDes8 @ 6 NONAME R3UNUSED ; RAlwaysOnlineClientSession::SendSinglePacketL(TAlwaysOnlineServerAPICommands, TDes8 &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/ALWAYSONLINEMANAGERSERVERU.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,5 @@
+EXPORTS
+	NewL__26CAlwaysOnlineManagerServer @ 1 NONAME R3UNUSED ; CAlwaysOnlineManagerServer::NewL(void)
+	ThreadFunction__26CAlwaysOnlineManagerServerPv @ 2 NONAME R3UNUSED ; CAlwaysOnlineManagerServer::ThreadFunction(void *)
+	WinsMain__Fv @ 3 NONAME R3UNUSED ; WinsMain(void)
+
--- a/messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/alwaysonlinemanagerclientu.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
-	Connect__26RAlwaysOnlineClientSession @ 1 NONAME R3UNUSED ; RAlwaysOnlineClientSession::Connect(void)
-	RelayCommandL__26RAlwaysOnlineClientSession30TAlwaysOnlineServerAPICommandsR5TDes8 @ 2 NONAME R3UNUSED ; RAlwaysOnlineClientSession::RelayCommandL(TAlwaysOnlineServerAPICommands, TDes8 &)
-	RunServerL__Fv @ 3 NONAME R3UNUSED ; RunServerL(void)
-	Version__C26RAlwaysOnlineClientSession @ 4 NONAME R3UNUSED ; RAlwaysOnlineClientSession::Version(void) const
-	__26RAlwaysOnlineClientSession @ 5 NONAME R3UNUSED ; RAlwaysOnlineClientSession::RAlwaysOnlineClientSession(void)
-	SendSinglePacketL__26RAlwaysOnlineClientSession30TAlwaysOnlineServerAPICommandsR5TDes8 @ 6 NONAME R3UNUSED ; RAlwaysOnlineClientSession::SendSinglePacketL(TAlwaysOnlineServerAPICommands, TDes8 &)
-
--- a/messagingfw/alwaysonline/AlwaysOnlineManager/BMARM/alwaysonlinemanagerserveru.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
-	NewL__26CAlwaysOnlineManagerServer @ 1 NONAME R3UNUSED ; CAlwaysOnlineManagerServer::NewL(void)
-	ThreadFunction__26CAlwaysOnlineManagerServerPv @ 2 NONAME R3UNUSED ; CAlwaysOnlineManagerServer::ThreadFunction(void *)
-	WinsMain__Fv @ 3 NONAME R3UNUSED ; WinsMain(void)
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/ALWAYSONLINEMANAGERCLIENTU.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,11 @@
+EXPORTS
+	??0RAlwaysOnlineClientSession@@QAE@XZ @ 1 NONAME ; public: __thiscall RAlwaysOnlineClientSession::RAlwaysOnlineClientSession(void)
+	?Connect@RAlwaysOnlineClientSession@@QAEHXZ @ 2 NONAME ; public: int __thiscall RAlwaysOnlineClientSession::Connect(void)
+	?RelayCommandL@RAlwaysOnlineClientSession@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@@Z @ 3 NONAME ; public: void __thiscall RAlwaysOnlineClientSession::RelayCommandL(enum TAlwaysOnlineServerAPICommands,class TDes8 &)
+	?RunServerL@@YAXXZ @ 4 NONAME ; void __cdecl RunServerL(void)
+	?Version@RAlwaysOnlineClientSession@@QBE?AVTVersion@@XZ @ 5 NONAME ; public: class TVersion  __thiscall RAlwaysOnlineClientSession::Version(void)const 
+	?SendSinglePacketL@RAlwaysOnlineClientSession@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@@Z @ 6 NONAME ; public: void __thiscall RAlwaysOnlineClientSession::SendSinglePacketL(enum TAlwaysOnlineServerAPICommands,class TDes8 &)
+	??1RAlwaysOnlineClientSession@@QAE@XZ @ 7 NONAME ; RAlwaysOnlineClientSession::~RAlwaysOnlineClientSession(void)
+	?SendCommandAsync@RAlwaysOnlineClientSession@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@AAVTRequestStatus@@@Z @ 8 NONAME ; void RAlwaysOnlineClientSession::SendCommandAsync(enum TAlwaysOnlineServerAPICommands, class TDes8 &, class TRequestStatus &)
+	?SendReceiveSync@RAlwaysOnlineClientSession@@QAEHW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@1@Z @ 9 NONAME ; int RAlwaysOnlineClientSession::SendReceiveSync(enum TAlwaysOnlineServerAPICommands, class TDes8 &, class TDes8 &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/ALWAYSONLINEMANAGERSERVERU.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,7 @@
+EXPORTS
+	?NewL@CAlwaysOnlineManagerServer@@SAPAV1@XZ @ 1 NONAME ; public: static class CAlwaysOnlineManagerServer * __cdecl CAlwaysOnlineManagerServer::NewL(void)
+	?ThreadFunction@CAlwaysOnlineManagerServer@@SAHPAX@Z @ 2 NONAME ; public: static int __cdecl CAlwaysOnlineManagerServer::ThreadFunction(void *)
+	?HandleClientCommandL@CAlwaysOnlineManagerServer@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@@Z @ 3 NONAME ; void CAlwaysOnlineManagerServer::HandleClientCommandL(enum TAlwaysOnlineServerAPICommands, class TDes8 &)
+	?WinsMain@@YAHXZ @ 4 NONAME ; int __cdecl WinsMain(void)
+	
+
--- a/messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/alwaysonlinemanagerclientu.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-EXPORTS
-	??0RAlwaysOnlineClientSession@@QAE@XZ @ 1 NONAME ; public: __thiscall RAlwaysOnlineClientSession::RAlwaysOnlineClientSession(void)
-	?Connect@RAlwaysOnlineClientSession@@QAEHXZ @ 2 NONAME ; public: int __thiscall RAlwaysOnlineClientSession::Connect(void)
-	?RelayCommandL@RAlwaysOnlineClientSession@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@@Z @ 3 NONAME ; public: void __thiscall RAlwaysOnlineClientSession::RelayCommandL(enum TAlwaysOnlineServerAPICommands,class TDes8 &)
-	?RunServerL@@YAXXZ @ 4 NONAME ; void __cdecl RunServerL(void)
-	?Version@RAlwaysOnlineClientSession@@QBE?AVTVersion@@XZ @ 5 NONAME ; public: class TVersion  __thiscall RAlwaysOnlineClientSession::Version(void)const 
-	?SendSinglePacketL@RAlwaysOnlineClientSession@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@@Z @ 6 NONAME ; public: void __thiscall RAlwaysOnlineClientSession::SendSinglePacketL(enum TAlwaysOnlineServerAPICommands,class TDes8 &)
-	??1RAlwaysOnlineClientSession@@QAE@XZ @ 7 NONAME ; RAlwaysOnlineClientSession::~RAlwaysOnlineClientSession(void)
-	?SendCommandAsync@RAlwaysOnlineClientSession@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@AAVTRequestStatus@@@Z @ 8 NONAME ; void RAlwaysOnlineClientSession::SendCommandAsync(enum TAlwaysOnlineServerAPICommands, class TDes8 &, class TRequestStatus &)
-	?SendReceiveSync@RAlwaysOnlineClientSession@@QAEHW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@1@Z @ 9 NONAME ; int RAlwaysOnlineClientSession::SendReceiveSync(enum TAlwaysOnlineServerAPICommands, class TDes8 &, class TDes8 &)
-
--- a/messagingfw/alwaysonline/AlwaysOnlineManager/BWINS/alwaysonlinemanagerserveru.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-EXPORTS
-	?NewL@CAlwaysOnlineManagerServer@@SAPAV1@XZ @ 1 NONAME ; public: static class CAlwaysOnlineManagerServer * __cdecl CAlwaysOnlineManagerServer::NewL(void)
-	?ThreadFunction@CAlwaysOnlineManagerServer@@SAHPAX@Z @ 2 NONAME ; public: static int __cdecl CAlwaysOnlineManagerServer::ThreadFunction(void *)
-	?HandleClientCommandL@CAlwaysOnlineManagerServer@@QAEXW4TAlwaysOnlineServerAPICommands@@AAVTDes8@@@Z @ 3 NONAME ; void CAlwaysOnlineManagerServer::HandleClientCommandL(enum TAlwaysOnlineServerAPICommands, class TDes8 &)
-	?WinsMain@@YAHXZ @ 4 NONAME ; int __cdecl WinsMain(void)
-	
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineManager/EABI/AlwaysOnlineManagerClientU.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,13 @@
+EXPORTS
+	_Z10RunServerLv @ 1 NONAME
+	_ZN26RAlwaysOnlineClientSession13RelayCommandLE30TAlwaysOnlineServerAPICommandsR5TDes8 @ 2 NONAME
+	_ZN26RAlwaysOnlineClientSession7ConnectEv @ 3 NONAME
+	_ZN26RAlwaysOnlineClientSessionC1Ev @ 4 NONAME
+	_ZN26RAlwaysOnlineClientSessionC2Ev @ 5 NONAME
+	_ZNK26RAlwaysOnlineClientSession7VersionEv @ 6 NONAME
+	_ZN26RAlwaysOnlineClientSession17SendSinglePacketLE30TAlwaysOnlineServerAPICommandsR5TDes8 @ 7 NONAME
+	_ZN26RAlwaysOnlineClientSession15SendReceiveSyncE30TAlwaysOnlineServerAPICommandsR5TDes8S2_ @ 8 NONAME
+	_ZN26RAlwaysOnlineClientSession16SendCommandAsyncE30TAlwaysOnlineServerAPICommandsR5TDes8R14TRequestStatus @ 9 NONAME
+	_ZN26RAlwaysOnlineClientSessionD1Ev @ 10 NONAME
+	_ZN26RAlwaysOnlineClientSessionD2Ev @ 11 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineManager/EABI/AlwaysOnlineManagerServerU.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,20 @@
+EXPORTS
+	_Z8WinsMainv @ 1 NONAME
+	_ZN26CAlwaysOnlineManagerServer14ThreadFunctionEPv @ 2 NONAME
+	_ZN26CAlwaysOnlineManagerServer4NewLEv @ 3 NONAME
+	_ZTI20CAlwaysOnlineManager @ 4 NONAME ; #<TI>#
+	_ZTI23CAOServerCommandHandler @ 5 NONAME ; #<TI>#
+	_ZTI26CAlwaysOnlineManagerServer @ 6 NONAME ; #<TI>#
+	_ZTI30CAlwaysOnlineDiskSpaceObserver @ 7 NONAME ; #<TI>#
+	_ZTI33CAlwaysOnlineManagerServerSession @ 8 NONAME ; #<TI>#
+	_ZTV20CAlwaysOnlineManager @ 9 NONAME ; #<VT>#
+	_ZTV23CAOServerCommandHandler @ 10 NONAME ; #<VT>#
+	_ZTV26CAlwaysOnlineManagerServer @ 11 NONAME ; #<VT>#
+	_ZTV30CAlwaysOnlineDiskSpaceObserver @ 12 NONAME ; #<VT>#
+	_ZTV33CAlwaysOnlineManagerServerSession @ 13 NONAME ; #<VT>#
+	_ZTI16CAOCenRepControl @ 14 NONAME ; #<TI>#
+	_ZTI16CAOCommandParser @ 15 NONAME ; #<TI>#
+	_ZTV16CAOCenRepControl @ 16 NONAME ; #<VT>#
+	_ZTV16CAOCommandParser @ 17 NONAME ; #<VT>#
+	_ZN26CAlwaysOnlineManagerServer20HandleClientCommandLE30TAlwaysOnlineServerAPICommandsR5TDes8 @ 18 NONAME
+
--- a/messagingfw/alwaysonline/AlwaysOnlineManager/eabi/alwaysonlinemanagerclientu.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-EXPORTS
-	_Z10RunServerLv @ 1 NONAME
-	_ZN26RAlwaysOnlineClientSession13RelayCommandLE30TAlwaysOnlineServerAPICommandsR5TDes8 @ 2 NONAME
-	_ZN26RAlwaysOnlineClientSession7ConnectEv @ 3 NONAME
-	_ZN26RAlwaysOnlineClientSessionC1Ev @ 4 NONAME
-	_ZN26RAlwaysOnlineClientSessionC2Ev @ 5 NONAME
-	_ZNK26RAlwaysOnlineClientSession7VersionEv @ 6 NONAME
-	_ZN26RAlwaysOnlineClientSession17SendSinglePacketLE30TAlwaysOnlineServerAPICommandsR5TDes8 @ 7 NONAME
-	_ZN26RAlwaysOnlineClientSession15SendReceiveSyncE30TAlwaysOnlineServerAPICommandsR5TDes8S2_ @ 8 NONAME
-	_ZN26RAlwaysOnlineClientSession16SendCommandAsyncE30TAlwaysOnlineServerAPICommandsR5TDes8R14TRequestStatus @ 9 NONAME
-	_ZN26RAlwaysOnlineClientSessionD1Ev @ 10 NONAME
-	_ZN26RAlwaysOnlineClientSessionD2Ev @ 11 NONAME
-
--- a/messagingfw/alwaysonline/AlwaysOnlineManager/eabi/alwaysonlinemanagerserveru.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-EXPORTS
-	_Z8WinsMainv @ 1 NONAME
-	_ZN26CAlwaysOnlineManagerServer14ThreadFunctionEPv @ 2 NONAME
-	_ZN26CAlwaysOnlineManagerServer4NewLEv @ 3 NONAME
-	_ZTI20CAlwaysOnlineManager @ 4 NONAME ; #<TI>#
-	_ZTI23CAOServerCommandHandler @ 5 NONAME ; #<TI>#
-	_ZTI26CAlwaysOnlineManagerServer @ 6 NONAME ; #<TI>#
-	_ZTI30CAlwaysOnlineDiskSpaceObserver @ 7 NONAME ; #<TI>#
-	_ZTI33CAlwaysOnlineManagerServerSession @ 8 NONAME ; #<TI>#
-	_ZTV20CAlwaysOnlineManager @ 9 NONAME ; #<VT>#
-	_ZTV23CAOServerCommandHandler @ 10 NONAME ; #<VT>#
-	_ZTV26CAlwaysOnlineManagerServer @ 11 NONAME ; #<VT>#
-	_ZTV30CAlwaysOnlineDiskSpaceObserver @ 12 NONAME ; #<VT>#
-	_ZTV33CAlwaysOnlineManagerServerSession @ 13 NONAME ; #<VT>#
-	_ZTI16CAOCenRepControl @ 14 NONAME ; #<TI>#
-	_ZTI16CAOCommandParser @ 15 NONAME ; #<TI>#
-	_ZTV16CAOCenRepControl @ 16 NONAME ; #<VT>#
-	_ZTV16CAOCommandParser @ 17 NONAME ; #<VT>#
-	_ZN26CAlwaysOnlineManagerServer20HandleClientCommandLE30TAlwaysOnlineServerAPICommandsR5TDes8 @ 18 NONAME
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/ALWAYSONLINESTARTER.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,3 @@
+EXPORTS
+	?WinsMain@@YAHXZ @ 1 NONAME ; int __cdecl WinsMain(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/ALWAYSONLINESTARTERU.DEF	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,3 @@
+EXPORTS
+	?WinsMain@@YAHXZ @ 1 NONAME ; int __cdecl WinsMain(void)
+
--- a/messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/alwaysonlinestarter.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	?WinsMain@@YAHXZ @ 1 NONAME ; int __cdecl WinsMain(void)
-
--- a/messagingfw/alwaysonline/AlwaysOnlineStarterApp/BWINS/alwaysonlinestarteru.def	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
-	?WinsMain@@YAHXZ @ 1 NONAME ; int __cdecl WinsMain(void)
-
--- a/messagingfw/alwaysonline/group/bld.inf	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/alwaysonline/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -28,7 +28,7 @@
 ../rom/AlwaysOnline.iby                CORE_MW_LAYER_IBY_EXPORT_PATH(AlwaysOnline.iby)
 
 // Stub installer file which enables eclipsing of always online manager
-../sis/aomanagerstub.sis /epoc32/data/z/system/install/aomanagerstub.SIS
+../sis/aomanagerstub.SIS /epoc32/data/z/system/install/aomanagerstub.SIS
 
 PRJ_MMPFILES
 ../AlwaysOnlineManager/group/AlwaysOnlineManagerServer.mmp
--- a/messagingfw/alwaysonline/rom/AlwaysOnline.iby	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/alwaysonline/rom/AlwaysOnline.iby	Fri Jun 25 16:18:56 2010 +0530
@@ -24,7 +24,7 @@
 file=ABI_DIR\BUILD_DIR\ALWAYSONLINESTARTER.exe              PROGRAMS_DIR\ALWAYSONLINESTARTER.exe
 
 // Stub installer file
-data=DATAZ_\system\install\aomanager_stub.sis   system\install\aomanager_stub.sis
+data=DATAZ_\system\install\aomanagerstub.SIS   system\install\aomanagerstub.SIS
 
 #endif
 
--- a/messagingfw/biomsgfw/BDB/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BioDB.INF
-// 
-
-
-PRJ_PLATFORMS
-
-
-PRJ_EXPORTS
-../BDBINC/BIODB.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(biodb.h)
-../BDBINC/bifchangeobserver.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(bifchangeobserver.h)
-
-PRJ_MMPFILES
-group/BIODB.MMP
-
-PRJ_TESTMMPFILES
-../BDBTSRC/T_BIODB.MMP	manual
-../BDBTSRC/T_BdbHF.MMP	manual
-../BDBTSRC/t_bio_observer.mmp
-
-#include "../BDBTSRC/testbif/BLD.INF"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BDB/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,33 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BioDB.INF
+// 
+
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+../BDBINC/BIODB.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(biodb.h)
+../BDBINC/bifchangeobserver.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(bifchangeobserver.h)
+
+PRJ_MMPFILES
+group/BIODB.MMP
+
+PRJ_TESTMMPFILES
+../BDBTSRC/T_BIODB.MMP	manual
+../BDBTSRC/T_BdbHF.MMP	manual
+../BDBTSRC/t_bio_observer.mmp
+
+#include "../BDBTSRC/testbif/bld.inf"
--- a/messagingfw/biomsgfw/BDBTSRC/testbif/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BioDB.INF
-// 
-//
-
-PRJ_TESTMMPFILES
-
-makefile testbif1.mk
-makefile testbif2.mk
-makefile bogus.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BDBTSRC/testbif/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,22 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BioDB.INF
+// 
+//
+
+PRJ_TESTMMPFILES
+
+makefile testbif1.mk
+makefile testbif2.mk
+makefile bogus.mk
--- a/messagingfw/biomsgfw/BIFU/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-
-PRJ_PLATFORMS
-DEFAULT WINC
-
-PRJ_EXPORTS
-../BIFUINC/BIF.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bif.h)
-../BIFUINC/bifbase.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(bifbase.h)
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-../BIFUINC/cbifentry.h /epoc32/include/cbifentry.h
-#endif
-
-PRJ_MMPFILES
-group/BIFU.MMP
-
-PRJ_TESTMMPFILES
-../BIFUTSRC/TBIFU.MMP		manual
-../BIFUTSRC/TBIFVIEW.mmp	manual
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BIFU/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,32 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+PRJ_PLATFORMS
+DEFAULT WINC
+
+PRJ_EXPORTS
+../BIFUINC/BIF.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bif.h)
+../BIFUINC/bifbase.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(bifbase.h)
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../BIFUINC/cbifentry.h /epoc32/include/cbifentry.h
+#endif
+
+PRJ_MMPFILES
+group/BIFU.MMP
+
+PRJ_TESTMMPFILES
+../BIFUTSRC/TBIFU.MMP		manual
+../BIFUTSRC/TBIFVIEW.mmp	manual
--- a/messagingfw/biomsgfw/BIOC/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BIOC.INF
-// 
-//
-
-PRJ_PLATFORMS
-
-
-PRJ_EXPORTS
-../BIOCINC/BIOSCMDS.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bioscmds.h)
-../BIOCINC/BIOCMTM.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(biocmtm.h)
-
-PRJ_TESTEXPORTS
-../BITSTSRC/ENP1.TXT /epoc32/winscw/c/test/bio/tbiogen/enp1.txt
-../BITSTSRC/iacp1.txt /epoc32/winscw/c/test/bio/tbiogen/iacp1.txt
-../BITSTSRC/iacp2.txt /epoc32/winscw/c/test/bio/tbiogen/iacp2.txt
-../BITSTSRC/iacp3.txt /epoc32/winscw/c/test/bio/tbiogen/iacp3.txt
-../BITSTSRC/iacp4.txt /epoc32/winscw/c/test/bio/tbiogen/iacp4.txt
-../BITSTSRC/iacp5.txt /epoc32/winscw/c/test/bio/tbiogen/iacp5.txt
-../BITSTSRC/iacp6.txt /epoc32/winscw/c/test/bio/tbiogen/iacp6.txt
-../BITSTSRC/iacp7.txt /epoc32/winscw/c/test/bio/tbiogen/iacp7.txt
-../BITSTSRC/IAP1.TXT /epoc32/winscw/c/test/bio/tbiogen/iap1.txt
-../BITSTSRC/IAP2.TXT /epoc32/winscw/c/test/bio/tbiogen/iap2.txt
-../BITSTSRC/IAP3.TXT /epoc32/winscw/c/test/bio/tbiogen/iap3.txt
-../BITSTSRC/IAP4.TXT /epoc32/winscw/c/test/bio/tbiogen/iap4.txt
-../BITSTSRC/IAP5.TXT /epoc32/winscw/c/test/bio/tbiogen/iap5.txt
-../BITSTSRC/IAP6.TXT /epoc32/winscw/c/test/bio/tbiogen/iap6.txt
-../BITSTSRC/IAP7.TXT /epoc32/winscw/c/test/bio/tbiogen/iap7.txt
-../BITSTSRC/IAP8.TXT /epoc32/winscw/c/test/bio/tbiogen/iap8.txt
-../BITSTSRC/IAP9.TXT /epoc32/winscw/c/test/bio/tbiogen/iap9.txt
-../BITSTSRC/OPLOGO1.TXT /epoc32/winscw/c/test/bio/tbiogen/oplogo1.txt
-../BITSTSRC/RTONE1.TXT /epoc32/winscw/c/test/bio/tbiogen/rtone1.txt
-../BITSTSRC/RTONE2.TXT /epoc32/winscw/c/test/bio/tbiogen/rtone2.txt
-../BITSTSRC/SMS1.TXT /epoc32/winscw/c/test/bio/tbiogen/sms1.txt
-../BITSTSRC/SMS2.TXT /epoc32/winscw/c/test/bio/tbiogen/sms2.txt
-../BITSTSRC/VCAL1.TXT /epoc32/winscw/c/test/bio/tbiogen/vcal1.txt
-../BITSTSRC/VCARD1.TXT /epoc32/winscw/c/test/bio/tbiogen/vcard1.txt
-
-PRJ_MMPFILES
-group/BIOC.MMP
-
-PRJ_TESTMMPFILES
-../BIOCTSRC/T_BIOC.MMP	manual
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BIOC/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,55 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BIOC.INF
+// 
+//
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+../BIOCINC/BIOSCMDS.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bioscmds.h)
+../BIOCINC/BIOCMTM.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(biocmtm.h)
+
+PRJ_TESTEXPORTS
+../BITSTSRC/ENP1.TXT /epoc32/winscw/c/test/bio/tbiogen/enp1.txt
+../BITSTSRC/iacp1.txt /epoc32/winscw/c/test/bio/tbiogen/iacp1.txt
+../BITSTSRC/iacp2.txt /epoc32/winscw/c/test/bio/tbiogen/iacp2.txt
+../BITSTSRC/iacp3.txt /epoc32/winscw/c/test/bio/tbiogen/iacp3.txt
+../BITSTSRC/iacp4.txt /epoc32/winscw/c/test/bio/tbiogen/iacp4.txt
+../BITSTSRC/iacp5.txt /epoc32/winscw/c/test/bio/tbiogen/iacp5.txt
+../BITSTSRC/iacp6.txt /epoc32/winscw/c/test/bio/tbiogen/iacp6.txt
+../BITSTSRC/iacp7.txt /epoc32/winscw/c/test/bio/tbiogen/iacp7.txt
+../BITSTSRC/IAP1.TXT /epoc32/winscw/c/test/bio/tbiogen/iap1.txt
+../BITSTSRC/IAP2.TXT /epoc32/winscw/c/test/bio/tbiogen/iap2.txt
+../BITSTSRC/IAP3.TXT /epoc32/winscw/c/test/bio/tbiogen/iap3.txt
+../BITSTSRC/IAP4.TXT /epoc32/winscw/c/test/bio/tbiogen/iap4.txt
+../BITSTSRC/IAP5.TXT /epoc32/winscw/c/test/bio/tbiogen/iap5.txt
+../BITSTSRC/IAP6.TXT /epoc32/winscw/c/test/bio/tbiogen/iap6.txt
+../BITSTSRC/IAP7.TXT /epoc32/winscw/c/test/bio/tbiogen/iap7.txt
+../BITSTSRC/IAP8.TXT /epoc32/winscw/c/test/bio/tbiogen/iap8.txt
+../BITSTSRC/IAP9.TXT /epoc32/winscw/c/test/bio/tbiogen/iap9.txt
+../BITSTSRC/OPLOGO1.TXT /epoc32/winscw/c/test/bio/tbiogen/oplogo1.txt
+../BITSTSRC/RTONE1.TXT /epoc32/winscw/c/test/bio/tbiogen/rtone1.txt
+../BITSTSRC/RTONE2.TXT /epoc32/winscw/c/test/bio/tbiogen/rtone2.txt
+../BITSTSRC/SMS1.TXT /epoc32/winscw/c/test/bio/tbiogen/sms1.txt
+../BITSTSRC/SMS2.TXT /epoc32/winscw/c/test/bio/tbiogen/sms2.txt
+../BITSTSRC/VCAL1.TXT /epoc32/winscw/c/test/bio/tbiogen/vcal1.txt
+../BITSTSRC/VCARD1.TXT /epoc32/winscw/c/test/bio/tbiogen/vcard1.txt
+
+PRJ_MMPFILES
+group/BIOC.MMP
+
+PRJ_TESTMMPFILES
+../BIOCTSRC/T_BIOC.MMP	manual
--- a/messagingfw/biomsgfw/BIOS/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BIOs.INF
-// 
-//
-
-PRJ_PLATFORMS
-
-
-PRJ_EXPORTS
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-../BIOSINC/BIOSMTM.H /epoc32/include/biosmtm.h
-#endif
-
-PRJ_MMPFILES
-group/BIOS.MMP
-
-PRJ_TESTMMPFILES
-../BIOSTSRC/T_BIOS.MMP	manual
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BIOS/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,30 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BIOs.INF
+// 
+//
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../BIOSINC/BIOSMTM.H /epoc32/include/biosmtm.h
+#endif
+
+PRJ_MMPFILES
+group/BIOS.MMP
+
+PRJ_TESTMMPFILES
+../BIOSTSRC/T_BIOS.MMP	manual
--- a/messagingfw/biomsgfw/BITS/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BITS.INF
-// 
-//
-
-PRJ_PLATFORMS
-
-PRJ_TESTMMPFILES
-BITS.MMP
-../BITSTSRC/TSBIOGEN.MMP
-../BITSTSRC/TCBIOGEN.MMP
-
-PRJ_TESTEXPORTS
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-../BITSINC/BioTestUtils.h		/epoc32/include/biotestutils.h
-#endif
-../BITSINC/BioTestUtils.INL	SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(biotestutils.inl)
-../BITSINC/bitsids.h		SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bitsids.h)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BITS/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,30 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BITS.INF
+// 
+//
+
+PRJ_PLATFORMS
+
+PRJ_TESTMMPFILES
+BITS.MMP
+../BITSTSRC/TSBIOGEN.MMP
+../BITSTSRC/TCBIOGEN.MMP
+
+PRJ_TESTEXPORTS
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../BITSINC/BioTestUtils.h		/epoc32/include/biotestutils.h
+#endif
+../BITSINC/BioTestUtils.INL	SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(biotestutils.inl)
+../BITSINC/bitsids.h		SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bitsids.h)
--- a/messagingfw/biomsgfw/BIUT/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BIUT.INF
-// 
-//
-
-PRJ_PLATFORMS
-
-
-PRJ_EXPORTS
-../BIUTINC/REGPSDLL.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(regpsdll.h)
-../BIUTINC/REGPSDLL.INL SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(regpsdll.inl)
-../BIUTINC/BSP.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bsp.h)
-../BIUTINC/BSP.INL SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(bsp.inl)
-../BIUTINC/BIOUIDS.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(biouids.h)
-../BIUTINC/IpAddr.h SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(ipaddr.h)
-../BIUTINC/CBioAsyncWaiter.h SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(cbioasyncwaiter.h)
-../BIUTINC/biomessageuids.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(biomessageuids.h)
-#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-../BIUTINC/tmsvbioinfo.h /epoc32/include/tmsvbioinfo.h
-#endif
-#endif
-
-PRJ_MMPFILES
-group/BIUT.MMP
-
-PRJ_TESTMMPFILES
-//../Biuttsrc/t_biomsg.mmp
-../BIUTTSRC/t_ipaddr.mmp
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BIUT/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,42 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BIUT.INF
+// 
+//
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+../BIUTINC/REGPSDLL.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(regpsdll.h)
+../BIUTINC/REGPSDLL.INL SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(regpsdll.inl)
+../BIUTINC/BSP.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(bsp.h)
+../BIUTINC/BSP.INL SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(bsp.inl)
+../BIUTINC/BIOUIDS.H SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(biouids.h)
+../BIUTINC/IpAddr.h SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(ipaddr.h)
+../BIUTINC/CBioAsyncWaiter.h SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(cbioasyncwaiter.h)
+../BIUTINC/biomessageuids.h SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(biomessageuids.h)
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../BIUTINC/tmsvbioinfo.h /epoc32/include/tmsvbioinfo.h
+#endif
+#endif
+
+PRJ_MMPFILES
+group/BIUT.MMP
+
+PRJ_TESTMMPFILES
+//../Biuttsrc/t_biomsg.mmp
+../BIUTTSRC/t_ipaddr.mmp
+
--- a/messagingfw/biomsgfw/BioWatchers/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BioWatchers
-// 
-//
-
-PRJ_PLATFORMS
-
-
-PRJ_EXPORTS
-Inc/csmsclass0base.h	 SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(csmsclass0base.h)
-
-PRJ_MMPFILES
-BioWatcher.mmp
-NbsWatcher.mmp
-WapWatcher.mmp
-class0sms.mmp
-
-PRJ_TESTMMPFILES
-///BioMsg/BioWatchers/test/T_WapWatcher.mmp	manual
-///BioMsg/BioWatchers/test/T_NbsWatcher.mmp	manual
-
-PRJ_TESTEXPORTS
-// This is used by SMCM/test/t_smssendrecv Test Harness That both sends and recieves
-Test/sendrecv.script	/epoc32/wins/c/test/sms/sendrecv.script
-Test/sendrecv.script	/epoc32/winscw/c/test/sms/sendrecv.script
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BioWatchers/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,37 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BioWatchers
+// 
+//
+
+PRJ_PLATFORMS
+
+
+PRJ_EXPORTS
+Inc/csmsclass0base.h	 SYMBIAN_MW_LAYER_PUBLIC_EXPORT_PATH(csmsclass0base.h)
+
+PRJ_MMPFILES
+BioWatcher.mmp
+NbsWatcher.mmp
+WapWatcher.mmp
+class0sms.mmp
+
+PRJ_TESTMMPFILES
+///BioMsg/BioWatchers/test/T_WapWatcher.mmp	manual
+///BioMsg/BioWatchers/test/T_NbsWatcher.mmp	manual
+
+PRJ_TESTEXPORTS
+// This is used by SMCM/test/t_smssendrecv Test Harness That both sends and recieves
+Test/sendrecv.script	/epoc32/wins/c/test/sms/sendrecv.script
+Test/sendrecv.script	/epoc32/winscw/c/test/sms/sendrecv.script
--- a/messagingfw/biomsgfw/Rom/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +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 "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-PRJ_EXPORTS
-
-gtbioutils.iby /epoc32/rom/include/gtbioutils.iby
-gtbioengmtm.iby /epoc32/rom/include/gtbioengmtm.iby
-bionbswatcher.iby /epoc32/rom/include/bionbswatcher.iby
-bioclass0smsplugin.iby /epoc32/rom/include/bioclass0smsplugin.iby
-biowapwatcher.iby /epoc32/rom/include/biowapwatcher.iby
-bioparsers.iby /epoc32/rom/include/bioparsers.iby
-GtBioMessaging.iby /epoc32/rom/include/gtbiomessaging.iby
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/Rom/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,26 @@
+/*
+* 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 "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+PRJ_EXPORTS
+
+gtbioutils.iby /epoc32/rom/include/gtbioutils.iby
+gtbioengmtm.iby /epoc32/rom/include/gtbioengmtm.iby
+bionbswatcher.iby /epoc32/rom/include/bionbswatcher.iby
+bioclass0smsplugin.iby /epoc32/rom/include/bioclass0smsplugin.iby
+biowapwatcher.iby /epoc32/rom/include/biowapwatcher.iby
+bioparsers.iby /epoc32/rom/include/bioparsers.iby
+GtBioMessaging.iby /epoc32/rom/include/gtbiomessaging.iby
--- a/messagingfw/biomsgfw/T_BIOMSG/Group/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,845 +0,0 @@
-// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-PRJ_PLATFORMS
-    DEFAULT
-
-PRJ_EXPORTS
-
-PRJ_TESTEXPORTS
-
-
-//
-// WINS
-// ====
-//
-
-
-//
-// Main script file
-// ================
-../Scripts/script.txt			/epoc32/wins/c/msgtest/biomsg/scripts/script.txt
-
-
-//
-// CBCP test files
-// ===============
-
-// CBCP test data
-// --------------
-../Data/cbcp/cbcp1.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp1.txt
-../Data/cbcp/cbcp2.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp2.txt
-../Data/cbcp/cbcp3.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp3.txt
-../Data/cbcp/cbcp4.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp4.txt
-../Data/cbcp/cbcp5.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp5.txt
-../Data/cbcp/cbcp6.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp6.txt
-
-// CBCP test scripts
-// -----------------
-../Scripts/cbcp/cbcp_test_script.txt	/epoc32/wins/c/msgtest/biomsg/scripts/cbcp/cbcp_test_script.txt
-
-
-//
-// ENP test files
-// ==============
-
-// ENP test data
-// -------------
-../Data/enp/enp1.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp1.txt
-../Data/enp/enp2.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp2.txt
-../Data/enp/enp3.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp3.txt
-../Data/enp/enp4.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp4.txt
-../Data/enp/enp5.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp5.txt
-../Data/enp/enp6.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp6.txt
-../Data/enp/enp7.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp7.txt
-
-
-// ENP test scripts
-// ----------------
-../Scripts/enp/enp_test_script.txt	/epoc32/wins/c/msgtest/biomsg/scripts/enp/enp_test_script.txt
-
-
-//
-// GFP test files
-// ==============
-
-// GFP test data
-// -------------
-../Data/gfp/oplogo1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo1.txt
-../Data/gfp/oplogo2.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo2.txt
-../Data/gfp/oplogo3.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo3.txt
-../Data/gfp/oplogo4.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo4.txt
-../Data/gfp/oplogo5.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo5.txt
-../Data/gfp/oplogo6.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo6.txt
-../Data/gfp/rtone1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone1.txt
-../Data/gfp/rtone2.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone2.txt
-../Data/gfp/rtone3.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone3.txt
-../Data/gfp/rtone4.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone4.txt
-../Data/gfp/rtone5.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone5.txt
-../Data/gfp/rtone6.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone6.txt
-../Data/gfp/rtone7.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone7.txt
-../Data/gfp/vcal1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/vcal1.txt
-../Data/gfp/vcard1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/vcard1.txt
-
-// GFP test scripts
-// ----------------
-../Scripts/gfp/gfp_test_script.txt	/epoc32/wins/c/msgtest/biomsg/scripts/gfp/gfp_test_script.txt
-
-
-//
-// IACP test files
-// ===============
-
-// IACP test data
-// --------------
-../Data/iacp/iacp_all_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_01.txt
-../Data/iacp/iacp_all_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_02.txt
-../Data/iacp/iacp_all_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_03.txt
-../Data/iacp/iacp_all_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_04.txt
-../Data/iacp/iacp_all_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_05.txt
-../Data/iacp/iacp_hotlist_01.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_01.txt
-../Data/iacp/iacp_hotlist_02.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_02.txt
-../Data/iacp/iacp_hotlist_03.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_03.txt
-../Data/iacp/iacp_hotlist_04.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_04.txt
-../Data/iacp/iacp_hotlist_05.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_05.txt
-../Data/iacp/iacp_hotlist_06.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_06.txt
-../Data/iacp/iacp_hotlist_07.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_07.txt
-../Data/iacp/iacp_hotlist_08.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_08.txt
-../Data/iacp/iacp_hotlist_09.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_09.txt
-../Data/iacp/iacp_hotlist_10.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_10.txt
-../Data/iacp/iacp_hotlist_11.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_11.txt
-../Data/iacp/iacp_iap_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_01.txt
-../Data/iacp/iacp_iap_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_02.txt
-../Data/iacp/iacp_iap_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_03.txt
-../Data/iacp/iacp_iap_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_04.txt
-../Data/iacp/iacp_iap_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_05.txt
-../Data/iacp/iacp_iap_06.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_06.txt
-../Data/iacp/iacp_iap_07.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_07.txt
-../Data/iacp/iacp_iap_08.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_08.txt
-../Data/iacp/iacp_iap_09.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_09.txt
-../Data/iacp/iacp_mail_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_01.txt
-../Data/iacp/iacp_mail_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_02.txt
-../Data/iacp/iacp_mail_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_03.txt
-../Data/iacp/iacp_mail_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_04.txt
-../Data/iacp/iacp_mail_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_05.txt
-../Data/iacp/iacp_mail_06.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_06.txt
-../Data/iacp/iacp_mail_07.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_07.txt
-../Data/iacp/iacp_script_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_01.txt
-../Data/iacp/iacp_script_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_02.txt
-../Data/iacp/iacp_script_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_03.txt
-../Data/iacp/iacp_script_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_04.txt
-../Data/iacp/iacp_script_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_05.txt
-../Data/iacp/iacp_script_06.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_06.txt
-../Data/iacp/iacp_sms_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_01.txt
-../Data/iacp/iacp_sms_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_02.txt
-../Data/iacp/iacp_sms_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_03.txt
-../Data/iacp/iacp_sms_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_04.txt
-../Data/iacp/iacp_sms_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_05.txt
-../Data/iacp/iacp_gprs_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_gprs_01.txt
-../Data/iacp/iacp_gprs_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_gprs_02.txt
-../Data/iacp/iacp_telephone_01.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_telephone_01.txt
-../Data/iacp/iacp_telephone_02.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_telephone_02.txt
-
-// IACP test scripts
-// -----------------
-../Scripts/iacp/iacp_script_all_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_01.txt
-../Scripts/iacp/iacp_script_all_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_02.txt
-../Scripts/iacp/iacp_script_all_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_03.txt
-../Scripts/iacp/iacp_script_all_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_04.txt
-../Scripts/iacp/iacp_script_all_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_05.txt
-../Scripts/iacp/iacp_script_hotlist_01.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_01.txt
-../Scripts/iacp/iacp_script_hotlist_02.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_02.txt
-../Scripts/iacp/iacp_script_hotlist_03.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_03.txt
-../Scripts/iacp/iacp_script_hotlist_04.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_04.txt
-../Scripts/iacp/iacp_script_hotlist_05.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_05.txt
-../Scripts/iacp/iacp_script_hotlist_06.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_06.txt
-../Scripts/iacp/iacp_script_hotlist_07.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_07.txt
-../Scripts/iacp/iacp_script_hotlist_08.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_08.txt
-../Scripts/iacp/iacp_script_hotlist_09.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_09.txt
-../Scripts/iacp/iacp_script_hotlist_10.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_10.txt
-../Scripts/iacp/iacp_script_hotlist_11.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_11.txt
-../Scripts/iacp/iacp_script_iap_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_01.txt
-../Scripts/iacp/iacp_script_iap_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_02.txt
-../Scripts/iacp/iacp_script_iap_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_03.txt
-../Scripts/iacp/iacp_script_iap_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_04.txt
-../Scripts/iacp/iacp_script_iap_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_05.txt
-../Scripts/iacp/iacp_script_iap_06.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_06.txt
-../Scripts/iacp/iacp_script_iap_07.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_07.txt
-../Scripts/iacp/iacp_script_iap_08.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_08.txt
-../Scripts/iacp/iacp_script_iap_09.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_09.txt
-../Scripts/iacp/iacp_script_mail_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_01.txt
-../Scripts/iacp/iacp_script_mail_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_02.txt
-../Scripts/iacp/iacp_script_mail_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_03.txt
-../Scripts/iacp/iacp_script_mail_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_04.txt
-../Scripts/iacp/iacp_script_mail_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_05.txt
-../Scripts/iacp/iacp_script_mail_06.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_06.txt
-../Scripts/iacp/iacp_script_mail_07.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_07.txt
-../Scripts/iacp/iacp_script_script_01.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_01.txt
-../Scripts/iacp/iacp_script_script_02.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_02.txt
-../Scripts/iacp/iacp_script_script_03.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_03.txt
-../Scripts/iacp/iacp_script_script_04.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_04.txt
-../Scripts/iacp/iacp_script_script_05.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_05.txt
-../Scripts/iacp/iacp_script_script_06.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_06.txt
-../Scripts/iacp/iacp_script_sms_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_01.txt
-../Scripts/iacp/iacp_script_sms_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_02.txt
-../Scripts/iacp/iacp_script_sms_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_03.txt
-../Scripts/iacp/iacp_script_sms_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_04.txt
-../Scripts/iacp/iacp_script_sms_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_05.txt
-../Scripts/iacp/iacp_script_gprs_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_01.txt
-../Scripts/iacp/iacp_script_gprs_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_02.txt
-../Scripts/iacp/iacp_script_telephone_01.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_01.txt
-../Scripts/iacp/iacp_script_telephone_02.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_02.txt
-
-
-//
-// WAPP test files
-// ===============
-
-// WAPP test data
-// --------------
-../Data/Wapp/wapp0001.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0001.bin
-../Data/Wapp/wapp0002.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0002.bin
-../Data/Wapp/wapp0003.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0003.bin
-../Data/Wapp/wapp0004.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0004.bin
-../Data/Wapp/wapp0005.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0005.bin
-../Data/Wapp/wapp0006.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0006.bin
-../Data/Wapp/wapp0007.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0007.bin
-../Data/Wapp/wapp0008.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0008.bin
-../Data/Wapp/wapp0009.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0009.bin
-../Data/Wapp/wapp0010.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0010.bin
-../Data/Wapp/wapp0011.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0011.bin
-../Data/Wapp/wapp0012.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0012.bin
-../Data/Wapp/wapp0013.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0013.bin
-../Data/Wapp/wapp0014.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0014.bin
-../Data/Wapp/wapp0015.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0015.bin
-../Data/Wapp/wapp0016.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0016.bin
-../Data/Wapp/wapp0017.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0017.bin
-../Data/Wapp/wapp0018.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0018.bin
-../Data/Wapp/wapp0019.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0019.bin
-../Data/Wapp/wapp0020.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0020.bin
-../Data/Wapp/wapp0021.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0021.bin
-../Data/Wapp/wapp0022.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0022.bin
-../Data/Wapp/wapp0023.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0023.bin
-../Data/Wapp/wapp0024.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0024.bin
-../Data/Wapp/wapp0025.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0025.bin
-../Data/Wapp/wapp0026.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0026.bin
-../Data/Wapp/wapp0027.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0027.bin
-../Data/Wapp/wapp0028.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0028.bin
-../Data/Wapp/wapp0029.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0029.bin
-../Data/Wapp/wapp0030.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0030.bin
-../Data/Wapp/wapp0031.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0031.bin
-../Data/Wapp/wapp0032.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0032.bin
-../Data/Wapp/wapp0033.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0033.bin
-../Data/Wapp/wapp0034.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0034.bin
-../Data/Wapp/wapp0035.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0035.bin
-../Data/Wapp/wapp0036.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0036.bin
-../Data/Wapp/wapp0037.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0037.bin
-../Data/Wapp/wapp0038.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0038.bin
-../Data/Wapp/wapp0039.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0039.bin
-../Data/Wapp/wapp0040.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0040.bin
-../Data/Wapp/wapp0041.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0041.bin
-../Data/Wapp/wapp0042.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0042.bin
-../Data/Wapp/wapp0043.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0043.bin
-../Data/Wapp/wapp0044.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0044.bin
-../Data/Wapp/wapp0045.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0045.bin
-../Data/Wapp/wapp0046.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0046.bin
-../Data/Wapp/wapp0047.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0047.bin
-../Data/Wapp/wapp0048.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0048.bin
-../Data/Wapp/wapp0049.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0049.bin
-../Data/Wapp/wapp0050.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0050.bin
-../Data/Wapp/wapp0051.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0051.bin
-../Data/Wapp/wapp0052.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0052.bin
-../Data/Wapp/wapp0053.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0053.bin
-../Data/Wapp/wapp0054.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0054.bin
-../Data/Wapp/wapp0055.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0055.bin
-../Data/Wapp/wapp0056.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0056.bin
-../Data/Wapp/wapp0057.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0057.bin
-../Data/Wapp/wapp0058.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0058.bin
-../Data/Wapp/wapp0059.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0059.bin
-../Data/Wapp/wapp0060.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0060.bin
-../Data/Wapp/wapp0061.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0061.bin
-../Data/Wapp/wapp0062.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0062.bin
-../Data/Wapp/wapp0063.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0063.bin
-../Data/Wapp/wapp0064.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0064.bin
-../Data/Wapp/wapp0065.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0065.bin
-../Data/Wapp/wapp0066.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0066.bin
-../Data/Wapp/wapp0067.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0067.bin
-../Data/Wapp/wapp0068.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0068.bin
-../Data/Wapp/wapp0069.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0069.bin
-../Data/Wapp/wapp0070.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0070.bin
-../Data/Wapp/wapp0071.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0071.bin
-../Data/Wapp/wapp0072.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0072.bin
-../Data/Wapp/wapp0073.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0073.bin
-../Data/Wapp/wapp0074.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0074.bin
-../Data/Wapp/wapp0075.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0075.bin
-../Data/Wapp/wapp0076.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0076.bin
-../Data/Wapp/wapp0077.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0077.bin
-../Data/Wapp/wapp0078.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0078.bin
-../Data/Wapp/wapp0079.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0079.bin
-../Data/Wapp/wapp0080.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0080.bin
-../Data/Wapp/wapp0081.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0081.bin
-../Data/Wapp/wapp0082.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0082.bin
-../Data/Wapp/wapp0083.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0083.bin
-../Data/Wapp/wapp0084.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0084.bin
-../Data/Wapp/wapp0085.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0085.bin
-../Data/Wapp/wapp0086.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0086.bin
-../Data/Wapp/wapp0087.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0087.bin
-../Data/Wapp/wapp0088.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0088.bin
-../Data/Wapp/wapp0089.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0089.bin
-../Data/Wapp/wapp0090.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0090.bin
-../Data/Wapp/wapp0091.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0091.bin
-../Data/Wapp/wapp0092.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0092.bin
-../Data/Wapp/wapp0093.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0093.bin
-../Data/Wapp/wapp0094.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0094.bin
-../Data/Wapp/wapp0095.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0095.bin
-../Data/Wapp/wapp0096.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0096.bin
-../Data/Wapp/wapp0097.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0097.bin
-../Data/Wapp/wapp0098.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0098.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_unicode.bin					/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_unicode.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_1byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_2byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_4byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_5byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_6byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.bin			/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.bin			/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_end.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.bin			/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.bin
-
-// WAPP test scripts
-// -----------------
-../Scripts/Wapp/wapp0001.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0001.txt
-../Scripts/Wapp/wapp0002.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0002.txt
-../Scripts/Wapp/wapp0003.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0003.txt
-../Scripts/Wapp/wapp0004.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0004.txt
-../Scripts/Wapp/wapp0005.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0005.txt
-../Scripts/Wapp/wapp0006.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0006.txt
-../Scripts/Wapp/wapp0007.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0007.txt
-../Scripts/Wapp/wapp0008.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0008.txt
-../Scripts/Wapp/wapp0009.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0009.txt
-../Scripts/Wapp/wapp0010.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0010.txt
-../Scripts/Wapp/wapp0011.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0011.txt
-../Scripts/Wapp/wapp0012.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0012.txt
-../Scripts/Wapp/wapp0013.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0013.txt
-../Scripts/Wapp/wapp0014.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0014.txt
-../Scripts/Wapp/wapp0015.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0015.txt
-../Scripts/Wapp/wapp0016.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0016.txt
-../Scripts/Wapp/wapp0017.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0017.txt
-../Scripts/Wapp/wapp0018.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0018.txt
-../Scripts/Wapp/wapp0019.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0019.txt
-../Scripts/Wapp/wapp0020.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0020.txt
-../Scripts/Wapp/wapp0021.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0021.txt
-../Scripts/Wapp/wapp0022.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0022.txt
-../Scripts/Wapp/wapp0023.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0023.txt
-../Scripts/Wapp/wapp0024.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0024.txt
-../Scripts/Wapp/wapp0025.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0025.txt
-../Scripts/Wapp/wapp0026.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0026.txt
-../Scripts/Wapp/wapp0027.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0027.txt
-../Scripts/Wapp/wapp0028.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0028.txt
-../Scripts/Wapp/wapp0029.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0029.txt
-../Scripts/Wapp/wapp0030.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0030.txt
-../Scripts/Wapp/wapp0031.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0031.txt
-../Scripts/Wapp/wapp0032.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0032.txt
-../Scripts/Wapp/wapp0033.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0033.txt
-../Scripts/Wapp/wapp0034.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0034.txt
-../Scripts/Wapp/wapp0035.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0035.txt
-../Scripts/Wapp/wapp0036.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0036.txt
-../Scripts/Wapp/wapp0037.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0037.txt
-../Scripts/Wapp/wapp0038.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0038.txt
-../Scripts/Wapp/wapp0039.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0039.txt
-../Scripts/Wapp/wapp0040.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0040.txt
-../Scripts/Wapp/wapp0041.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0041.txt
-../Scripts/Wapp/wapp0042.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0042.txt
-../Scripts/Wapp/wapp0043.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0043.txt
-../Scripts/Wapp/wapp0044.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0044.txt
-../Scripts/Wapp/wapp0045.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0045.txt
-../Scripts/Wapp/wapp0046.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0046.txt
-../Scripts/Wapp/wapp0047.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0047.txt
-../Scripts/Wapp/wapp0048.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0048.txt
-../Scripts/Wapp/wapp0049.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0049.txt
-../Scripts/Wapp/wapp0050.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0050.txt
-../Scripts/Wapp/wapp0051.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0051.txt
-../Scripts/Wapp/wapp0052.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0052.txt
-../Scripts/Wapp/wapp0053.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0053.txt
-../Scripts/Wapp/wapp0054.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0054.txt
-../Scripts/Wapp/wapp0055.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0055.txt
-../Scripts/Wapp/wapp0056.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0056.txt
-../Scripts/Wapp/wapp0057.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0057.txt
-../Scripts/Wapp/wapp0058.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0058.txt
-../Scripts/Wapp/wapp0059.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0059.txt
-../Scripts/Wapp/wapp0060.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0060.txt
-../Scripts/Wapp/wapp0061.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0061.txt
-../Scripts/Wapp/wapp0062.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0062.txt
-../Scripts/Wapp/wapp0063.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0063.txt
-../Scripts/Wapp/wapp0064.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0064.txt
-../Scripts/Wapp/wapp0065.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0065.txt
-../Scripts/Wapp/wapp0066.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0066.txt
-../Scripts/Wapp/wapp0067.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0067.txt
-../Scripts/Wapp/wapp0068.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0068.txt
-../Scripts/Wapp/wapp0069.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0069.txt
-../Scripts/Wapp/wapp0070.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0070.txt
-../Scripts/Wapp/wapp0071.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0071.txt
-../Scripts/Wapp/wapp0072.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0072.txt
-../Scripts/Wapp/wapp0073.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0073.txt
-../Scripts/Wapp/wapp0074.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0074.txt
-../Scripts/Wapp/wapp0075.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0075.txt
-../Scripts/Wapp/wapp0076.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0076.txt
-../Scripts/Wapp/wapp0077.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0077.txt
-../Scripts/Wapp/wapp0078.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0078.txt
-../Scripts/Wapp/wapp0079.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0079.txt
-../Scripts/Wapp/wapp0080.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0080.txt
-../Scripts/Wapp/wapp0081.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0081.txt
-../Scripts/Wapp/wapp0082.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0082.txt
-../Scripts/Wapp/wapp0083.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0083.txt
-../Scripts/Wapp/wapp0084.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0084.txt
-../Scripts/Wapp/wapp0085.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0085.txt
-../Scripts/Wapp/wapp0086.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0086.txt
-../Scripts/Wapp/wapp0087.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0087.txt
-../Scripts/Wapp/wapp0088.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0088.txt
-../Scripts/Wapp/wapp0089.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0089.txt
-../Scripts/Wapp/wapp0090.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0090.txt
-../Scripts/Wapp/wapp0091.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0091.txt
-../Scripts/Wapp/wapp0092.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0092.txt
-../Scripts/Wapp/wapp0093.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0093.txt
-../Scripts/Wapp/wapp0094.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0094.txt
-../Scripts/Wapp/wapp0095.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0095.txt
-../Scripts/Wapp/wapp0096.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0096.txt
-../Scripts/Wapp/wapp0097.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0097.txt
-../Scripts/Wapp/wapp0098.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0098.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_unicode.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_unicode.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_1byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_2byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_4byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_5byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_6byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.txt		/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.txt			/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_end.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.txt		/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.txt
-
-
-
-//
-// WINSCW
-// ======
-//
-
-
-//
-// Main script file
-// ================
-../Scripts/script.txt			/epoc32/winscw/c/msgtest/biomsg/scripts/script.txt
-
-
-//
-// CBCP test files
-// ===============
-
-// CBCP test data
-// --------------
-../Data/cbcp/cbcp1.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp1.txt
-../Data/cbcp/cbcp2.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp2.txt
-../Data/cbcp/cbcp3.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp3.txt
-../Data/cbcp/cbcp4.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp4.txt
-../Data/cbcp/cbcp5.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp5.txt
-../Data/cbcp/cbcp6.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp6.txt
-
-
-// CBCP test scripts
-// -----------------
-../Scripts/cbcp/cbcp_test_script.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/cbcp/cbcp_test_script.txt
-
-//
-// ENP test files
-// ==============
-
-// ENP test data
-// -------------
-../Data/enp/enp1.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp1.txt
-../Data/enp/enp2.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp2.txt
-../Data/enp/enp3.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp3.txt
-../Data/enp/enp4.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp4.txt
-../Data/enp/enp5.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp5.txt
-../Data/enp/enp6.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp6.txt
-../Data/enp/enp7.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp7.txt
-
-// ENP test scripts
-// ----------------
-../Scripts/enp/enp_test_script.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/enp/enp_test_script.txt
-
-
-//
-// GFP test files
-// ==============
-
-// GFP test data
-// -------------
-../Data/gfp/oplogo1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo1.txt
-../Data/gfp/oplogo2.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo2.txt
-../Data/gfp/oplogo3.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo3.txt
-../Data/gfp/oplogo4.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo4.txt
-../Data/gfp/oplogo5.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo5.txt
-../Data/gfp/oplogo6.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo6.txt
-../Data/gfp/rtone1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone1.txt
-../Data/gfp/rtone2.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone2.txt
-../Data/gfp/rtone3.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone3.txt
-../Data/gfp/rtone4.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone4.txt
-../Data/gfp/rtone5.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone5.txt
-../Data/gfp/rtone6.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone6.txt
-../Data/gfp/rtone7.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone7.txt
-../Data/gfp/vcal1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/vcal1.txt
-../Data/gfp/vcard1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/vcard1.txt
-
-// GFP test scripts
-// ----------------
-../Scripts/gfp/gfp_test_script.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/gfp/gfp_test_script.txt
-
-
-//
-// IACP test files
-// ===============
-
-// IACP test data
-// --------------
-../Data/iacp/iacp_all_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_01.txt
-../Data/iacp/iacp_all_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_02.txt
-../Data/iacp/iacp_all_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_03.txt
-../Data/iacp/iacp_all_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_04.txt
-../Data/iacp/iacp_all_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_05.txt
-../Data/iacp/iacp_hotlist_01.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_01.txt
-../Data/iacp/iacp_hotlist_02.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_02.txt
-../Data/iacp/iacp_hotlist_03.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_03.txt
-../Data/iacp/iacp_hotlist_04.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_04.txt
-../Data/iacp/iacp_hotlist_05.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_05.txt
-../Data/iacp/iacp_hotlist_06.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_06.txt
-../Data/iacp/iacp_hotlist_07.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_07.txt
-../Data/iacp/iacp_hotlist_08.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_08.txt
-../Data/iacp/iacp_hotlist_09.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_09.txt
-../Data/iacp/iacp_hotlist_10.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_10.txt
-../Data/iacp/iacp_hotlist_11.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_11.txt
-../Data/iacp/iacp_iap_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_01.txt
-../Data/iacp/iacp_iap_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_02.txt
-../Data/iacp/iacp_iap_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_03.txt
-../Data/iacp/iacp_iap_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_04.txt
-../Data/iacp/iacp_iap_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_05.txt
-../Data/iacp/iacp_iap_06.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_06.txt
-../Data/iacp/iacp_iap_07.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_07.txt
-../Data/iacp/iacp_iap_08.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_08.txt
-../Data/iacp/iacp_iap_09.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_09.txt
-../Data/iacp/iacp_mail_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_01.txt
-../Data/iacp/iacp_mail_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_02.txt
-../Data/iacp/iacp_mail_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_03.txt
-../Data/iacp/iacp_mail_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_04.txt
-../Data/iacp/iacp_mail_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_05.txt
-../Data/iacp/iacp_mail_06.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_06.txt
-../Data/iacp/iacp_mail_07.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_07.txt
-../Data/iacp/iacp_script_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_01.txt
-../Data/iacp/iacp_script_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_02.txt
-../Data/iacp/iacp_script_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_03.txt
-../Data/iacp/iacp_script_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_04.txt
-../Data/iacp/iacp_script_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_05.txt
-../Data/iacp/iacp_script_06.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_06.txt
-../Data/iacp/iacp_sms_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_01.txt
-../Data/iacp/iacp_sms_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_02.txt
-../Data/iacp/iacp_sms_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_03.txt
-../Data/iacp/iacp_sms_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_04.txt
-../Data/iacp/iacp_sms_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_05.txt
-../Data/iacp/iacp_gprs_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_gprs_01.txt
-../Data/iacp/iacp_gprs_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_gprs_02.txt
-../Data/iacp/iacp_telephone_01.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_telephone_01.txt
-../Data/iacp/iacp_telephone_02.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_telephone_02.txt
-
-// IACP test scripts
-// -----------------
-../Scripts/iacp/iacp_script_all_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_01.txt
-../Scripts/iacp/iacp_script_all_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_02.txt
-../Scripts/iacp/iacp_script_all_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_03.txt
-../Scripts/iacp/iacp_script_all_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_04.txt
-../Scripts/iacp/iacp_script_all_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_05.txt
-../Scripts/iacp/iacp_script_hotlist_01.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_01.txt
-../Scripts/iacp/iacp_script_hotlist_02.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_02.txt
-../Scripts/iacp/iacp_script_hotlist_03.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_03.txt
-../Scripts/iacp/iacp_script_hotlist_04.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_04.txt
-../Scripts/iacp/iacp_script_hotlist_05.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_05.txt
-../Scripts/iacp/iacp_script_hotlist_06.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_06.txt
-../Scripts/iacp/iacp_script_hotlist_07.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_07.txt
-../Scripts/iacp/iacp_script_hotlist_08.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_08.txt
-../Scripts/iacp/iacp_script_hotlist_09.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_09.txt
-../Scripts/iacp/iacp_script_hotlist_10.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_10.txt
-../Scripts/iacp/iacp_script_hotlist_11.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_11.txt
-../Scripts/iacp/iacp_script_iap_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_01.txt
-../Scripts/iacp/iacp_script_iap_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_02.txt
-../Scripts/iacp/iacp_script_iap_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_03.txt
-../Scripts/iacp/iacp_script_iap_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_04.txt
-../Scripts/iacp/iacp_script_iap_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_05.txt
-../Scripts/iacp/iacp_script_iap_06.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_06.txt
-../Scripts/iacp/iacp_script_iap_07.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_07.txt
-../Scripts/iacp/iacp_script_iap_08.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_08.txt
-../Scripts/iacp/iacp_script_iap_09.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_09.txt
-../Scripts/iacp/iacp_script_mail_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_01.txt
-../Scripts/iacp/iacp_script_mail_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_02.txt
-../Scripts/iacp/iacp_script_mail_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_03.txt
-../Scripts/iacp/iacp_script_mail_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_04.txt
-../Scripts/iacp/iacp_script_mail_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_05.txt
-../Scripts/iacp/iacp_script_mail_06.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_06.txt
-../Scripts/iacp/iacp_script_mail_07.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_07.txt
-../Scripts/iacp/iacp_script_script_01.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_01.txt
-../Scripts/iacp/iacp_script_script_02.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_02.txt
-../Scripts/iacp/iacp_script_script_03.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_03.txt
-../Scripts/iacp/iacp_script_script_04.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_04.txt
-../Scripts/iacp/iacp_script_script_05.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_05.txt
-../Scripts/iacp/iacp_script_script_06.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_06.txt
-../Scripts/iacp/iacp_script_sms_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_01.txt
-../Scripts/iacp/iacp_script_sms_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_02.txt
-../Scripts/iacp/iacp_script_sms_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_03.txt
-../Scripts/iacp/iacp_script_sms_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_04.txt
-../Scripts/iacp/iacp_script_sms_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_05.txt
-../Scripts/iacp/iacp_script_gprs_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_01.txt
-../Scripts/iacp/iacp_script_gprs_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_02.txt
-../Scripts/iacp/iacp_script_telephone_01.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_01.txt
-../Scripts/iacp/iacp_script_telephone_02.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_02.txt
-
-
-//
-// WAPP test files
-// ===============
-
-// WAPP test data
-// --------------
-../Data/Wapp/wapp0001.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0001.bin
-../Data/Wapp/wapp0002.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0002.bin
-../Data/Wapp/wapp0003.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0003.bin
-../Data/Wapp/wapp0004.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0004.bin
-../Data/Wapp/wapp0005.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0005.bin
-../Data/Wapp/wapp0006.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0006.bin
-../Data/Wapp/wapp0007.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0007.bin
-../Data/Wapp/wapp0008.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0008.bin
-../Data/Wapp/wapp0009.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0009.bin
-../Data/Wapp/wapp0010.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0010.bin
-../Data/Wapp/wapp0011.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0011.bin
-../Data/Wapp/wapp0012.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0012.bin
-../Data/Wapp/wapp0013.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0013.bin
-../Data/Wapp/wapp0014.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0014.bin
-../Data/Wapp/wapp0015.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0015.bin
-../Data/Wapp/wapp0016.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0016.bin
-../Data/Wapp/wapp0017.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0017.bin
-../Data/Wapp/wapp0018.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0018.bin
-../Data/Wapp/wapp0019.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0019.bin
-../Data/Wapp/wapp0020.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0020.bin
-../Data/Wapp/wapp0021.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0021.bin
-../Data/Wapp/wapp0022.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0022.bin
-../Data/Wapp/wapp0023.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0023.bin
-../Data/Wapp/wapp0024.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0024.bin
-../Data/Wapp/wapp0025.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0025.bin
-../Data/Wapp/wapp0026.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0026.bin
-../Data/Wapp/wapp0027.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0027.bin
-../Data/Wapp/wapp0028.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0028.bin
-../Data/Wapp/wapp0029.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0029.bin
-../Data/Wapp/wapp0030.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0030.bin
-../Data/Wapp/wapp0031.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0031.bin
-../Data/Wapp/wapp0032.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0032.bin
-../Data/Wapp/wapp0033.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0033.bin
-../Data/Wapp/wapp0034.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0034.bin
-../Data/Wapp/wapp0035.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0035.bin
-../Data/Wapp/wapp0036.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0036.bin
-../Data/Wapp/wapp0037.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0037.bin
-../Data/Wapp/wapp0038.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0038.bin
-../Data/Wapp/wapp0039.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0039.bin
-../Data/Wapp/wapp0040.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0040.bin
-../Data/Wapp/wapp0041.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0041.bin
-../Data/Wapp/wapp0042.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0042.bin
-../Data/Wapp/wapp0043.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0043.bin
-../Data/Wapp/wapp0044.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0044.bin
-../Data/Wapp/wapp0045.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0045.bin
-../Data/Wapp/wapp0046.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0046.bin
-../Data/Wapp/wapp0047.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0047.bin
-../Data/Wapp/wapp0048.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0048.bin
-../Data/Wapp/wapp0049.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0049.bin
-../Data/Wapp/wapp0050.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0050.bin
-../Data/Wapp/wapp0051.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0051.bin
-../Data/Wapp/wapp0052.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0052.bin
-../Data/Wapp/wapp0053.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0053.bin
-../Data/Wapp/wapp0054.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0054.bin
-../Data/Wapp/wapp0055.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0055.bin
-../Data/Wapp/wapp0056.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0056.bin
-../Data/Wapp/wapp0057.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0057.bin
-../Data/Wapp/wapp0058.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0058.bin
-../Data/Wapp/wapp0059.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0059.bin
-../Data/Wapp/wapp0060.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0060.bin
-../Data/Wapp/wapp0061.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0061.bin
-../Data/Wapp/wapp0062.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0062.bin
-../Data/Wapp/wapp0063.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0063.bin
-../Data/Wapp/wapp0064.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0064.bin
-../Data/Wapp/wapp0065.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0065.bin
-../Data/Wapp/wapp0066.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0066.bin
-../Data/Wapp/wapp0067.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0067.bin
-../Data/Wapp/wapp0068.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0068.bin
-../Data/Wapp/wapp0069.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0069.bin
-../Data/Wapp/wapp0070.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0070.bin
-../Data/Wapp/wapp0071.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0071.bin
-../Data/Wapp/wapp0072.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0072.bin
-../Data/Wapp/wapp0073.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0073.bin
-../Data/Wapp/wapp0074.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0074.bin
-../Data/Wapp/wapp0075.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0075.bin
-../Data/Wapp/wapp0076.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0076.bin
-../Data/Wapp/wapp0077.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0077.bin
-../Data/Wapp/wapp0078.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0078.bin
-../Data/Wapp/wapp0079.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0079.bin
-../Data/Wapp/wapp0080.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0080.bin
-../Data/Wapp/wapp0081.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0081.bin
-../Data/Wapp/wapp0082.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0082.bin
-../Data/Wapp/wapp0083.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0083.bin
-../Data/Wapp/wapp0084.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0084.bin
-../Data/Wapp/wapp0085.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0085.bin
-../Data/Wapp/wapp0086.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0086.bin
-../Data/Wapp/wapp0087.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0087.bin
-../Data/Wapp/wapp0088.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0088.bin
-../Data/Wapp/wapp0089.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0089.bin
-../Data/Wapp/wapp0090.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0090.bin
-../Data/Wapp/wapp0091.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0091.bin
-../Data/Wapp/wapp0092.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0092.bin
-../Data/Wapp/wapp0093.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0093.bin
-../Data/Wapp/wapp0094.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0094.bin
-../Data/Wapp/wapp0095.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0095.bin
-../Data/Wapp/wapp0096.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0096.bin
-../Data/Wapp/wapp0097.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0097.bin
-../Data/Wapp/wapp0098.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0098.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_unicode.bin					/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_unicode.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_1byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_2byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_4byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_5byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_6byte.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.bin			/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.bin			/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_end.bin
-../Data/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.bin			/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.bin
-
-// WAPP test scripts
-// -----------------
-../Scripts/Wapp/wapp0001.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0001.txt
-../Scripts/Wapp/wapp0002.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0002.txt
-../Scripts/Wapp/wapp0003.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0003.txt
-../Scripts/Wapp/wapp0004.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0004.txt
-../Scripts/Wapp/wapp0005.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0005.txt
-../Scripts/Wapp/wapp0006.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0006.txt
-../Scripts/Wapp/wapp0007.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0007.txt
-../Scripts/Wapp/wapp0008.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0008.txt
-../Scripts/Wapp/wapp0009.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0009.txt
-../Scripts/Wapp/wapp0010.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0010.txt
-../Scripts/Wapp/wapp0011.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0011.txt
-../Scripts/Wapp/wapp0012.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0012.txt
-../Scripts/Wapp/wapp0013.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0013.txt
-../Scripts/Wapp/wapp0014.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0014.txt
-../Scripts/Wapp/wapp0015.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0015.txt
-../Scripts/Wapp/wapp0016.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0016.txt
-../Scripts/Wapp/wapp0017.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0017.txt
-../Scripts/Wapp/wapp0018.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0018.txt
-../Scripts/Wapp/wapp0019.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0019.txt
-../Scripts/Wapp/wapp0020.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0020.txt
-../Scripts/Wapp/wapp0021.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0021.txt
-../Scripts/Wapp/wapp0022.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0022.txt
-../Scripts/Wapp/wapp0023.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0023.txt
-../Scripts/Wapp/wapp0024.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0024.txt
-../Scripts/Wapp/wapp0025.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0025.txt
-../Scripts/Wapp/wapp0026.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0026.txt
-../Scripts/Wapp/wapp0027.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0027.txt
-../Scripts/Wapp/wapp0028.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0028.txt
-../Scripts/Wapp/wapp0029.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0029.txt
-../Scripts/Wapp/wapp0030.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0030.txt
-../Scripts/Wapp/wapp0031.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0031.txt
-../Scripts/Wapp/wapp0032.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0032.txt
-../Scripts/Wapp/wapp0033.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0033.txt
-../Scripts/Wapp/wapp0034.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0034.txt
-../Scripts/Wapp/wapp0035.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0035.txt
-../Scripts/Wapp/wapp0036.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0036.txt
-../Scripts/Wapp/wapp0037.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0037.txt
-../Scripts/Wapp/wapp0038.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0038.txt
-../Scripts/Wapp/wapp0039.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0039.txt
-../Scripts/Wapp/wapp0040.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0040.txt
-../Scripts/Wapp/wapp0041.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0041.txt
-../Scripts/Wapp/wapp0042.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0042.txt
-../Scripts/Wapp/wapp0043.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0043.txt
-../Scripts/Wapp/wapp0044.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0044.txt
-../Scripts/Wapp/wapp0045.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0045.txt
-../Scripts/Wapp/wapp0046.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0046.txt
-../Scripts/Wapp/wapp0047.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0047.txt
-../Scripts/Wapp/wapp0048.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0048.txt
-../Scripts/Wapp/wapp0049.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0049.txt
-../Scripts/Wapp/wapp0050.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0050.txt
-../Scripts/Wapp/wapp0051.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0051.txt
-../Scripts/Wapp/wapp0052.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0052.txt
-../Scripts/Wapp/wapp0053.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0053.txt
-../Scripts/Wapp/wapp0054.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0054.txt
-../Scripts/Wapp/wapp0055.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0055.txt
-../Scripts/Wapp/wapp0056.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0056.txt
-../Scripts/Wapp/wapp0057.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0057.txt
-../Scripts/Wapp/wapp0058.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0058.txt
-../Scripts/Wapp/wapp0059.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0059.txt
-../Scripts/Wapp/wapp0060.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0060.txt
-../Scripts/Wapp/wapp0061.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0061.txt
-../Scripts/Wapp/wapp0062.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0062.txt
-../Scripts/Wapp/wapp0063.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0063.txt
-../Scripts/Wapp/wapp0064.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0064.txt
-../Scripts/Wapp/wapp0065.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0065.txt
-../Scripts/Wapp/wapp0066.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0066.txt
-../Scripts/Wapp/wapp0067.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0067.txt
-../Scripts/Wapp/wapp0068.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0068.txt
-../Scripts/Wapp/wapp0069.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0069.txt
-../Scripts/Wapp/wapp0070.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0070.txt
-../Scripts/Wapp/wapp0071.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0071.txt
-../Scripts/Wapp/wapp0072.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0072.txt
-../Scripts/Wapp/wapp0073.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0073.txt
-../Scripts/Wapp/wapp0074.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0074.txt
-../Scripts/Wapp/wapp0075.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0075.txt
-../Scripts/Wapp/wapp0076.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0076.txt
-../Scripts/Wapp/wapp0077.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0077.txt
-../Scripts/Wapp/wapp0078.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0078.txt
-../Scripts/Wapp/wapp0079.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0079.txt
-../Scripts/Wapp/wapp0080.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0080.txt
-../Scripts/Wapp/wapp0081.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0081.txt
-../Scripts/Wapp/wapp0082.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0082.txt
-../Scripts/Wapp/wapp0083.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0083.txt
-../Scripts/Wapp/wapp0084.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0084.txt
-../Scripts/Wapp/wapp0085.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0085.txt
-../Scripts/Wapp/wapp0086.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0086.txt
-../Scripts/Wapp/wapp0087.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0087.txt
-../Scripts/Wapp/wapp0088.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0088.txt
-../Scripts/Wapp/wapp0089.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0089.txt
-../Scripts/Wapp/wapp0090.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0090.txt
-../Scripts/Wapp/wapp0091.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0091.txt
-../Scripts/Wapp/wapp0092.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0092.txt
-../Scripts/Wapp/wapp0093.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0093.txt
-../Scripts/Wapp/wapp0094.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0094.txt
-../Scripts/Wapp/wapp0095.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0095.txt
-../Scripts/Wapp/wapp0096.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0096.txt
-../Scripts/Wapp/wapp0097.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0097.txt
-../Scripts/Wapp/wapp0098.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0098.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_unicode.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_unicode.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_1byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_2byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_4byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_5byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_6byte.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.txt			/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_end.txt
-../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.txt
-
-
-PRJ_MMPFILES
-
-PRJ_TESTMMPFILES
-t_biomsg.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/T_BIOMSG/Group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,845 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRJ_PLATFORMS
+    DEFAULT
+
+PRJ_EXPORTS
+
+PRJ_TESTEXPORTS
+
+
+//
+// WINS
+// ====
+//
+
+
+//
+// Main script file
+// ================
+../Scripts/script.txt			/epoc32/wins/c/msgtest/biomsg/scripts/script.txt
+
+
+//
+// CBCP test files
+// ===============
+
+// CBCP test data
+// --------------
+../Data/cbcp/cbcp1.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp1.txt
+../Data/cbcp/cbcp2.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp2.txt
+../Data/cbcp/cbcp3.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp3.txt
+../Data/cbcp/cbcp4.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp4.txt
+../Data/cbcp/cbcp5.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp5.txt
+../Data/cbcp/cbcp6.txt					/epoc32/wins/c/msgtest/biomsg/data/cbcp/cbcp6.txt
+
+// CBCP test scripts
+// -----------------
+../Scripts/cbcp/cbcp_test_script.txt	/epoc32/wins/c/msgtest/biomsg/scripts/cbcp/cbcp_test_script.txt
+
+
+//
+// ENP test files
+// ==============
+
+// ENP test data
+// -------------
+../Data/enp/enp1.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp1.txt
+../Data/enp/enp2.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp2.txt
+../Data/enp/enp3.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp3.txt
+../Data/enp/enp4.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp4.txt
+../Data/enp/enp5.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp5.txt
+../Data/enp/enp6.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp6.txt
+../Data/enp/enp7.txt				/epoc32/wins/c/msgtest/biomsg/data/enp/enp7.txt
+
+
+// ENP test scripts
+// ----------------
+../Scripts/enp/enp_test_script.txt	/epoc32/wins/c/msgtest/biomsg/scripts/enp/enp_test_script.txt
+
+
+//
+// GFP test files
+// ==============
+
+// GFP test data
+// -------------
+../Data/gfp/oplogo1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo1.txt
+../Data/gfp/oplogo2.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo2.txt
+../Data/gfp/oplogo3.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo3.txt
+../Data/gfp/oplogo4.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo4.txt
+../Data/gfp/oplogo5.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo5.txt
+../Data/gfp/oplogo6.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/oplogo6.txt
+../Data/gfp/rtone1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone1.txt
+../Data/gfp/rtone2.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone2.txt
+../Data/gfp/rtone3.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone3.txt
+../Data/gfp/rtone4.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone4.txt
+../Data/gfp/rtone5.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone5.txt
+../Data/gfp/rtone6.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone6.txt
+../Data/gfp/rtone7.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/rtone7.txt
+../Data/gfp/vcal1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/vcal1.txt
+../Data/gfp/vcard1.txt				/epoc32/wins/c/msgtest/biomsg/data/gfp/vcard1.txt
+
+// GFP test scripts
+// ----------------
+../Scripts/gfp/gfp_test_script.txt	/epoc32/wins/c/msgtest/biomsg/scripts/gfp/gfp_test_script.txt
+
+
+//
+// IACP test files
+// ===============
+
+// IACP test data
+// --------------
+../Data/iacp/iacp_all_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_01.txt
+../Data/iacp/iacp_all_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_02.txt
+../Data/iacp/iacp_all_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_03.txt
+../Data/iacp/iacp_all_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_04.txt
+../Data/iacp/iacp_all_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_all_05.txt
+../Data/iacp/iacp_hotlist_01.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_01.txt
+../Data/iacp/iacp_hotlist_02.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_02.txt
+../Data/iacp/iacp_hotlist_03.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_03.txt
+../Data/iacp/iacp_hotlist_04.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_04.txt
+../Data/iacp/iacp_hotlist_05.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_05.txt
+../Data/iacp/iacp_hotlist_06.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_06.txt
+../Data/iacp/iacp_hotlist_07.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_07.txt
+../Data/iacp/iacp_hotlist_08.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_08.txt
+../Data/iacp/iacp_hotlist_09.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_09.txt
+../Data/iacp/iacp_hotlist_10.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_10.txt
+../Data/iacp/iacp_hotlist_11.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_hotlist_11.txt
+../Data/iacp/iacp_iap_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_01.txt
+../Data/iacp/iacp_iap_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_02.txt
+../Data/iacp/iacp_iap_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_03.txt
+../Data/iacp/iacp_iap_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_04.txt
+../Data/iacp/iacp_iap_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_05.txt
+../Data/iacp/iacp_iap_06.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_06.txt
+../Data/iacp/iacp_iap_07.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_07.txt
+../Data/iacp/iacp_iap_08.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_08.txt
+../Data/iacp/iacp_iap_09.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_iap_09.txt
+../Data/iacp/iacp_mail_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_01.txt
+../Data/iacp/iacp_mail_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_02.txt
+../Data/iacp/iacp_mail_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_03.txt
+../Data/iacp/iacp_mail_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_04.txt
+../Data/iacp/iacp_mail_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_05.txt
+../Data/iacp/iacp_mail_06.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_06.txt
+../Data/iacp/iacp_mail_07.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_mail_07.txt
+../Data/iacp/iacp_script_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_01.txt
+../Data/iacp/iacp_script_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_02.txt
+../Data/iacp/iacp_script_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_03.txt
+../Data/iacp/iacp_script_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_04.txt
+../Data/iacp/iacp_script_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_05.txt
+../Data/iacp/iacp_script_06.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_script_06.txt
+../Data/iacp/iacp_sms_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_01.txt
+../Data/iacp/iacp_sms_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_02.txt
+../Data/iacp/iacp_sms_03.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_03.txt
+../Data/iacp/iacp_sms_04.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_04.txt
+../Data/iacp/iacp_sms_05.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_sms_05.txt
+../Data/iacp/iacp_gprs_01.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_gprs_01.txt
+../Data/iacp/iacp_gprs_02.txt		/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_gprs_02.txt
+../Data/iacp/iacp_telephone_01.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_telephone_01.txt
+../Data/iacp/iacp_telephone_02.txt	/epoc32/wins/c/msgtest/biomsg/data/iacp/iacp_telephone_02.txt
+
+// IACP test scripts
+// -----------------
+../Scripts/iacp/iacp_script_all_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_01.txt
+../Scripts/iacp/iacp_script_all_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_02.txt
+../Scripts/iacp/iacp_script_all_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_03.txt
+../Scripts/iacp/iacp_script_all_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_04.txt
+../Scripts/iacp/iacp_script_all_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_all_05.txt
+../Scripts/iacp/iacp_script_hotlist_01.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_01.txt
+../Scripts/iacp/iacp_script_hotlist_02.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_02.txt
+../Scripts/iacp/iacp_script_hotlist_03.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_03.txt
+../Scripts/iacp/iacp_script_hotlist_04.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_04.txt
+../Scripts/iacp/iacp_script_hotlist_05.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_05.txt
+../Scripts/iacp/iacp_script_hotlist_06.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_06.txt
+../Scripts/iacp/iacp_script_hotlist_07.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_07.txt
+../Scripts/iacp/iacp_script_hotlist_08.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_08.txt
+../Scripts/iacp/iacp_script_hotlist_09.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_09.txt
+../Scripts/iacp/iacp_script_hotlist_10.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_10.txt
+../Scripts/iacp/iacp_script_hotlist_11.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_11.txt
+../Scripts/iacp/iacp_script_iap_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_01.txt
+../Scripts/iacp/iacp_script_iap_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_02.txt
+../Scripts/iacp/iacp_script_iap_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_03.txt
+../Scripts/iacp/iacp_script_iap_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_04.txt
+../Scripts/iacp/iacp_script_iap_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_05.txt
+../Scripts/iacp/iacp_script_iap_06.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_06.txt
+../Scripts/iacp/iacp_script_iap_07.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_07.txt
+../Scripts/iacp/iacp_script_iap_08.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_08.txt
+../Scripts/iacp/iacp_script_iap_09.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_09.txt
+../Scripts/iacp/iacp_script_mail_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_01.txt
+../Scripts/iacp/iacp_script_mail_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_02.txt
+../Scripts/iacp/iacp_script_mail_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_03.txt
+../Scripts/iacp/iacp_script_mail_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_04.txt
+../Scripts/iacp/iacp_script_mail_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_05.txt
+../Scripts/iacp/iacp_script_mail_06.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_06.txt
+../Scripts/iacp/iacp_script_mail_07.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_07.txt
+../Scripts/iacp/iacp_script_script_01.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_01.txt
+../Scripts/iacp/iacp_script_script_02.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_02.txt
+../Scripts/iacp/iacp_script_script_03.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_03.txt
+../Scripts/iacp/iacp_script_script_04.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_04.txt
+../Scripts/iacp/iacp_script_script_05.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_05.txt
+../Scripts/iacp/iacp_script_script_06.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_script_06.txt
+../Scripts/iacp/iacp_script_sms_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_01.txt
+../Scripts/iacp/iacp_script_sms_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_02.txt
+../Scripts/iacp/iacp_script_sms_03.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_03.txt
+../Scripts/iacp/iacp_script_sms_04.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_04.txt
+../Scripts/iacp/iacp_script_sms_05.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_05.txt
+../Scripts/iacp/iacp_script_gprs_01.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_01.txt
+../Scripts/iacp/iacp_script_gprs_02.txt		/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_02.txt
+../Scripts/iacp/iacp_script_telephone_01.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_01.txt
+../Scripts/iacp/iacp_script_telephone_02.txt	/epoc32/wins/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_02.txt
+
+
+//
+// WAPP test files
+// ===============
+
+// WAPP test data
+// --------------
+../Data/Wapp/wapp0001.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0001.bin
+../Data/Wapp/wapp0002.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0002.bin
+../Data/Wapp/wapp0003.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0003.bin
+../Data/Wapp/wapp0004.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0004.bin
+../Data/Wapp/wapp0005.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0005.bin
+../Data/Wapp/wapp0006.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0006.bin
+../Data/Wapp/wapp0007.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0007.bin
+../Data/Wapp/wapp0008.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0008.bin
+../Data/Wapp/wapp0009.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0009.bin
+../Data/Wapp/wapp0010.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0010.bin
+../Data/Wapp/wapp0011.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0011.bin
+../Data/Wapp/wapp0012.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0012.bin
+../Data/Wapp/wapp0013.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0013.bin
+../Data/Wapp/wapp0014.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0014.bin
+../Data/Wapp/wapp0015.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0015.bin
+../Data/Wapp/wapp0016.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0016.bin
+../Data/Wapp/wapp0017.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0017.bin
+../Data/Wapp/wapp0018.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0018.bin
+../Data/Wapp/wapp0019.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0019.bin
+../Data/Wapp/wapp0020.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0020.bin
+../Data/Wapp/wapp0021.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0021.bin
+../Data/Wapp/wapp0022.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0022.bin
+../Data/Wapp/wapp0023.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0023.bin
+../Data/Wapp/wapp0024.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0024.bin
+../Data/Wapp/wapp0025.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0025.bin
+../Data/Wapp/wapp0026.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0026.bin
+../Data/Wapp/wapp0027.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0027.bin
+../Data/Wapp/wapp0028.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0028.bin
+../Data/Wapp/wapp0029.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0029.bin
+../Data/Wapp/wapp0030.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0030.bin
+../Data/Wapp/wapp0031.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0031.bin
+../Data/Wapp/wapp0032.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0032.bin
+../Data/Wapp/wapp0033.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0033.bin
+../Data/Wapp/wapp0034.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0034.bin
+../Data/Wapp/wapp0035.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0035.bin
+../Data/Wapp/wapp0036.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0036.bin
+../Data/Wapp/wapp0037.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0037.bin
+../Data/Wapp/wapp0038.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0038.bin
+../Data/Wapp/wapp0039.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0039.bin
+../Data/Wapp/wapp0040.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0040.bin
+../Data/Wapp/wapp0041.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0041.bin
+../Data/Wapp/wapp0042.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0042.bin
+../Data/Wapp/wapp0043.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0043.bin
+../Data/Wapp/wapp0044.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0044.bin
+../Data/Wapp/wapp0045.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0045.bin
+../Data/Wapp/wapp0046.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0046.bin
+../Data/Wapp/wapp0047.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0047.bin
+../Data/Wapp/wapp0048.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0048.bin
+../Data/Wapp/wapp0049.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0049.bin
+../Data/Wapp/wapp0050.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0050.bin
+../Data/Wapp/wapp0051.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0051.bin
+../Data/Wapp/wapp0052.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0052.bin
+../Data/Wapp/wapp0053.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0053.bin
+../Data/Wapp/wapp0054.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0054.bin
+../Data/Wapp/wapp0055.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0055.bin
+../Data/Wapp/wapp0056.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0056.bin
+../Data/Wapp/wapp0057.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0057.bin
+../Data/Wapp/wapp0058.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0058.bin
+../Data/Wapp/wapp0059.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0059.bin
+../Data/Wapp/wapp0060.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0060.bin
+../Data/Wapp/wapp0061.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0061.bin
+../Data/Wapp/wapp0062.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0062.bin
+../Data/Wapp/wapp0063.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0063.bin
+../Data/Wapp/wapp0064.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0064.bin
+../Data/Wapp/wapp0065.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0065.bin
+../Data/Wapp/wapp0066.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0066.bin
+../Data/Wapp/wapp0067.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0067.bin
+../Data/Wapp/wapp0068.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0068.bin
+../Data/Wapp/wapp0069.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0069.bin
+../Data/Wapp/wapp0070.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0070.bin
+../Data/Wapp/wapp0071.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0071.bin
+../Data/Wapp/wapp0072.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0072.bin
+../Data/Wapp/wapp0073.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0073.bin
+../Data/Wapp/wapp0074.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0074.bin
+../Data/Wapp/wapp0075.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0075.bin
+../Data/Wapp/wapp0076.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0076.bin
+../Data/Wapp/wapp0077.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0077.bin
+../Data/Wapp/wapp0078.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0078.bin
+../Data/Wapp/wapp0079.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0079.bin
+../Data/Wapp/wapp0080.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0080.bin
+../Data/Wapp/wapp0081.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0081.bin
+../Data/Wapp/wapp0082.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0082.bin
+../Data/Wapp/wapp0083.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0083.bin
+../Data/Wapp/wapp0084.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0084.bin
+../Data/Wapp/wapp0085.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0085.bin
+../Data/Wapp/wapp0086.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0086.bin
+../Data/Wapp/wapp0087.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0087.bin
+../Data/Wapp/wapp0088.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0088.bin
+../Data/Wapp/wapp0089.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0089.bin
+../Data/Wapp/wapp0090.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0090.bin
+../Data/Wapp/wapp0091.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0091.bin
+../Data/Wapp/wapp0092.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0092.bin
+../Data/Wapp/wapp0093.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0093.bin
+../Data/Wapp/wapp0094.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0094.bin
+../Data/Wapp/wapp0095.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0095.bin
+../Data/Wapp/wapp0096.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0096.bin
+../Data/Wapp/wapp0097.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0097.bin
+../Data/Wapp/wapp0098.bin		/epoc32/wins/c/msgtest/biomsg/data/wapp/wapp0098.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_unicode.bin					/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_unicode.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_1byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_2byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_4byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_5byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.bin				/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_6byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.bin			/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.bin			/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_end.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.bin			/epoc32/wins/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.bin
+
+// WAPP test scripts
+// -----------------
+../Scripts/Wapp/wapp0001.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0001.txt
+../Scripts/Wapp/wapp0002.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0002.txt
+../Scripts/Wapp/wapp0003.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0003.txt
+../Scripts/Wapp/wapp0004.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0004.txt
+../Scripts/Wapp/wapp0005.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0005.txt
+../Scripts/Wapp/wapp0006.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0006.txt
+../Scripts/Wapp/wapp0007.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0007.txt
+../Scripts/Wapp/wapp0008.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0008.txt
+../Scripts/Wapp/wapp0009.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0009.txt
+../Scripts/Wapp/wapp0010.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0010.txt
+../Scripts/Wapp/wapp0011.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0011.txt
+../Scripts/Wapp/wapp0012.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0012.txt
+../Scripts/Wapp/wapp0013.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0013.txt
+../Scripts/Wapp/wapp0014.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0014.txt
+../Scripts/Wapp/wapp0015.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0015.txt
+../Scripts/Wapp/wapp0016.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0016.txt
+../Scripts/Wapp/wapp0017.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0017.txt
+../Scripts/Wapp/wapp0018.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0018.txt
+../Scripts/Wapp/wapp0019.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0019.txt
+../Scripts/Wapp/wapp0020.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0020.txt
+../Scripts/Wapp/wapp0021.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0021.txt
+../Scripts/Wapp/wapp0022.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0022.txt
+../Scripts/Wapp/wapp0023.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0023.txt
+../Scripts/Wapp/wapp0024.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0024.txt
+../Scripts/Wapp/wapp0025.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0025.txt
+../Scripts/Wapp/wapp0026.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0026.txt
+../Scripts/Wapp/wapp0027.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0027.txt
+../Scripts/Wapp/wapp0028.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0028.txt
+../Scripts/Wapp/wapp0029.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0029.txt
+../Scripts/Wapp/wapp0030.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0030.txt
+../Scripts/Wapp/wapp0031.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0031.txt
+../Scripts/Wapp/wapp0032.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0032.txt
+../Scripts/Wapp/wapp0033.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0033.txt
+../Scripts/Wapp/wapp0034.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0034.txt
+../Scripts/Wapp/wapp0035.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0035.txt
+../Scripts/Wapp/wapp0036.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0036.txt
+../Scripts/Wapp/wapp0037.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0037.txt
+../Scripts/Wapp/wapp0038.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0038.txt
+../Scripts/Wapp/wapp0039.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0039.txt
+../Scripts/Wapp/wapp0040.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0040.txt
+../Scripts/Wapp/wapp0041.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0041.txt
+../Scripts/Wapp/wapp0042.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0042.txt
+../Scripts/Wapp/wapp0043.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0043.txt
+../Scripts/Wapp/wapp0044.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0044.txt
+../Scripts/Wapp/wapp0045.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0045.txt
+../Scripts/Wapp/wapp0046.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0046.txt
+../Scripts/Wapp/wapp0047.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0047.txt
+../Scripts/Wapp/wapp0048.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0048.txt
+../Scripts/Wapp/wapp0049.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0049.txt
+../Scripts/Wapp/wapp0050.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0050.txt
+../Scripts/Wapp/wapp0051.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0051.txt
+../Scripts/Wapp/wapp0052.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0052.txt
+../Scripts/Wapp/wapp0053.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0053.txt
+../Scripts/Wapp/wapp0054.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0054.txt
+../Scripts/Wapp/wapp0055.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0055.txt
+../Scripts/Wapp/wapp0056.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0056.txt
+../Scripts/Wapp/wapp0057.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0057.txt
+../Scripts/Wapp/wapp0058.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0058.txt
+../Scripts/Wapp/wapp0059.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0059.txt
+../Scripts/Wapp/wapp0060.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0060.txt
+../Scripts/Wapp/wapp0061.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0061.txt
+../Scripts/Wapp/wapp0062.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0062.txt
+../Scripts/Wapp/wapp0063.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0063.txt
+../Scripts/Wapp/wapp0064.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0064.txt
+../Scripts/Wapp/wapp0065.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0065.txt
+../Scripts/Wapp/wapp0066.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0066.txt
+../Scripts/Wapp/wapp0067.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0067.txt
+../Scripts/Wapp/wapp0068.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0068.txt
+../Scripts/Wapp/wapp0069.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0069.txt
+../Scripts/Wapp/wapp0070.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0070.txt
+../Scripts/Wapp/wapp0071.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0071.txt
+../Scripts/Wapp/wapp0072.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0072.txt
+../Scripts/Wapp/wapp0073.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0073.txt
+../Scripts/Wapp/wapp0074.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0074.txt
+../Scripts/Wapp/wapp0075.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0075.txt
+../Scripts/Wapp/wapp0076.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0076.txt
+../Scripts/Wapp/wapp0077.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0077.txt
+../Scripts/Wapp/wapp0078.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0078.txt
+../Scripts/Wapp/wapp0079.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0079.txt
+../Scripts/Wapp/wapp0080.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0080.txt
+../Scripts/Wapp/wapp0081.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0081.txt
+../Scripts/Wapp/wapp0082.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0082.txt
+../Scripts/Wapp/wapp0083.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0083.txt
+../Scripts/Wapp/wapp0084.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0084.txt
+../Scripts/Wapp/wapp0085.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0085.txt
+../Scripts/Wapp/wapp0086.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0086.txt
+../Scripts/Wapp/wapp0087.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0087.txt
+../Scripts/Wapp/wapp0088.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0088.txt
+../Scripts/Wapp/wapp0089.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0089.txt
+../Scripts/Wapp/wapp0090.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0090.txt
+../Scripts/Wapp/wapp0091.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0091.txt
+../Scripts/Wapp/wapp0092.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0092.txt
+../Scripts/Wapp/wapp0093.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0093.txt
+../Scripts/Wapp/wapp0094.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0094.txt
+../Scripts/Wapp/wapp0095.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0095.txt
+../Scripts/Wapp/wapp0096.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0096.txt
+../Scripts/Wapp/wapp0097.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0097.txt
+../Scripts/Wapp/wapp0098.txt	/epoc32/wins/c/msgtest/biomsg/scripts/wapp/wapp0098.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_unicode.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_unicode.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_1byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_2byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_4byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_5byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.txt				/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_6byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.txt		/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.txt			/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_end.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.txt		/epoc32/wins/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.txt
+
+
+
+//
+// WINSCW
+// ======
+//
+
+
+//
+// Main script file
+// ================
+../Scripts/script.txt			/epoc32/winscw/c/msgtest/biomsg/scripts/script.txt
+
+
+//
+// CBCP test files
+// ===============
+
+// CBCP test data
+// --------------
+../Data/cbcp/cbcp1.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp1.txt
+../Data/cbcp/cbcp2.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp2.txt
+../Data/cbcp/cbcp3.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp3.txt
+../Data/cbcp/cbcp4.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp4.txt
+../Data/cbcp/cbcp5.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp5.txt
+../Data/cbcp/cbcp6.txt					/epoc32/winscw/c/msgtest/biomsg/data/cbcp/cbcp6.txt
+
+
+// CBCP test scripts
+// -----------------
+../Scripts/cbcp/cbcp_test_script.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/cbcp/cbcp_test_script.txt
+
+//
+// ENP test files
+// ==============
+
+// ENP test data
+// -------------
+../Data/enp/enp1.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp1.txt
+../Data/enp/enp2.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp2.txt
+../Data/enp/enp3.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp3.txt
+../Data/enp/enp4.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp4.txt
+../Data/enp/enp5.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp5.txt
+../Data/enp/enp6.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp6.txt
+../Data/enp/enp7.txt				/epoc32/winscw/c/msgtest/biomsg/data/enp/enp7.txt
+
+// ENP test scripts
+// ----------------
+../Scripts/enp/enp_test_script.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/enp/enp_test_script.txt
+
+
+//
+// GFP test files
+// ==============
+
+// GFP test data
+// -------------
+../Data/gfp/oplogo1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo1.txt
+../Data/gfp/oplogo2.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo2.txt
+../Data/gfp/oplogo3.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo3.txt
+../Data/gfp/oplogo4.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo4.txt
+../Data/gfp/oplogo5.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo5.txt
+../Data/gfp/oplogo6.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/oplogo6.txt
+../Data/gfp/rtone1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone1.txt
+../Data/gfp/rtone2.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone2.txt
+../Data/gfp/rtone3.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone3.txt
+../Data/gfp/rtone4.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone4.txt
+../Data/gfp/rtone5.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone5.txt
+../Data/gfp/rtone6.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone6.txt
+../Data/gfp/rtone7.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/rtone7.txt
+../Data/gfp/vcal1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/vcal1.txt
+../Data/gfp/vcard1.txt				/epoc32/winscw/c/msgtest/biomsg/data/gfp/vcard1.txt
+
+// GFP test scripts
+// ----------------
+../Scripts/gfp/gfp_test_script.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/gfp/gfp_test_script.txt
+
+
+//
+// IACP test files
+// ===============
+
+// IACP test data
+// --------------
+../Data/iacp/iacp_all_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_01.txt
+../Data/iacp/iacp_all_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_02.txt
+../Data/iacp/iacp_all_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_03.txt
+../Data/iacp/iacp_all_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_04.txt
+../Data/iacp/iacp_all_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_all_05.txt
+../Data/iacp/iacp_hotlist_01.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_01.txt
+../Data/iacp/iacp_hotlist_02.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_02.txt
+../Data/iacp/iacp_hotlist_03.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_03.txt
+../Data/iacp/iacp_hotlist_04.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_04.txt
+../Data/iacp/iacp_hotlist_05.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_05.txt
+../Data/iacp/iacp_hotlist_06.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_06.txt
+../Data/iacp/iacp_hotlist_07.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_07.txt
+../Data/iacp/iacp_hotlist_08.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_08.txt
+../Data/iacp/iacp_hotlist_09.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_09.txt
+../Data/iacp/iacp_hotlist_10.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_10.txt
+../Data/iacp/iacp_hotlist_11.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_hotlist_11.txt
+../Data/iacp/iacp_iap_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_01.txt
+../Data/iacp/iacp_iap_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_02.txt
+../Data/iacp/iacp_iap_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_03.txt
+../Data/iacp/iacp_iap_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_04.txt
+../Data/iacp/iacp_iap_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_05.txt
+../Data/iacp/iacp_iap_06.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_06.txt
+../Data/iacp/iacp_iap_07.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_07.txt
+../Data/iacp/iacp_iap_08.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_08.txt
+../Data/iacp/iacp_iap_09.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_iap_09.txt
+../Data/iacp/iacp_mail_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_01.txt
+../Data/iacp/iacp_mail_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_02.txt
+../Data/iacp/iacp_mail_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_03.txt
+../Data/iacp/iacp_mail_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_04.txt
+../Data/iacp/iacp_mail_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_05.txt
+../Data/iacp/iacp_mail_06.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_06.txt
+../Data/iacp/iacp_mail_07.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_mail_07.txt
+../Data/iacp/iacp_script_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_01.txt
+../Data/iacp/iacp_script_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_02.txt
+../Data/iacp/iacp_script_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_03.txt
+../Data/iacp/iacp_script_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_04.txt
+../Data/iacp/iacp_script_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_05.txt
+../Data/iacp/iacp_script_06.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_script_06.txt
+../Data/iacp/iacp_sms_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_01.txt
+../Data/iacp/iacp_sms_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_02.txt
+../Data/iacp/iacp_sms_03.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_03.txt
+../Data/iacp/iacp_sms_04.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_04.txt
+../Data/iacp/iacp_sms_05.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_sms_05.txt
+../Data/iacp/iacp_gprs_01.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_gprs_01.txt
+../Data/iacp/iacp_gprs_02.txt		/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_gprs_02.txt
+../Data/iacp/iacp_telephone_01.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_telephone_01.txt
+../Data/iacp/iacp_telephone_02.txt	/epoc32/winscw/c/msgtest/biomsg/data/iacp/iacp_telephone_02.txt
+
+// IACP test scripts
+// -----------------
+../Scripts/iacp/iacp_script_all_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_01.txt
+../Scripts/iacp/iacp_script_all_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_02.txt
+../Scripts/iacp/iacp_script_all_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_03.txt
+../Scripts/iacp/iacp_script_all_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_04.txt
+../Scripts/iacp/iacp_script_all_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_all_05.txt
+../Scripts/iacp/iacp_script_hotlist_01.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_01.txt
+../Scripts/iacp/iacp_script_hotlist_02.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_02.txt
+../Scripts/iacp/iacp_script_hotlist_03.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_03.txt
+../Scripts/iacp/iacp_script_hotlist_04.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_04.txt
+../Scripts/iacp/iacp_script_hotlist_05.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_05.txt
+../Scripts/iacp/iacp_script_hotlist_06.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_06.txt
+../Scripts/iacp/iacp_script_hotlist_07.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_07.txt
+../Scripts/iacp/iacp_script_hotlist_08.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_08.txt
+../Scripts/iacp/iacp_script_hotlist_09.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_09.txt
+../Scripts/iacp/iacp_script_hotlist_10.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_10.txt
+../Scripts/iacp/iacp_script_hotlist_11.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_hotlist_11.txt
+../Scripts/iacp/iacp_script_iap_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_01.txt
+../Scripts/iacp/iacp_script_iap_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_02.txt
+../Scripts/iacp/iacp_script_iap_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_03.txt
+../Scripts/iacp/iacp_script_iap_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_04.txt
+../Scripts/iacp/iacp_script_iap_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_05.txt
+../Scripts/iacp/iacp_script_iap_06.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_06.txt
+../Scripts/iacp/iacp_script_iap_07.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_07.txt
+../Scripts/iacp/iacp_script_iap_08.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_08.txt
+../Scripts/iacp/iacp_script_iap_09.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_iap_09.txt
+../Scripts/iacp/iacp_script_mail_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_01.txt
+../Scripts/iacp/iacp_script_mail_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_02.txt
+../Scripts/iacp/iacp_script_mail_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_03.txt
+../Scripts/iacp/iacp_script_mail_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_04.txt
+../Scripts/iacp/iacp_script_mail_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_05.txt
+../Scripts/iacp/iacp_script_mail_06.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_06.txt
+../Scripts/iacp/iacp_script_mail_07.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_mail_07.txt
+../Scripts/iacp/iacp_script_script_01.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_01.txt
+../Scripts/iacp/iacp_script_script_02.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_02.txt
+../Scripts/iacp/iacp_script_script_03.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_03.txt
+../Scripts/iacp/iacp_script_script_04.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_04.txt
+../Scripts/iacp/iacp_script_script_05.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_05.txt
+../Scripts/iacp/iacp_script_script_06.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_script_06.txt
+../Scripts/iacp/iacp_script_sms_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_01.txt
+../Scripts/iacp/iacp_script_sms_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_02.txt
+../Scripts/iacp/iacp_script_sms_03.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_03.txt
+../Scripts/iacp/iacp_script_sms_04.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_04.txt
+../Scripts/iacp/iacp_script_sms_05.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_sms_05.txt
+../Scripts/iacp/iacp_script_gprs_01.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_01.txt
+../Scripts/iacp/iacp_script_gprs_02.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_gprs_02.txt
+../Scripts/iacp/iacp_script_telephone_01.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_01.txt
+../Scripts/iacp/iacp_script_telephone_02.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/iacp/iacp_script_telephone_02.txt
+
+
+//
+// WAPP test files
+// ===============
+
+// WAPP test data
+// --------------
+../Data/Wapp/wapp0001.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0001.bin
+../Data/Wapp/wapp0002.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0002.bin
+../Data/Wapp/wapp0003.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0003.bin
+../Data/Wapp/wapp0004.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0004.bin
+../Data/Wapp/wapp0005.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0005.bin
+../Data/Wapp/wapp0006.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0006.bin
+../Data/Wapp/wapp0007.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0007.bin
+../Data/Wapp/wapp0008.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0008.bin
+../Data/Wapp/wapp0009.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0009.bin
+../Data/Wapp/wapp0010.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0010.bin
+../Data/Wapp/wapp0011.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0011.bin
+../Data/Wapp/wapp0012.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0012.bin
+../Data/Wapp/wapp0013.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0013.bin
+../Data/Wapp/wapp0014.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0014.bin
+../Data/Wapp/wapp0015.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0015.bin
+../Data/Wapp/wapp0016.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0016.bin
+../Data/Wapp/wapp0017.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0017.bin
+../Data/Wapp/wapp0018.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0018.bin
+../Data/Wapp/wapp0019.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0019.bin
+../Data/Wapp/wapp0020.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0020.bin
+../Data/Wapp/wapp0021.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0021.bin
+../Data/Wapp/wapp0022.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0022.bin
+../Data/Wapp/wapp0023.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0023.bin
+../Data/Wapp/wapp0024.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0024.bin
+../Data/Wapp/wapp0025.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0025.bin
+../Data/Wapp/wapp0026.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0026.bin
+../Data/Wapp/wapp0027.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0027.bin
+../Data/Wapp/wapp0028.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0028.bin
+../Data/Wapp/wapp0029.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0029.bin
+../Data/Wapp/wapp0030.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0030.bin
+../Data/Wapp/wapp0031.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0031.bin
+../Data/Wapp/wapp0032.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0032.bin
+../Data/Wapp/wapp0033.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0033.bin
+../Data/Wapp/wapp0034.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0034.bin
+../Data/Wapp/wapp0035.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0035.bin
+../Data/Wapp/wapp0036.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0036.bin
+../Data/Wapp/wapp0037.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0037.bin
+../Data/Wapp/wapp0038.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0038.bin
+../Data/Wapp/wapp0039.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0039.bin
+../Data/Wapp/wapp0040.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0040.bin
+../Data/Wapp/wapp0041.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0041.bin
+../Data/Wapp/wapp0042.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0042.bin
+../Data/Wapp/wapp0043.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0043.bin
+../Data/Wapp/wapp0044.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0044.bin
+../Data/Wapp/wapp0045.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0045.bin
+../Data/Wapp/wapp0046.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0046.bin
+../Data/Wapp/wapp0047.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0047.bin
+../Data/Wapp/wapp0048.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0048.bin
+../Data/Wapp/wapp0049.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0049.bin
+../Data/Wapp/wapp0050.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0050.bin
+../Data/Wapp/wapp0051.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0051.bin
+../Data/Wapp/wapp0052.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0052.bin
+../Data/Wapp/wapp0053.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0053.bin
+../Data/Wapp/wapp0054.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0054.bin
+../Data/Wapp/wapp0055.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0055.bin
+../Data/Wapp/wapp0056.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0056.bin
+../Data/Wapp/wapp0057.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0057.bin
+../Data/Wapp/wapp0058.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0058.bin
+../Data/Wapp/wapp0059.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0059.bin
+../Data/Wapp/wapp0060.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0060.bin
+../Data/Wapp/wapp0061.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0061.bin
+../Data/Wapp/wapp0062.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0062.bin
+../Data/Wapp/wapp0063.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0063.bin
+../Data/Wapp/wapp0064.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0064.bin
+../Data/Wapp/wapp0065.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0065.bin
+../Data/Wapp/wapp0066.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0066.bin
+../Data/Wapp/wapp0067.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0067.bin
+../Data/Wapp/wapp0068.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0068.bin
+../Data/Wapp/wapp0069.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0069.bin
+../Data/Wapp/wapp0070.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0070.bin
+../Data/Wapp/wapp0071.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0071.bin
+../Data/Wapp/wapp0072.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0072.bin
+../Data/Wapp/wapp0073.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0073.bin
+../Data/Wapp/wapp0074.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0074.bin
+../Data/Wapp/wapp0075.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0075.bin
+../Data/Wapp/wapp0076.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0076.bin
+../Data/Wapp/wapp0077.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0077.bin
+../Data/Wapp/wapp0078.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0078.bin
+../Data/Wapp/wapp0079.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0079.bin
+../Data/Wapp/wapp0080.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0080.bin
+../Data/Wapp/wapp0081.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0081.bin
+../Data/Wapp/wapp0082.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0082.bin
+../Data/Wapp/wapp0083.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0083.bin
+../Data/Wapp/wapp0084.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0084.bin
+../Data/Wapp/wapp0085.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0085.bin
+../Data/Wapp/wapp0086.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0086.bin
+../Data/Wapp/wapp0087.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0087.bin
+../Data/Wapp/wapp0088.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0088.bin
+../Data/Wapp/wapp0089.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0089.bin
+../Data/Wapp/wapp0090.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0090.bin
+../Data/Wapp/wapp0091.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0091.bin
+../Data/Wapp/wapp0092.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0092.bin
+../Data/Wapp/wapp0093.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0093.bin
+../Data/Wapp/wapp0094.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0094.bin
+../Data/Wapp/wapp0095.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0095.bin
+../Data/Wapp/wapp0096.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0096.bin
+../Data/Wapp/wapp0097.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0097.bin
+../Data/Wapp/wapp0098.bin		/epoc32/winscw/c/msgtest/biomsg/data/wapp/wapp0098.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_unicode.bin					/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_unicode.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_1byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_2byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_4byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_5byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.bin				/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_6byte.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.bin			/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.bin			/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_3byte_end.bin
+../Data/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.bin			/epoc32/winscw/c/msgtest/biomsg/data/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.bin
+
+// WAPP test scripts
+// -----------------
+../Scripts/Wapp/wapp0001.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0001.txt
+../Scripts/Wapp/wapp0002.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0002.txt
+../Scripts/Wapp/wapp0003.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0003.txt
+../Scripts/Wapp/wapp0004.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0004.txt
+../Scripts/Wapp/wapp0005.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0005.txt
+../Scripts/Wapp/wapp0006.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0006.txt
+../Scripts/Wapp/wapp0007.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0007.txt
+../Scripts/Wapp/wapp0008.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0008.txt
+../Scripts/Wapp/wapp0009.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0009.txt
+../Scripts/Wapp/wapp0010.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0010.txt
+../Scripts/Wapp/wapp0011.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0011.txt
+../Scripts/Wapp/wapp0012.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0012.txt
+../Scripts/Wapp/wapp0013.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0013.txt
+../Scripts/Wapp/wapp0014.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0014.txt
+../Scripts/Wapp/wapp0015.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0015.txt
+../Scripts/Wapp/wapp0016.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0016.txt
+../Scripts/Wapp/wapp0017.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0017.txt
+../Scripts/Wapp/wapp0018.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0018.txt
+../Scripts/Wapp/wapp0019.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0019.txt
+../Scripts/Wapp/wapp0020.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0020.txt
+../Scripts/Wapp/wapp0021.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0021.txt
+../Scripts/Wapp/wapp0022.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0022.txt
+../Scripts/Wapp/wapp0023.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0023.txt
+../Scripts/Wapp/wapp0024.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0024.txt
+../Scripts/Wapp/wapp0025.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0025.txt
+../Scripts/Wapp/wapp0026.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0026.txt
+../Scripts/Wapp/wapp0027.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0027.txt
+../Scripts/Wapp/wapp0028.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0028.txt
+../Scripts/Wapp/wapp0029.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0029.txt
+../Scripts/Wapp/wapp0030.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0030.txt
+../Scripts/Wapp/wapp0031.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0031.txt
+../Scripts/Wapp/wapp0032.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0032.txt
+../Scripts/Wapp/wapp0033.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0033.txt
+../Scripts/Wapp/wapp0034.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0034.txt
+../Scripts/Wapp/wapp0035.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0035.txt
+../Scripts/Wapp/wapp0036.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0036.txt
+../Scripts/Wapp/wapp0037.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0037.txt
+../Scripts/Wapp/wapp0038.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0038.txt
+../Scripts/Wapp/wapp0039.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0039.txt
+../Scripts/Wapp/wapp0040.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0040.txt
+../Scripts/Wapp/wapp0041.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0041.txt
+../Scripts/Wapp/wapp0042.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0042.txt
+../Scripts/Wapp/wapp0043.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0043.txt
+../Scripts/Wapp/wapp0044.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0044.txt
+../Scripts/Wapp/wapp0045.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0045.txt
+../Scripts/Wapp/wapp0046.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0046.txt
+../Scripts/Wapp/wapp0047.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0047.txt
+../Scripts/Wapp/wapp0048.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0048.txt
+../Scripts/Wapp/wapp0049.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0049.txt
+../Scripts/Wapp/wapp0050.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0050.txt
+../Scripts/Wapp/wapp0051.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0051.txt
+../Scripts/Wapp/wapp0052.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0052.txt
+../Scripts/Wapp/wapp0053.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0053.txt
+../Scripts/Wapp/wapp0054.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0054.txt
+../Scripts/Wapp/wapp0055.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0055.txt
+../Scripts/Wapp/wapp0056.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0056.txt
+../Scripts/Wapp/wapp0057.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0057.txt
+../Scripts/Wapp/wapp0058.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0058.txt
+../Scripts/Wapp/wapp0059.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0059.txt
+../Scripts/Wapp/wapp0060.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0060.txt
+../Scripts/Wapp/wapp0061.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0061.txt
+../Scripts/Wapp/wapp0062.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0062.txt
+../Scripts/Wapp/wapp0063.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0063.txt
+../Scripts/Wapp/wapp0064.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0064.txt
+../Scripts/Wapp/wapp0065.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0065.txt
+../Scripts/Wapp/wapp0066.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0066.txt
+../Scripts/Wapp/wapp0067.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0067.txt
+../Scripts/Wapp/wapp0068.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0068.txt
+../Scripts/Wapp/wapp0069.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0069.txt
+../Scripts/Wapp/wapp0070.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0070.txt
+../Scripts/Wapp/wapp0071.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0071.txt
+../Scripts/Wapp/wapp0072.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0072.txt
+../Scripts/Wapp/wapp0073.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0073.txt
+../Scripts/Wapp/wapp0074.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0074.txt
+../Scripts/Wapp/wapp0075.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0075.txt
+../Scripts/Wapp/wapp0076.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0076.txt
+../Scripts/Wapp/wapp0077.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0077.txt
+../Scripts/Wapp/wapp0078.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0078.txt
+../Scripts/Wapp/wapp0079.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0079.txt
+../Scripts/Wapp/wapp0080.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0080.txt
+../Scripts/Wapp/wapp0081.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0081.txt
+../Scripts/Wapp/wapp0082.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0082.txt
+../Scripts/Wapp/wapp0083.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0083.txt
+../Scripts/Wapp/wapp0084.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0084.txt
+../Scripts/Wapp/wapp0085.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0085.txt
+../Scripts/Wapp/wapp0086.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0086.txt
+../Scripts/Wapp/wapp0087.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0087.txt
+../Scripts/Wapp/wapp0088.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0088.txt
+../Scripts/Wapp/wapp0089.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0089.txt
+../Scripts/Wapp/wapp0090.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0090.txt
+../Scripts/Wapp/wapp0091.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0091.txt
+../Scripts/Wapp/wapp0092.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0092.txt
+../Scripts/Wapp/wapp0093.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0093.txt
+../Scripts/Wapp/wapp0094.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0094.txt
+../Scripts/Wapp/wapp0095.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0095.txt
+../Scripts/Wapp/wapp0096.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0096.txt
+../Scripts/Wapp/wapp0097.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0097.txt
+../Scripts/Wapp/wapp0098.txt	/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/wapp0098.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_unicode.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_unicode.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_1byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_1byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_2byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_2byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_4byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_4byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_5byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_5byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_6byte.txt				/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_6byte.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_begin.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_begin.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_3byte_end.txt			/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_3byte_end.txt
+../Scripts/Wapp/DEF036479_charset_tests/wapp_utf8_varibyte_all.txt		/epoc32/winscw/c/msgtest/biomsg/scripts/wapp/def036479_charset_tests/wapp_utf8_varibyte_all.txt
+
+
+PRJ_MMPFILES
+
+PRJ_TESTMMPFILES
+t_biomsg.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/cbcp/CBusinessCardParser class.htm	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,269 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
+<title>CBusinessCardParser class</title>
+</head>
+
+<body bgcolor="#FFFFFF">
+
+<h2><a name="CBusinessCardParser"><font size="4"><tt>CBusinessCardParser</tt></font><font
+face="Times New Roman"> class &#151;</font></a><font
+face="Times New Roman"> Compact Business Card Parser</h2>
+
+<p></font><b><i>Section Contents</i></b></p>
+
+<ul>
+    <li><a href="#e32.eudsccls-004-001"><b>Overview</b></a> </li>
+    <li><a
+        href="#e32.desc-concrete.HBufC.allocation-and-construction"><b>Allocation
+        and construction</b></a> <ul>
+            <li><a href="#e32.desc-concrete.new"><font size="4"><b><tt>NewL()</tt></b></font><b>
+                &#151; Create new CBusinessCardParser</b></a> </li>
+        </ul>
+    </li>
+    <li><a href="#API"><strong>API &#151; Public functions</strong></a><ul>
+            <li><a href="#ParseL"><strong>ParseL &#151; Parse a
+                Compact Business Card message.</strong></a></li>
+            <li><a href="#ProcessL"><strong>ProcessL &#151; Parse
+                a Compact Business Card message.</strong></a></li>
+        </ul>
+    </li>
+</ul>
+
+<hr size="3">
+
+<h3><a name="e32.eudsccls-004-001">Overview</a></h3>
+
+<h5><a name="e32.eudsccls-004-002"><font size="3">Derivation</font></a></h5>
+
+<table border="1" cellpadding="2">
+    <tr>
+        <td valign="top"><a href="eutype.html#e32.class.CBase"><font
+        color="#000000" size="4"><tt>CBase</tt></font></a></td>
+        <td valign="top">Abstract: <a
+        href="eutype.html#e32.class.CBase"><font color="#000000"
+        size="4"><tt>CBase</tt></font></a> behaviour</td>
+    </tr>
+    <tr>
+        <td valign="top"><a href="#e32.class.CActive"><font
+        color="#000000" size="4"><tt>CActive</tt></font></a></td>
+        <td valign="top">Abstract: active object: provides
+        facilities to encapsulate an asynchronous service, and to
+        handle its completion using <font size="4"><tt>RunL()</tt></font></td>
+    </tr>
+    <tr>
+        <td valign="top"><a href="#CBusinessCardParser"><font
+        color="#000000" size="4"><tt>CBaseScriptParser</tt></font></a></td>
+        <td valign="top">Abstract: parser implementation.</td>
+    </tr>
+</table>
+
+<h5><a name="e32.eudsccls-004-003"><font size="3">Defined in</font></a></h5>
+
+<p><code>cbcp.h</code><font size="4"><tt>&nbsp;&nbsp;&nbsp;</tt></font></p>
+
+<h5><a name="e32.eudsccls-004-004"><font size="3">Link against</font></a></h5>
+
+<p><code>cbcp.lib</code></p>
+
+<h5><a name="e32.eudsccls-004-005"><font size="3">Description</font></a></h5>
+
+<p>This class provides functions to parse a Compact Business Card
+message. The parser creates an informative message body for the
+user and generates a vCard in the store associated with the
+message.</p>
+
+<hr size="3">
+
+<h3><a name="e32.desc-concrete.HBufC.allocation-and-construction">Allocation
+and construction</a></h3>
+
+<hr size="1">
+
+<h4><a name="e32.desc-concrete.new"><font size="4"><tt>NewL()</tt></font>
+&#151; Create new <font size="4"><tt>CBusinessCardParser</tt></font></a></h4>
+
+<p><tt>static CBusinessCardParser* NewL(CRegisteredParserDll&amp;
+aRegisteredParserDll, CMsvServerEntry&amp; aEntry, RFs&amp; aFs);</tt></p>
+
+<h5><a name="e32.eudsccls-004-006"><font size="3">Description</font></a></h5>
+
+<p>Use these functions to construct a new <a
+href="#CBusinessCardParser"><font color="#000000" size="4"><tt>CBusinessCardParser</tt></font></a>
+descriptor on the heap. Code should be provided to ensure that a
+single copy of the DLL is loaded and is released when no longer
+required.</p>
+
+<p>If there is insufficient memory available to create the
+descriptor,<font size="4"><tt> NewL()</tt></font> leaves. See <a
+href="euclnp.html#e32.exception.intro"><b>Motivating E32
+exception facilities</b></a> for more information on leave
+processing.</p>
+
+<h5><font size="3">Arguments</font></h5>
+
+<table border="1">
+    <tr>
+        <td valign="top"><a href="#CBusinessCardParser"><tt>CRegisteredParserDll&amp;</tt></a><tt>
+        aRegisteredParserDll</tt></td>
+        <td valign="top">A </td>
+    </tr>
+    <tr>
+        <td><a href="#CBusinessCardParser"><tt>CMsvServerEntry&amp;</tt></a><tt>
+        aEntry</tt></td>
+        <td>A message server entry containing the CBC message.</td>
+    </tr>
+    <tr>
+        <td><a href="#CBusinessCardParser"><tt>RFs&amp;</tt></a><tt>
+        aFs</tt></td>
+        <td>Handle of a file server session.</td>
+    </tr>
+</table>
+
+<h5><font size="3">Return value</font></h5>
+
+<table border="1">
+    <tr>
+        <td valign="top"><a href="#CBusinessCardParser"><font
+        color="#000000" size="4"><tt>CBusinessCardParser*</tt></font></a></td>
+        <td valign="top">The address of the newly created <a
+        href="#CBusinessCardParser"><font color="#000000"
+        size="4"><tt>CBusinessCardParser</tt></font></a>
+        descriptor.<p><font size="4"><tt>NewL()</tt></font>
+        leaves if there is insufficient memory.</p>
+        </td>
+    </tr>
+</table>
+
+<h5><a name="e32.eudsccls-004-009"><font size="3">Example</font></a></h5>
+
+<p>This code fragment illustrates how an <a
+href="#CBusinessCardParser"><font color="#000000" size="4"><tt>CBusinessCardParser</tt></font></a>
+descriptor can be constructed:</p>
+
+<p>Use of <font size="4"><tt>NewL()</tt></font>:</p>
+
+<blockquote>
+    <p>iRegisteredParserDll =
+    CRegisteredParserDll::NewL(uidType);<br>
+    RLibrary parserlibrary;<br>
+    User::LeaveIfError(iRegisteredParserDll-&gt;GetLibrary(gFs,parserlibrary));<br>
+    typedef CBaseScriptParser*
+    (*NewParserL)(CRegisteredParserDll&amp; aRegisteredParserDll,
+    CMsvServerEntry&amp; aEntry, RFs&amp; aFs);<br>
+    TInt entrypointordinalnumber=1; // The one and only entry
+    point.<br>
+    TLibraryFunction
+    libFunc=parserlibrary.Lookup(entrypointordinalnumber);<br>
+    if (libFunc==NULL)<br>
+    User::Leave(KErrBadLibraryEntryPoint);<br>
+    NewParserL pFunc=(NewParserL) libFunc;<br>
+    CBaseScriptParser* parser=NULL;<br>
+    TInt refcount=iRegisteredParserDll-&gt;DllRefCount();<br>
+    TRAPD(ret,parser=((*pFunc)(*iRegisteredParserDll, *iEntry,
+    gFs)));<br>
+    if ((ret!=KErrNone) &amp;&amp;
+    (iRegisteredParserDll-&gt;DllRefCount()==refcount))<br>
+    iRegisteredParserDll-&gt;ReleaseLibrary();</p>
+</blockquote>
+
+<hr size="3">
+
+<h3><a name="API">API &#151; Public functions</a></h3>
+
+<p><a name="ParseL"><strong>ParseL</strong></a><strong> &#151;
+Parse a </strong><a href="#CBusinessCardParser"><strong>Compact
+Business Card</strong></a><strong> message.</strong></p>
+
+<p>void ParseL(TRequestStatus&amp; aStatus, const TDesC&amp;
+aSms);</p>
+
+<h5><a name="e32.eudsccls-004-006"><font size="3">Description</font></a></h5>
+
+<p>Use this function to parse the Compact Business Card message
+aSms, stored in the TDesC. The parser creates an informative
+message body for the user and generates a vCard in the store
+associated with the message.</p>
+
+<h5><font size="3">Arguments</font></h5>
+
+<table border="1">
+    <tr>
+        <td valign="top">TRequestStatus&amp; aStatus</td>
+        <td valign="top">The request status of the active object.</td>
+    </tr>
+    <tr>
+        <td>const TDesC&amp; aSms</td>
+        <td>An SMS message.</td>
+    </tr>
+</table>
+
+<h5><font size="3">Return value</font></h5>
+
+<table border="1">
+    <tr>
+        <td valign="top"><font color="#000000" size="4"><tt>void</tt></font></td>
+    </tr>
+</table>
+
+<h5><a name="e32.eudsccls-004-009"><font size="3">Example</font></a></h5>
+
+<p>This code fragment illustrates how the parser is called:</p>
+
+<blockquote>
+    <p>iParser-&gt;ParseL(iStatus,iSms);</p>
+</blockquote>
+
+<hr size="1">
+
+<p><a name="ProcessL"><font face="Times New Roman"><strong>ProcessL</strong></font></a><font
+face="Times New Roman"><strong> &#151; Parse a </strong></font><a
+href="#CBusinessCardParser"><font face="Times New Roman"><strong>Compact
+Business Card</strong></font></a><font face="Times New Roman"><strong>
+message.</strong></font></p>
+
+<p>void ProcessL(TRequestStatus&amp; aStatus);</p>
+
+<h5><a name="e32.eudsccls-004-006"><font size="3">Description</font></a></h5>
+
+<p>This function is not implemented in the current version of the
+parser. It may be used to implement further actions with the
+parsed message.</p>
+
+<h5><font size="3">Arguments</font></h5>
+
+<table border="1">
+    <tr>
+        <td valign="top">TRequestStatus&amp; aStatus</td>
+        <td valign="top">The request status of the active object.</td>
+    </tr>
+</table>
+
+<h5><font size="3">Return value</font></h5>
+
+<table border="1">
+    <tr>
+        <td valign="top"><font color="#000000" size="4"><tt>void</tt></font></td>
+    </tr>
+</table>
+
+<h5><a name="e32.eudsccls-004-009"><font size="3">Example</font></a></h5>
+
+<p>This code fragment illustrates how the message process stage
+of the parser is called:</p>
+
+<blockquote>
+    <p>iParser-&gt;ProcessL(iStatus)</p>
+</blockquote>
+
+<p>This interface currently returns after issuing a
+User::RequestComplete(iReport, KErrNotSupported).</p>
+
+<hr size="3">
+
+<p>&nbsp;</p>
+</body>
+</html>
--- a/messagingfw/biomsgfw/group/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BIOMSG.INF
-// 'Smart' messaging (BIO Messaging)
-// 
-//
-
-/**
- @file
-*/
-
-
-PRJ_PLATFORMS
-DEFAULT
-
-// The following are build for WINC
-#include "../BIFU/BLD.INF"
-
-// These lot are not
-#if !defined(WINC)
-
-#include "../BIUT/BLD.INF"
-#include "../BDB/BLD.INF"
-#include "../BIOC/BLD.INF"
-#include "../BIOS/BLD.INF"
-#include "../BITS/BLD.INF"
-#include "../cbcp/bld.inf"
-#include "../iacp/bld.inf"
-#include "../enp/bld.inf"
-#include "../wapp/bld.inf"
-#include "../gfp/bld.inf"
-#include "../BioWatchers/BLD.INF"
-#include "../Rom/BLD.INF"
-
-PRJ_EXPORTS
-bioerr.ra                              SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(errors/generic/bioerr.ra)
-bioerr.rls                             SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(errors/generic/bioerr.rls)
-biftool2.rH SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(biftool2.rh)
-
-PRJ_MMPFILES
-
-#endif
--- a/messagingfw/biomsgfw/group/bioerr.ra	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/biomsgfw/group/bioerr.ra	Fri Jun 25 16:18:56 2010 +0530
@@ -1,191 +1,191 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// BIO Messaging error text
-// 
-//
-
-#include <errors/generic/bioerr.rls>
-
-RESOURCE ARRAY r_error_res_bio_base_errors
-	{
-	items=
-		{
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_corrupt_message;		// -500
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_corrupt_message;		// -501
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_unknown_type;			// -502
-			}
-		};
-	}
-
-RESOURCE ARRAY r_error_res_bio_errors
-	{
-	items=
-		{
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_unknown_type;			// -510
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_unknown_type;			// -511
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_corrupt_message;		// -512
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_unknown_protocol;		// -513
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_corrupt_message;		// -514
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_corrupt_message;		// -515
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_corrupt_message;		// -516 
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_corrupt_message;		// -517
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_unknown_iap;			// -518
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_bad_script;			// -519
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_bad_script;			// -520
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_bio_bad_script;			// -521
-			}
-		};
-	}
-
-RESOURCE ARRAY r_error_res_bio_wapp_errors
-	{
-	items=
-		{
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_base;					// -600
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_xmlver;				// -601
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_outbound;				// -602
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_str_tab;				// -603
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_eos;					// -604
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_unexp_val;			// -605
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_no_att;				// -606
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_tag_miss;				// -607
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_store_notf;			// -608
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_msg_unparsed;			// -609
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_unrecog;				// -610
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_null_val;				// -611
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_content;				// -612
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_no_dbr;				// -613
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_not_sup;				// -614
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_bad_mess;				// -615
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_wapp_no_term;				// -616
-			}
-		};
-	}
-
-RESOURCE TBUF r_error_res_bio_unknown_type				{ buf=STRING_r_error_res_bio_unknown_type			; }
-RESOURCE TBUF r_error_res_bio_corrupt_message			{ buf=STRING_r_error_res_bio_corrupt_message		; }
-RESOURCE TBUF r_error_res_bio_unknown_protocol			{ buf=STRING_r_error_res_bio_unknown_protocol		; }
-RESOURCE TBUF r_error_res_bio_unknown_iap				{ buf=STRING_r_error_res_bio_unknown_iap			; }
-RESOURCE TBUF r_error_res_bio_bad_script				{ buf=STRING_r_error_res_bio_bad_script			; }
-
-RESOURCE TBUF r_error_res_wapp_base						{ buf=STRING_r_error_res_wapp_base					; }
-RESOURCE TBUF r_error_res_wapp_xmlver					{ buf=STRING_r_error_res_wapp_xmlver				; }
-RESOURCE TBUF r_error_res_wapp_outbound					{ buf=STRING_r_error_res_wapp_outbound				; }
-RESOURCE TBUF r_error_res_wapp_str_tab					{ buf=STRING_r_error_res_wapp_str_tab				; }
-RESOURCE TBUF r_error_res_wapp_eos						{ buf=STRING_r_error_res_wapp_eos					; }
-RESOURCE TBUF r_error_res_wapp_unexp_val				{ buf=STRING_r_error_res_wapp_unexp_val			; }
-RESOURCE TBUF r_error_res_wapp_no_att					{ buf=STRING_r_error_res_wapp_no_att				; }
-RESOURCE TBUF r_error_res_wapp_tag_miss					{ buf=STRING_r_error_res_wapp_tag_miss				; }
-RESOURCE TBUF r_error_res_wapp_store_notf				{ buf=STRING_r_error_res_wapp_store_notf			; }
-RESOURCE TBUF r_error_res_wapp_msg_unparsed				{ buf=STRING_r_error_res_wapp_msg_unparsed			; }
-RESOURCE TBUF r_error_res_wapp_unrecog					{ buf=STRING_r_error_res_wapp_unrecog				; }
-RESOURCE TBUF r_error_res_wapp_null_val					{ buf=STRING_r_error_res_wapp_null_val				 ; }
-RESOURCE TBUF r_error_res_wapp_content					{ buf=STRING_r_error_res_wapp_content				 ; }
-RESOURCE TBUF r_error_res_wapp_no_dbr					{ buf=STRING_r_error_res_wapp_no_dbr				; }
-RESOURCE TBUF r_error_res_wapp_not_sup					{ buf=STRING_r_error_res_wapp_not_sup				; }
-RESOURCE TBUF r_error_res_wapp_bad_mess					{ buf=STRING_r_error_res_wapp_bad_mess				; }
-RESOURCE TBUF r_error_res_wapp_no_term					{ buf=STRING_r_error_res_wapp_no_term				; }
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BIO Messaging error text
+// 
+//
+
+#include <errors/generic/bioerr.rls>
+
+RESOURCE ARRAY r_error_res_bio_base_errors
+	{
+	items=
+		{
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_corrupt_message;		// -500
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_corrupt_message;		// -501
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_unknown_type;			// -502
+			}
+		};
+	}
+
+RESOURCE ARRAY r_error_res_bio_errors
+	{
+	items=
+		{
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_unknown_type;			// -510
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_unknown_type;			// -511
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_corrupt_message;		// -512
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_unknown_protocol;		// -513
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_corrupt_message;		// -514
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_corrupt_message;		// -515
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_corrupt_message;		// -516 
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_corrupt_message;		// -517
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_unknown_iap;			// -518
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_bad_script;			// -519
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_bad_script;			// -520
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_bio_bad_script;			// -521
+			}
+		};
+	}
+
+RESOURCE ARRAY r_error_res_bio_wapp_errors
+	{
+	items=
+		{
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_base;					// -600
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_xmlver;				// -601
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_outbound;				// -602
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_str_tab;				// -603
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_eos;					// -604
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_unexp_val;			// -605
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_no_att;				// -606
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_tag_miss;				// -607
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_store_notf;			// -608
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_msg_unparsed;			// -609
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_unrecog;				// -610
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_null_val;				// -611
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_content;				// -612
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_no_dbr;				// -613
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_not_sup;				// -614
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_bad_mess;				// -615
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_wapp_no_term;				// -616
+			}
+		};
+	}
+
+RESOURCE TBUF r_error_res_bio_unknown_type				{ buf=STRING_r_error_res_bio_unknown_type			; }
+RESOURCE TBUF r_error_res_bio_corrupt_message			{ buf=STRING_r_error_res_bio_corrupt_message		; }
+RESOURCE TBUF r_error_res_bio_unknown_protocol			{ buf=STRING_r_error_res_bio_unknown_protocol		; }
+RESOURCE TBUF r_error_res_bio_unknown_iap				{ buf=STRING_r_error_res_bio_unknown_iap			; }
+RESOURCE TBUF r_error_res_bio_bad_script				{ buf=STRING_r_error_res_bio_bad_script			; }
+
+RESOURCE TBUF r_error_res_wapp_base						{ buf=STRING_r_error_res_wapp_base					; }
+RESOURCE TBUF r_error_res_wapp_xmlver					{ buf=STRING_r_error_res_wapp_xmlver				; }
+RESOURCE TBUF r_error_res_wapp_outbound					{ buf=STRING_r_error_res_wapp_outbound				; }
+RESOURCE TBUF r_error_res_wapp_str_tab					{ buf=STRING_r_error_res_wapp_str_tab				; }
+RESOURCE TBUF r_error_res_wapp_eos						{ buf=STRING_r_error_res_wapp_eos					; }
+RESOURCE TBUF r_error_res_wapp_unexp_val				{ buf=STRING_r_error_res_wapp_unexp_val			; }
+RESOURCE TBUF r_error_res_wapp_no_att					{ buf=STRING_r_error_res_wapp_no_att				; }
+RESOURCE TBUF r_error_res_wapp_tag_miss					{ buf=STRING_r_error_res_wapp_tag_miss				; }
+RESOURCE TBUF r_error_res_wapp_store_notf				{ buf=STRING_r_error_res_wapp_store_notf			; }
+RESOURCE TBUF r_error_res_wapp_msg_unparsed				{ buf=STRING_r_error_res_wapp_msg_unparsed			; }
+RESOURCE TBUF r_error_res_wapp_unrecog					{ buf=STRING_r_error_res_wapp_unrecog				; }
+RESOURCE TBUF r_error_res_wapp_null_val					{ buf=STRING_r_error_res_wapp_null_val				 ; }
+RESOURCE TBUF r_error_res_wapp_content					{ buf=STRING_r_error_res_wapp_content				 ; }
+RESOURCE TBUF r_error_res_wapp_no_dbr					{ buf=STRING_r_error_res_wapp_no_dbr				; }
+RESOURCE TBUF r_error_res_wapp_not_sup					{ buf=STRING_r_error_res_wapp_not_sup				; }
+RESOURCE TBUF r_error_res_wapp_bad_mess					{ buf=STRING_r_error_res_wapp_bad_mess				; }
+RESOURCE TBUF r_error_res_wapp_no_term					{ buf=STRING_r_error_res_wapp_no_term				; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,53 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// BIOMSG.INF
+// 'Smart' messaging (BIO Messaging)
+// 
+//
+
+/**
+ @file
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+// The following are build for WINC
+#include "../BIFU/bld.inf"
+
+// These lot are not
+#if !defined(WINC)
+
+#include "../BIUT/bld.inf"
+#include "../BDB/bld.inf"
+#include "../BIOC/bld.inf"
+#include "../BIOS/bld.inf"
+#include "../BITS/bld.inf"
+#include "../cbcp/bld.inf"
+#include "../iacp/bld.inf"
+#include "../enp/bld.inf"
+#include "../wapp/bld.inf"
+#include "../gfp/bld.inf"
+#include "../BioWatchers/bld.inf"
+#include "../Rom/bld.inf"
+
+PRJ_EXPORTS
+bioerr.ra                              SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(errors/generic/bioerr.ra)
+bioerr.rls                             SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(errors/generic/bioerr.rls)
+biftool2.rH SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(biftool2.rh)
+
+PRJ_MMPFILES
+
+#endif
--- a/messagingfw/biomsgfw/wapptsrc/wappxml.rtf	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/biomsgfw/wapptsrc/wappxml.rtf	Fri Jun 25 16:18:56 2010 +0530
@@ -1,34 +1,34 @@
-
-<?xml version="1.0"?>
-<!DOCTYPE CHARACTERISTIC-LIST SYSTEM "/DTD/characteristic_list.xml">
-<CHARACTERISTIC-LIST>
-	<CHARACTERISTIC TYPE="ADDRESS">
-		<PARM NAME="BEARER" VALUE="GSM/CSD"/>
-		<PARM NAME="PROXY" VALUE="192.122.10.120"/>
-		<PARM NAME="CSD_DIALSTRING" VALUE="+358308124002"/>
-		<PARM NAME="CSD_AUTHTYPE" VALUE="PAP"/>
-		<PARM NAME="CSD_AUTHNAME"  VALUE="wapuser"/>
-		<PARM NAME="CSD_AUTHSECRET" VALUE="ANALOGUE"/>
-		<PARM NAME="CSD_CALLTYPE" VALUE=""AUTO/>
-		<PARM NAME="CSD_CALLSPEED"  VALUE="pxauthname"/>
-		<PARM NAME="PROXY_AUTHNAME" VALUE="pxauthsecret"/>
-		<PARM NAME="PROXY_AUTHSECRET" VALUE=""/>
-		<PARM NAME="ISP_NAME"  VALUE="World Access ISP"/>
-
-	</CHARACTERISTIC>
-	<CHARACTERISTIC TYPE="ADDRESS">
-		<PARM NAME="BEARER" VALUE="GSM/SMS"/>
-		<PARM NAME="9400410"/>
-		<PARM NAME="SMS_SMCS_ADDRESS" VALUE="+36209400400/>
-	</CHARACTERISTIC>
-	<CHARACTERISTIC TYPE="BOOKMARK">
-		<PARM NAME="NAME" VALUE="My favourite page"/>
-		<PARM NAME="URL" VALUE="http://www.somewhere.com/index.wml"/>
-	</CHARACTERISTIC>
-	<CHARACTERISTIC TYPE="URL" VALUE="startpage/index.wml"/>
-
-	<CHARACTERISTIC TYPE="NAME">
-		<PARM NAME="NAME"  VALUE="Mobilbank"/>
-	</CHARACTERISTIC>
-
-</CHARACTERISTIC-LIST>
+
+<?xml version="1.0"?>
+<!DOCTYPE CHARACTERISTIC-LIST SYSTEM "/DTD/characteristic_list.xml">
+<CHARACTERISTIC-LIST>
+	<CHARACTERISTIC TYPE="ADDRESS">
+		<PARM NAME="BEARER" VALUE="GSM/CSD"/>
+		<PARM NAME="PROXY" VALUE="192.122.10.120"/>
+		<PARM NAME="CSD_DIALSTRING" VALUE="+358308124002"/>
+		<PARM NAME="CSD_AUTHTYPE" VALUE="PAP"/>
+		<PARM NAME="CSD_AUTHNAME"  VALUE="wapuser"/>
+		<PARM NAME="CSD_AUTHSECRET" VALUE="ANALOGUE"/>
+		<PARM NAME="CSD_CALLTYPE" VALUE=""AUTO/>
+		<PARM NAME="CSD_CALLSPEED"  VALUE="pxauthname"/>
+		<PARM NAME="PROXY_AUTHNAME" VALUE="pxauthsecret"/>
+		<PARM NAME="PROXY_AUTHSECRET" VALUE=""/>
+		<PARM NAME="ISP_NAME"  VALUE="World Access ISP"/>
+
+	</CHARACTERISTIC>
+	<CHARACTERISTIC TYPE="ADDRESS">
+		<PARM NAME="BEARER" VALUE="GSM/SMS"/>
+		<PARM NAME="9400410"/>
+		<PARM NAME="SMS_SMCS_ADDRESS" VALUE="+36209400400/>
+	</CHARACTERISTIC>
+	<CHARACTERISTIC TYPE="BOOKMARK">
+		<PARM NAME="NAME" VALUE="My favourite page"/>
+		<PARM NAME="URL" VALUE="http://www.somewhere.com/index.wml"/>
+	</CHARACTERISTIC>
+	<CHARACTERISTIC TYPE="URL" VALUE="startpage/index.wml"/>
+
+	<CHARACTERISTIC TYPE="NAME">
+		<PARM NAME="NAME"  VALUE="Mobilbank"/>
+	</CHARACTERISTIC>
+
+</CHARACTERISTIC-LIST>
--- a/messagingfw/msgcommonutils/rom/msgcommonutils.iby	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgcommonutils/rom/msgcommonutils.iby	Fri Jun 25 16:18:56 2010 +0530
@@ -21,6 +21,5 @@
 // msgcommonutils
 //
 file=ABI_DIR\BUILD_DIR\msgcommonutils.dll     SHARED_LIB_DIR\msgcommonutils.dll
-data=DATAZ_\RESOURCE_FILES_DIR\msgcommonutils.rsc		RESOURCE_FILES_DIR\msgcommonutils.rsc 
 
 #endif   // __MSGCOMMONUTILS_IBY__
--- a/messagingfw/msgsrvnstore/group/bld.inf	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgsrvnstore/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -15,7 +15,7 @@
 
 #include "../mtmbase/group/bld.inf"
 #include "../server/group/bld.inf"
-#include "../serverexe/group/BLD.INF"
+#include "../serverexe/group/bld.inf"
 
 PRJ_EXPORTS
 msgerr.ra  SYMBIAN_MW_LAYER_PLATFORM_EXPORT_PATH(errors/generic/msgerr.ra)
--- a/messagingfw/msgsrvnstore/group/msgerr.ra	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgsrvnstore/group/msgerr.ra	Fri Jun 25 16:18:56 2010 +0530
@@ -1,34 +1,34 @@
-// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-#include <errors/generic/msgerr.rls>
-
-RESOURCE ARRAY r_error_res_msg_server_errors
-	{
-	items=
-		{
-		SINGLE_ERROR
-			{
-			text=r_error_res_msg_no_disk;			// -7000
-			},
-		SINGLE_ERROR
-			{
-			text=r_error_res_msg_wrong_disk;		// -7001
-			}
-		};
-	}
-
-RESOURCE TBUF r_error_res_msg_no_disk			{ buf=STRING_r_error_res_msg_no_disk		; }
-RESOURCE TBUF r_error_res_msg_wrong_disk		{ buf=STRING_r_error_res_msg_wrong_disk	; }
+// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <errors/generic/msgerr.rls>
+
+RESOURCE ARRAY r_error_res_msg_server_errors
+	{
+	items=
+		{
+		SINGLE_ERROR
+			{
+			text=r_error_res_msg_no_disk;			// -7000
+			},
+		SINGLE_ERROR
+			{
+			text=r_error_res_msg_wrong_disk;		// -7001
+			}
+		};
+	}
+
+RESOURCE TBUF r_error_res_msg_no_disk			{ buf=STRING_r_error_res_msg_no_disk		; }
+RESOURCE TBUF r_error_res_msg_wrong_disk		{ buf=STRING_r_error_res_msg_wrong_disk	; }
--- a/messagingfw/msgsrvnstore/server/group/MSGS.mmp	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgsrvnstore/server/group/MSGS.mmp	Fri Jun 25 16:18:56 2010 +0530
@@ -19,6 +19,7 @@
  @file
 */
 
+#include <platform_paths.hrh>
 TARGET        msgs.dll
 TARGETTYPE    dll
 
@@ -99,6 +100,7 @@
 
 START RESOURCE	MSGS.rss
 TARGETPATH resource/messaging
+TARGET MSGS.rsc
 HEADER
 LANG	SC
 END
@@ -166,6 +168,7 @@
 	#endif
 #endif
 
+OS_LAYER_SYSTEMINCLUDE
 
 
 
--- a/messagingfw/msgsrvnstore/server/group/MSGS.rss	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgsrvnstore/server/group/MSGS.rss	Fri Jun 25 16:18:56 2010 +0530
@@ -14,7 +14,8 @@
 //
 
 #include "msgs.rls"
-#include "../inc/MSVSTD.HRH"
+#include <msvstd.hrh>
+#include <msgs.loc>
 
 // Flags - defined in TMsvEntry
 
@@ -59,32 +60,42 @@
 						parent=KMsvRootIndexEntryIdValue;
 						type=KUidMsvServiceEntryValue;
 						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder; 
-						details=STRING_r_server_index_startup1; },
+						details="Local"; },
 		SERVERENTRY {	id=KMsvGlobalInBoxIndexEntryIdValue;	
 						parent=KMsvLocalServiceIndexEntryIdValue; 
 						type=KUidMsvFolderEntryValue; 
 						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder; 
-						details=STRING_r_server_index_startup2; },
+						details=qtn_mce_inbox; },
 		SERVERENTRY {	id=KMsvGlobalOutBoxIndexEntryIdValue;	
 						parent=KMsvLocalServiceIndexEntryIdValue; 
 						type=KUidMsvFolderEntryValue; 
 						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder; 
-						details=STRING_r_server_index_startup3; },
+						details=qtn_mce_outbox; },
 		SERVERENTRY {	id=KMsvDraftEntryIdValue; 
 						parent=KMsvLocalServiceIndexEntryIdValue; 
 						type=KUidMsvFolderEntryValue; 
 						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder; 
-						details=STRING_r_server_index_startup4; },
+						details=qtn_mce_drafts; },
 		SERVERENTRY {	id=KMsvSentEntryIdValue; 
 						parent=KMsvLocalServiceIndexEntryIdValue; 
 						type=KUidMsvFolderEntryValue; 
 						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder; 
-						details=STRING_r_server_index_startup5; },
+						details=qtn_mce_sent_items; },
+		SERVERENTRY {	id=0x1008; 
+						parent=KMsvLocalServiceIndexEntryIdValue; 
+						type=KUidMsvFolderEntryValue; 
+						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder; 
+						details=qtn_mce_documents; },
+		SERVERENTRY {	id=0x1009;	
+						parent=0x1008; 
+						type=KUidMsvFolderEntryValue; 
+						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder; 
+						details=qtn_mce_doc_temp_folder; },
 		SERVERENTRY {	id=KMsvDeletedEntryFolderEntryIdValue; 
 						parent=KMsvLocalServiceIndexEntryIdValue; 
 						type=KUidMsvFolderEntryValue; 
 						flags=KMsvEntryReadOnlyFlag|KMsvEntryStandardFolder|KMsvEntryInvisibleFlag; 
-						details=STRING_r_server_index_startup6; }
+						details="Deleted"; }
 		};
 	}
 
--- a/messagingfw/msgsrvnstore/server/group/MSGS_AutoShutdown.mmp	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgsrvnstore/server/group/MSGS_AutoShutdown.mmp	Fri Jun 25 16:18:56 2010 +0530
@@ -19,6 +19,7 @@
 /**
  @file
 */
+#include <platform_paths.hrh>
 
 
 
@@ -103,6 +104,7 @@
 
 START RESOURCE	MSGS.rss
 TARGETPATH resource/messaging
+TARGET MSGS.rsc
 HEADER
 LANG	SC
 END
@@ -170,6 +172,7 @@
 	#endif
 #endif
 
+OS_LAYER_SYSTEMINCLUDE
 
 
 
--- a/messagingfw/msgsrvnstore/server/group/bld.inf	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgsrvnstore/server/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -14,6 +14,7 @@
 // bld.inf
 //
 
+#include <platform_paths.hrh>
 PRJ_PLATFORMS
 DEFAULT
 
@@ -115,6 +116,12 @@
 msgPriorityDriveList.ini z:/private/1000484b/msgprioritydrivelist.ini
 #endif		// #if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT)
 
+//IBY exports
+../rom/messageserver_rsc.iby  LANGUAGE_OS_LAYER_IBY_EXPORT_PATH(messageserver_rsc.iby)
+../rom/messageserver.hby  CORE_OS_LAYER_IBY_EXPORT_PATH(messageserver.hby)
+
+
+../loc/msgs.loc OS_LAYER_LOC_EXPORT_PATH(msgs.loc)
 PRJ_MMPFILES
 MSGS.mmp
 MSGS_AutoShutdown.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/loc/msgs.loc	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2000 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*     This file contains the localised strings for msgs
+*
+*/
+
+
+
+//  LOCALISATION STRINGS
+
+// d: Main view list item. 
+// d: Inbox
+// l: list_single_large_graphic_pane_t1
+//
+#define qtn_mce_inbox "Inbox"
+
+// d: Main view list item. 
+// d: Documents
+// l: list_single_large_graphic_pane_t1
+//
+#define qtn_mce_documents "Documents"
+
+// d: Main view list item. 
+// d: Drafts
+// l: list_single_large_graphic_pane_t1
+//
+#define qtn_mce_drafts "Drafts"
+
+// d: Main view list item. 
+// d: Sent items
+// l: list_single_large_graphic_pane_t1
+//
+#define qtn_mce_sent_items "Sent items"
+
+// d: Main view list item. 
+// d: Outbox
+// l: list_single_large_graphic_pane_t1
+//
+#define qtn_mce_outbox "Outbox"
+
+// d: Documents view list item. First item of the list when Documents folder is opened.
+// l: list_double_graphic_pane_t1
+//
+#define qtn_mce_doc_temp_folder "Templates"
+
+
+// End of File
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/rom/messageserver.hby	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,9 @@
+#ifndef __MESSAGESERVER_HBY__
+#define __MESSAGESERVER_HBY__
+
+//
+// Moved to \s60\mce\rom\messageserver_rsc.iby
+//
+//data=MULTI_LINGUIFY(RSC DATAZ_\resource\messaging\MSGS	resource\messaging\MSGS)
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/rom/messageserver_rsc.iby	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   Defines Series60 localized files
+*
+*/
+
+
+
+#ifndef __MESSAGESERVER_RSC_IBY__
+#define __MESSAGESERVER_RSC_IBY__
+
+//Resource file(s) for Message server
+data=DATAZ_\MTM_RESOURCE_DIR\msgs.rsc                           MTM_RESOURCE_DIR\msgs.rsc
+#endif
--- a/messagingfw/msgsrvnstore/serverexe/group/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// MSG.INF
-// 
-//
-
-PRJ_PLATFORMS
-
-PRJ_EXPORTS
-
-PRJ_MMPFILES
-MSEX.MMP
-
-PRJ_TESTMMPFILES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/serverexe/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,25 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// MSG.INF
+// 
+//
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+
+PRJ_MMPFILES
+MSEX.MMP
+
+PRJ_TESTMMPFILES
--- a/messagingfw/msgtest/group/bld.inf	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtest/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -13,7 +13,7 @@
 // Description:
 //
 
-#include "../testutils/group/BLD.INF"
+#include "../testutils/group/bld.inf"
 #include "../tools/group/bld.inf"
 #include "../integration/group/bld.inf"
 #include "../testsuites/group/bld.inf"
--- a/messagingfw/msgtest/targetautomation/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-#include "Delay/bld.inf"
-#include "Rom/bld.inf"
-#include "SerialLog/bld.inf"
-#include "StayAwake/bld.inf"
-#include "TechviewStart/bld.inf"
-
-#include "../../msgtests/imcmtsrc/testrom/bld.inf"
-#include "../../msgtests/impstsrc/testrom/bld.inf"
-#include "../../msgtests/imuttsrc/testrom/bld.inf"
-#include "../../msgtests/msgstsrc/testrom/bld.inf"
-#include "../../msgtests/popstsrc/testrom/bld.inf"
-#include "../../msgtests/sendtsrc/testrom/bld.inf"
-#include "../../msgtests/smcm/test/testrom/bld.inf"
-#include "../../msgtests/smtstsrc/testrom/bld.inf"
-#include "../testrom/bld.inf"
-
-
--- a/messagingfw/msgtest/targetautomation/Delay/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-PRJ_TESTMMPFILES
-../../Automate/Delay/t_delay.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/targetautomation/Delay/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,17 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRJ_TESTMMPFILES
+../../Automate/Delay/t_delay.mmp
--- a/messagingfw/msgtest/targetautomation/SerialLog/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-PRJ_TESTMMPFILES
-../../Automate/SerialLog/t_seriallog.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/targetautomation/SerialLog/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,17 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRJ_TESTMMPFILES
+../../Automate/SerialLog/t_seriallog.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/targetautomation/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,32 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "Delay/bld.inf"
+#include "Rom/bld.inf"
+#include "SerialLog/bld.inf"
+#include "StayAwake/bld.inf"
+#include "TechviewStart/bld.inf"
+
+#include "../../msgtests/imcmtsrc/testrom/bld.inf"
+#include "../../msgtests/impstsrc/testrom/bld.inf"
+#include "../../msgtests/imuttsrc/testrom/bld.inf"
+#include "../../msgtests/msgstsrc/testrom/bld.inf"
+#include "../../msgtests/popstsrc/testrom/bld.inf"
+#include "../../msgtests/sendtsrc/testrom/bld.inf"
+#include "../../msgtests/smcm/test/testrom/bld.inf"
+#include "../../msgtests/smtstsrc/testrom/bld.inf"
+#include "../testrom/bld.inf"
+
+
--- a/messagingfw/msgtest/testutils/base/group/TestUtils.mdl	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtest/testutils/base/group/TestUtils.mdl	Fri Jun 25 16:18:56 2010 +0530
@@ -1,791 +1,791 @@
-
-(object Petal
-    version    	43
-    _written   	"Rose 6.1.9113.5"
-    charSet    	0)
-
-(object Design "Logical View"
-    is_unit    	TRUE
-    is_loaded  	TRUE
-    quid       	"38C3E2AD002B"
-    defaults   	(object defaults
-	rightMargin 	0.250000
-	leftMargin 	0.250000
-	topMargin  	0.250000
-	bottomMargin 	0.500000
-	pageOverlap 	0.250000
-	clipIconLabels 	TRUE
-	autoResize 	TRUE
-	snapToGrid 	TRUE
-	gridX      	16
-	gridY      	16
-	defaultFont 	(object Font
-	    size       	10
-	    face       	"Arial"
-	    bold       	FALSE
-	    italics    	FALSE
-	    underline  	FALSE
-	    strike     	FALSE
-	    color      	0
-	    default_color 	TRUE)
-	showMessageNum 	1
-	showClassOfObject 	TRUE
-	notation   	"Unified")
-    root_usecase_package 	(object Class_Category "Use Case View"
-	quid       	"38C3E2AD002D"
-	exportControl 	"Public"
-	global     	TRUE
-	logical_models 	(list unit_reference_list)
-	logical_presentations 	(list unit_reference_list
-	    (object UseCaseDiagram "Main"
-		quid       	"38C3E2AD004A"
-		title      	"Main"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    root_category 	(object Class_Category "Logical View"
-	quid       	"38C3E2AD002C"
-	exportControl 	"Public"
-	global     	TRUE
-	subsystem  	"Component View"
-	quidu      	"38C3E2AD002E"
-	logical_models 	(list unit_reference_list
-	    (object Class_Category "E32"
-		quid       	"38C3E3140188"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "CActive"
-			quid       	"38C3E31A01EA")
-		    (object Class "CTimer"
-			quid       	"38C3E3230360")
-		    (object Class "CBase"
-			quid       	"38C3E32B03C6"))
-		logical_presentations 	(list unit_reference_list))
-	    (object Class_Category "Msg"
-		quid       	"38C3E3350103"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class_Category "TestUtils"
-			quid       	"38C3E33A039F"
-			exportControl 	"Public"
-			logical_models 	(list unit_reference_list
-			    (object Class "CTestUtils"
-				quid       	"38C3E2B70116"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"38C3E3C30161"
-					supplier   	"Logical View::E32::CBase"
-					quidu      	"38C3E32B03C6"))
-				operations 	(list Operations
-				    (object Operation "Printf"
-					quid       	"38C3E3DE01A6"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "DefaultLogFileName"
-					quid       	"38C3E527019F"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateFlogger"
-					quid       	"38C3E52D032E"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CloseFlogger"
-					quid       	"38C3E5360183"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "TestStart"
-					quid       	"38C3E53C00A5"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "TestFinish"
-					quid       	"38C3E5410052"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "TestHarnessCompleted"
-					quid       	"38C3E54703CC"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "TestHarnessFailed"
-					quid       	"38C3E5510330"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "WriteComment"
-					quid       	"38C3E55A00A8"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateAllTestDirectories"
-					quid       	"38C3E5610149"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "DisplayLogL"
-					quid       	"38C3E56A00C9"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "AppendEol"
-					quid       	"38C3E57402C2"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "DisplayFile"
-					quid       	"38C3E57D03D4"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "FileSession"
-					quid       	"38C3E58201C8"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "DisplayMenu"
-					quid       	"38C3E58B0199"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "ResetMenu"
-					quid       	"38C3E59B00AC"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "AppendToMenuL"
-					quid       	"38C3E5A300E9"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "MenuCount"
-					quid       	"38C3E5AB000E"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "ClearScreen"
-					quid       	"38C3E5B400BC"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "SetLogToConsole"
-					quid       	"38C3E5BB033D"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "SetLogToFile"
-					quid       	"38C3E5C40191"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "Test"
-					quid       	"38C3E5CD02B6"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "RunAuto"
-					quid       	"38C3E5D201FF"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "SetRunAuto"
-					quid       	"38C3E5D70008"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0))
-				class_attributes 	(list class_attribute_list
-				    (object ClassAttribute "iMenu"
-					quid       	"38C3E5DF003B"
-					exportControl 	"Protected")
-				    (object ClassAttribute "iFs"
-					quid       	"38C3E5E501A2"
-					exportControl 	"Protected")
-				    (object ClassAttribute "iRTest"
-					quid       	"38C3E5E802E7"
-					exportControl 	"Protected")
-				    (object ClassAttribute "iTestLogFile"
-					quid       	"38C3E5EE03A4"
-					exportControl 	"Protected")
-				    (object ClassAttribute "iLogToConsole"
-					quid       	"38C3E5F70036"
-					exportControl 	"Protected")
-				    (object ClassAttribute "iLogToFile"
-					quid       	"38C3E5FE02C1"
-					exportControl 	"Protected")
-				    (object ClassAttribute "iFlogger"
-					quid       	"38C3E60502CB"
-					exportControl 	"Protected")
-				    (object ClassAttribute "iRunAuto"
-					quid       	"38C3E60C00EA"
-					exportControl 	"Protected")))
-			    (object Class "CTestActive"
-				quid       	"38C3E2F30220")
-			    (object Class "CTestTimer"
-				quid       	"38C3E2FA022B")
-			    (object Class "CFaxTestUtils"
-				quid       	"38C3E2EB026F"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"38C3E3B80206"
-					supplier   	"Logical View::Msg::TestUtils::CMsvTestUtils"
-					quidu      	"38C3E2C1014C")))
-			    (object Class "CSmsTestUtils"
-				quid       	"38C3E2D10037"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"38C3E3BC03D8"
-					supplier   	"Logical View::Msg::TestUtils::CMsvTestUtils"
-					quidu      	"38C3E2C1014C")))
-			    (object Class "CEmailTestUtils"
-				quid       	"38C3E2C80201"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"38C3E3BA02F9"
-					supplier   	"Logical View::Msg::TestUtils::CMsvTestUtils"
-					quidu      	"38C3E2C1014C")))
-			    (object Class "CMsvTestUtils"
-				quid       	"38C3E2C1014C"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"38C3E3C001D5"
-					supplier   	"Logical View::Msg::TestUtils::CTestUtils"
-					quidu      	"38C3E2B70116"))
-				operations 	(list Operations
-				    (object Operation "GoServerSideL"
-					quid       	"38C3EA6700E4"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "GoClientSideL"
-					quid       	"38C3EA6D0313"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "Reset"
-					quid       	"38C3EA7301D1"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateRegistryObjectAndControlL"
-					quid       	"38C3EA790248"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "InstallMtmGroupL"
-					quid       	"38C3EA9000BA"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CleanMessageFolderL"
-					quid       	"38C3EA9A02BE"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateAllTestDirectories"
-					quid       	"38C3EAA802E6"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateServerMtmRegL"
-					quid       	"38C3EAB20146"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateServiceL"
-					quid       	"38C3EABC021C"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "DeleteServiceL"
-					quid       	"38C3EAC303B7"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "FindChildrenL"
-					quid       	"38C3EACA010E"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "SetEntryL"
-					quid       	"38C3EAD602C4"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "ChangeEntryL"
-					quid       	"38C3EADF0303"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateEntryL"
-					quid       	"38C3EAE900FF"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateAndSetEntryL"
-					quid       	"38C3EAEE0084"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "DeleteEntryL"
-					quid       	"38C3EAF60202"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "Entry"
-					quid       	"38C3EB000116"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "EditStoreL"
-					quid       	"38C3EB07035B"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "ReadStoreL"
-					quid       	"38C3EB0E012A"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "ChildrenWithTypeLC"
-					quid       	"38C3EB140395"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "SetSortTypeL"
-					quid       	"38C3EB1C009E"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "InstantiateClientMtmsL"
-					quid       	"38C3EB2F014F"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "InstantiateServerMtmsL"
-					quid       	"38C3EB39024E"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "DeleteServicesL"
-					quid       	"38C3EB420355"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateServicesL"
-					quid       	"38C3EB4D006C"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "FindExistingServicesL"
-					quid       	"38C3EB550321"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CreateServerMtmRegsL"
-					quid       	"38C3EB5C0353"
-					concurrency 	"Sequential"
-					opExportControl 	"Public"
-					uid        	0)
-				    (object Operation "CMsvTestUtils"
-					quid       	"38C3EB6A00BE"
-					concurrency 	"Sequential"
-					opExportControl 	"Protected"
-					uid        	0)
-				    (object Operation "ConstructL"
-					quid       	"38C3EB7501A0"
-					concurrency 	"Sequential"
-					opExportControl 	"Protected"
-					uid        	0)
-				    (object Operation "InstantiateClientMtmL"
-					quid       	"38C3EB8D0032"
-					concurrency 	"Sequential"
-					opExportControl 	"Protected"
-					uid        	0)
-				    (object Operation "InstantiateServerMtmL"
-					quid       	"38C3EB9502DD"
-					concurrency 	"Sequential"
-					opExportControl 	"Protected"
-					uid        	0)
-				    (object Operation "ServiceIdL"
-					quid       	"38C3EBA40176"
-					concurrency 	"Sequential"
-					opExportControl 	"Protected"
-					uid        	0)
-				    (object Operation "WriteBodyDataL"
-					quid       	"38C3EBAF0334"
-					concurrency 	"Sequential"
-					opExportControl 	"Protected"
-					uid        	0)
-				    (object Operation "ListChildrenL"
-					quid       	"38C3EBB80160"
-					concurrency 	"Sequential"
-					opExportControl 	"Protected"
-					uid        	0))
-				class_attributes 	(list class_attribute_list
-				    (object ClassAttribute "iMsvSession"
-					quid       	"38C3EBC503C2"
-					exportControl 	"Public")
-				    (object ClassAttribute "iMsvEntry"
-					quid       	"38C3EBCC01AF"
-					exportControl 	"Public")
-				    (object ClassAttribute "iServerEntry"
-					quid       	"38C3EBD20063"
-					exportControl 	"Public")
-				    (object ClassAttribute "iClientMtmRegistry"
-					quid       	"38C3EBD801B6"
-					exportControl 	"Public"))))
-			logical_presentations 	(list unit_reference_list
-			    (object ClassDiagram "TestUtils"
-				quid       	"38C3E38B014D"
-				title      	"TestUtils"
-				zoom       	100
-				max_height 	28350
-				max_width  	21600
-				origin_x   	0
-				origin_y   	0
-				items      	(list diagram_item_list
-				    (object ClassView "Class" "Logical View::Msg::TestUtils::CTestUtils" @1
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(368, 1216)
-					label      	(object ItemLabel
-					    Parent_View 	@1
-					    location   	(111, 360)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	514
-					    justify    	0
-					    label      	"CTestUtils")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"38C3E2B70116"
-					compartment 	(object Compartment
-					    Parent_View 	@1
-					    location   	(111, 421)
-					    icon_style 	"Icon"
-					    fill_color 	13434879
-					    anchor     	2
-					    nlines     	33
-					    max_width  	512)
-					width      	532
-					height     	1736
-					annotation 	8
-					autoResize 	TRUE)
-				    (object ClassView "Class" "Logical View::Msg::TestUtils::CFaxTestUtils" @2
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(1840, 1488)
-					label      	(object ItemLabel
-					    Parent_View 	@2
-					    location   	(1696, 1437)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	288
-					    justify    	0
-					    label      	"CFaxTestUtils")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"38C3E2EB026F"
-					width      	306
-					height     	126
-					annotation 	8
-					autoResize 	TRUE)
-				    (object ClassView "Class" "Logical View::Msg::TestUtils::CEmailTestUtils" @3
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(1840, 1216)
-					label      	(object ItemLabel
-					    Parent_View 	@3
-					    location   	(1681, 1165)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	318
-					    justify    	0
-					    label      	"CEmailTestUtils")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"38C3E2C80201"
-					width      	336
-					height     	126
-					annotation 	8
-					autoResize 	TRUE)
-				    (object ClassView "Class" "Logical View::Msg::TestUtils::CMsvTestUtils" @4
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(1104, 1216)
-					label      	(object ItemLabel
-					    Parent_View 	@4
-					    location   	(761, 210)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	686
-					    justify    	0
-					    label      	"CMsvTestUtils")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"38C3E2C1014C"
-					compartment 	(object Compartment
-					    Parent_View 	@4
-					    location   	(761, 271)
-					    icon_style 	"Icon"
-					    fill_color 	13434879
-					    anchor     	2
-					    nlines     	39
-					    max_width  	684)
-					width      	704
-					height     	2036
-					annotation 	8
-					autoResize 	TRUE)
-				    (object ClassView "Class" "Logical View::Msg::TestUtils::CSmsTestUtils" @5
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(1840, 944)
-					label      	(object ItemLabel
-					    Parent_View 	@5
-					    location   	(1689, 893)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	302
-					    justify    	0
-					    label      	"CSmsTestUtils")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"38C3E2D10037"
-					width      	320
-					height     	126
-					annotation 	8
-					autoResize 	TRUE)
-				    (object ClassView "Class" "Logical View::E32::CBase" @6
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(352, 144)
-					label      	(object ItemLabel
-					    Parent_View 	@6
-					    location   	(271, 70)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	162
-					    justify    	0
-					    label      	"CBase")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"38C3E32B03C6"
-					height     	172
-					annotation 	8
-					autoResize 	TRUE)
-				    (object InheritView "" @7
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"38C3E3B80206"
-					client     	@2
-					supplier   	@4
-					line_style 	0)
-				    (object InheritView "" @8
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"38C3E3BA02F9"
-					client     	@3
-					supplier   	@4
-					line_style 	0)
-				    (object InheritView "" @9
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"38C3E3BC03D8"
-					client     	@5
-					supplier   	@4
-					line_style 	0)
-				    (object InheritView "" @10
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"38C3E3C001D5"
-					client     	@4
-					supplier   	@1
-					line_style 	0)
-				    (object InheritView "" @11
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"38C3E3C30161"
-					client     	@1
-					supplier   	@6
-					line_style 	0)))))
-		    (object Class_Category "MSGS"
-			quid       	"38C3E3420057"
-			exportControl 	"Public"
-			logical_models 	(list unit_reference_list
-			    (object Class "MMsvSessionObserver"
-				quid       	"38C3E3470004"))
-			logical_presentations 	(list unit_reference_list)))
-		logical_presentations 	(list unit_reference_list)))
-	logical_presentations 	(list unit_reference_list
-	    (object ClassDiagram "Main"
-		quid       	"38C3E2AD0032"
-		title      	"Main"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    root_subsystem 	(object SubSystem "Component View"
-	quid       	"38C3E2AD002E"
-	physical_models 	(list unit_reference_list)
-	physical_presentations 	(list unit_reference_list
-	    (object Module_Diagram "Main"
-		quid       	"38C3E2AD0049"
-		title      	"Main"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    process_structure 	(object Processes
-	quid       	"38C3E2AD002F"
-	ProcsNDevs 	(list
-	    (object Process_Diagram "Deployment View"
-		quid       	"38C3E2AD0031"
-		title      	"Deployment View"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    properties 	(object Properties
-	attributes 	(list Attribute_Set
-	    (object Attribute
-		tool       	"DDL"
-		name       	"propertyId"
-		value      	"809135966")
-	    (object Attribute
-		tool       	"DDL"
-		name       	"default__Project"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"DDL"
-			name       	"Directory"
-			value      	"AUTO GENERATE")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DataBase"
-			value      	("DataBaseSet" 800))
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DataBaseSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"DDL"
-				name       	"ANSI"
-				value      	800)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"Oracle"
-				value      	801)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"SQLServer"
-				value      	802)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"Sybase"
-				value      	803)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"Watcom"
-				value      	804)))
-		    (object Attribute
-			tool       	"DDL"
-			name       	"PrimaryKeyColumnName"
-			value      	"Id")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"PrimaryKeyColumnType"
-			value      	"NUMBER(5)")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"ViewName"
-			value      	"V_")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"TableName"
-			value      	"T_")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"InheritSuffix"
-			value      	"_V")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DropClause"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"BaseViews"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DDLScriptFilename"
-			value      	"DDL1.SQL")))
-	    (object Attribute
-		tool       	"DDL"
-		name       	"default__Attribute"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"DDL"
-			name       	"ColumnType"
-			value      	"VARCHAR")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"Length"
-			value      	"")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"NullsOK"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"PrimaryKey"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"Unique"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"CompositeUnique"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"CheckConstraint"
-			value      	"")))
-	    (object Attribute
-		tool       	"DDL"
-		name       	"HiddenTool"
-		value      	FALSE)
-	    (object Attribute
-		tool       	"Rose Model Integrator"
-		name       	"HiddenTool"
-		value      	FALSE)
-	    (object Attribute
-		tool       	"Version Control"
-		name       	"HiddenTool"
-		value      	FALSE))
-	quid       	"38C3E2AD0030"))
+
+(object Petal
+    version    	43
+    _written   	"Rose 6.1.9113.5"
+    charSet    	0)
+
+(object Design "Logical View"
+    is_unit    	TRUE
+    is_loaded  	TRUE
+    quid       	"38C3E2AD002B"
+    defaults   	(object defaults
+	rightMargin 	0.250000
+	leftMargin 	0.250000
+	topMargin  	0.250000
+	bottomMargin 	0.500000
+	pageOverlap 	0.250000
+	clipIconLabels 	TRUE
+	autoResize 	TRUE
+	snapToGrid 	TRUE
+	gridX      	16
+	gridY      	16
+	defaultFont 	(object Font
+	    size       	10
+	    face       	"Arial"
+	    bold       	FALSE
+	    italics    	FALSE
+	    underline  	FALSE
+	    strike     	FALSE
+	    color      	0
+	    default_color 	TRUE)
+	showMessageNum 	1
+	showClassOfObject 	TRUE
+	notation   	"Unified")
+    root_usecase_package 	(object Class_Category "Use Case View"
+	quid       	"38C3E2AD002D"
+	exportControl 	"Public"
+	global     	TRUE
+	logical_models 	(list unit_reference_list)
+	logical_presentations 	(list unit_reference_list
+	    (object UseCaseDiagram "Main"
+		quid       	"38C3E2AD004A"
+		title      	"Main"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    root_category 	(object Class_Category "Logical View"
+	quid       	"38C3E2AD002C"
+	exportControl 	"Public"
+	global     	TRUE
+	subsystem  	"Component View"
+	quidu      	"38C3E2AD002E"
+	logical_models 	(list unit_reference_list
+	    (object Class_Category "E32"
+		quid       	"38C3E3140188"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "CActive"
+			quid       	"38C3E31A01EA")
+		    (object Class "CTimer"
+			quid       	"38C3E3230360")
+		    (object Class "CBase"
+			quid       	"38C3E32B03C6"))
+		logical_presentations 	(list unit_reference_list))
+	    (object Class_Category "Msg"
+		quid       	"38C3E3350103"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class_Category "TestUtils"
+			quid       	"38C3E33A039F"
+			exportControl 	"Public"
+			logical_models 	(list unit_reference_list
+			    (object Class "CTestUtils"
+				quid       	"38C3E2B70116"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"38C3E3C30161"
+					supplier   	"Logical View::E32::CBase"
+					quidu      	"38C3E32B03C6"))
+				operations 	(list Operations
+				    (object Operation "Printf"
+					quid       	"38C3E3DE01A6"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "DefaultLogFileName"
+					quid       	"38C3E527019F"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateFlogger"
+					quid       	"38C3E52D032E"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CloseFlogger"
+					quid       	"38C3E5360183"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "TestStart"
+					quid       	"38C3E53C00A5"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "TestFinish"
+					quid       	"38C3E5410052"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "TestHarnessCompleted"
+					quid       	"38C3E54703CC"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "TestHarnessFailed"
+					quid       	"38C3E5510330"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "WriteComment"
+					quid       	"38C3E55A00A8"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateAllTestDirectories"
+					quid       	"38C3E5610149"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "DisplayLogL"
+					quid       	"38C3E56A00C9"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "AppendEol"
+					quid       	"38C3E57402C2"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "DisplayFile"
+					quid       	"38C3E57D03D4"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "FileSession"
+					quid       	"38C3E58201C8"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "DisplayMenu"
+					quid       	"38C3E58B0199"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "ResetMenu"
+					quid       	"38C3E59B00AC"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "AppendToMenuL"
+					quid       	"38C3E5A300E9"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "MenuCount"
+					quid       	"38C3E5AB000E"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "ClearScreen"
+					quid       	"38C3E5B400BC"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "SetLogToConsole"
+					quid       	"38C3E5BB033D"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "SetLogToFile"
+					quid       	"38C3E5C40191"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "Test"
+					quid       	"38C3E5CD02B6"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "RunAuto"
+					quid       	"38C3E5D201FF"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "SetRunAuto"
+					quid       	"38C3E5D70008"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0))
+				class_attributes 	(list class_attribute_list
+				    (object ClassAttribute "iMenu"
+					quid       	"38C3E5DF003B"
+					exportControl 	"Protected")
+				    (object ClassAttribute "iFs"
+					quid       	"38C3E5E501A2"
+					exportControl 	"Protected")
+				    (object ClassAttribute "iRTest"
+					quid       	"38C3E5E802E7"
+					exportControl 	"Protected")
+				    (object ClassAttribute "iTestLogFile"
+					quid       	"38C3E5EE03A4"
+					exportControl 	"Protected")
+				    (object ClassAttribute "iLogToConsole"
+					quid       	"38C3E5F70036"
+					exportControl 	"Protected")
+				    (object ClassAttribute "iLogToFile"
+					quid       	"38C3E5FE02C1"
+					exportControl 	"Protected")
+				    (object ClassAttribute "iFlogger"
+					quid       	"38C3E60502CB"
+					exportControl 	"Protected")
+				    (object ClassAttribute "iRunAuto"
+					quid       	"38C3E60C00EA"
+					exportControl 	"Protected")))
+			    (object Class "CTestActive"
+				quid       	"38C3E2F30220")
+			    (object Class "CTestTimer"
+				quid       	"38C3E2FA022B")
+			    (object Class "CFaxTestUtils"
+				quid       	"38C3E2EB026F"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"38C3E3B80206"
+					supplier   	"Logical View::Msg::TestUtils::CMsvTestUtils"
+					quidu      	"38C3E2C1014C")))
+			    (object Class "CSmsTestUtils"
+				quid       	"38C3E2D10037"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"38C3E3BC03D8"
+					supplier   	"Logical View::Msg::TestUtils::CMsvTestUtils"
+					quidu      	"38C3E2C1014C")))
+			    (object Class "CEmailTestUtils"
+				quid       	"38C3E2C80201"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"38C3E3BA02F9"
+					supplier   	"Logical View::Msg::TestUtils::CMsvTestUtils"
+					quidu      	"38C3E2C1014C")))
+			    (object Class "CMsvTestUtils"
+				quid       	"38C3E2C1014C"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"38C3E3C001D5"
+					supplier   	"Logical View::Msg::TestUtils::CTestUtils"
+					quidu      	"38C3E2B70116"))
+				operations 	(list Operations
+				    (object Operation "GoServerSideL"
+					quid       	"38C3EA6700E4"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "GoClientSideL"
+					quid       	"38C3EA6D0313"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "Reset"
+					quid       	"38C3EA7301D1"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateRegistryObjectAndControlL"
+					quid       	"38C3EA790248"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "InstallMtmGroupL"
+					quid       	"38C3EA9000BA"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CleanMessageFolderL"
+					quid       	"38C3EA9A02BE"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateAllTestDirectories"
+					quid       	"38C3EAA802E6"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateServerMtmRegL"
+					quid       	"38C3EAB20146"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateServiceL"
+					quid       	"38C3EABC021C"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "DeleteServiceL"
+					quid       	"38C3EAC303B7"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "FindChildrenL"
+					quid       	"38C3EACA010E"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "SetEntryL"
+					quid       	"38C3EAD602C4"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "ChangeEntryL"
+					quid       	"38C3EADF0303"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateEntryL"
+					quid       	"38C3EAE900FF"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateAndSetEntryL"
+					quid       	"38C3EAEE0084"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "DeleteEntryL"
+					quid       	"38C3EAF60202"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "Entry"
+					quid       	"38C3EB000116"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "EditStoreL"
+					quid       	"38C3EB07035B"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "ReadStoreL"
+					quid       	"38C3EB0E012A"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "ChildrenWithTypeLC"
+					quid       	"38C3EB140395"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "SetSortTypeL"
+					quid       	"38C3EB1C009E"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "InstantiateClientMtmsL"
+					quid       	"38C3EB2F014F"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "InstantiateServerMtmsL"
+					quid       	"38C3EB39024E"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "DeleteServicesL"
+					quid       	"38C3EB420355"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateServicesL"
+					quid       	"38C3EB4D006C"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "FindExistingServicesL"
+					quid       	"38C3EB550321"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CreateServerMtmRegsL"
+					quid       	"38C3EB5C0353"
+					concurrency 	"Sequential"
+					opExportControl 	"Public"
+					uid        	0)
+				    (object Operation "CMsvTestUtils"
+					quid       	"38C3EB6A00BE"
+					concurrency 	"Sequential"
+					opExportControl 	"Protected"
+					uid        	0)
+				    (object Operation "ConstructL"
+					quid       	"38C3EB7501A0"
+					concurrency 	"Sequential"
+					opExportControl 	"Protected"
+					uid        	0)
+				    (object Operation "InstantiateClientMtmL"
+					quid       	"38C3EB8D0032"
+					concurrency 	"Sequential"
+					opExportControl 	"Protected"
+					uid        	0)
+				    (object Operation "InstantiateServerMtmL"
+					quid       	"38C3EB9502DD"
+					concurrency 	"Sequential"
+					opExportControl 	"Protected"
+					uid        	0)
+				    (object Operation "ServiceIdL"
+					quid       	"38C3EBA40176"
+					concurrency 	"Sequential"
+					opExportControl 	"Protected"
+					uid        	0)
+				    (object Operation "WriteBodyDataL"
+					quid       	"38C3EBAF0334"
+					concurrency 	"Sequential"
+					opExportControl 	"Protected"
+					uid        	0)
+				    (object Operation "ListChildrenL"
+					quid       	"38C3EBB80160"
+					concurrency 	"Sequential"
+					opExportControl 	"Protected"
+					uid        	0))
+				class_attributes 	(list class_attribute_list
+				    (object ClassAttribute "iMsvSession"
+					quid       	"38C3EBC503C2"
+					exportControl 	"Public")
+				    (object ClassAttribute "iMsvEntry"
+					quid       	"38C3EBCC01AF"
+					exportControl 	"Public")
+				    (object ClassAttribute "iServerEntry"
+					quid       	"38C3EBD20063"
+					exportControl 	"Public")
+				    (object ClassAttribute "iClientMtmRegistry"
+					quid       	"38C3EBD801B6"
+					exportControl 	"Public"))))
+			logical_presentations 	(list unit_reference_list
+			    (object ClassDiagram "TestUtils"
+				quid       	"38C3E38B014D"
+				title      	"TestUtils"
+				zoom       	100
+				max_height 	28350
+				max_width  	21600
+				origin_x   	0
+				origin_y   	0
+				items      	(list diagram_item_list
+				    (object ClassView "Class" "Logical View::Msg::TestUtils::CTestUtils" @1
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(368, 1216)
+					label      	(object ItemLabel
+					    Parent_View 	@1
+					    location   	(111, 360)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	514
+					    justify    	0
+					    label      	"CTestUtils")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"38C3E2B70116"
+					compartment 	(object Compartment
+					    Parent_View 	@1
+					    location   	(111, 421)
+					    icon_style 	"Icon"
+					    fill_color 	13434879
+					    anchor     	2
+					    nlines     	33
+					    max_width  	512)
+					width      	532
+					height     	1736
+					annotation 	8
+					autoResize 	TRUE)
+				    (object ClassView "Class" "Logical View::Msg::TestUtils::CFaxTestUtils" @2
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(1840, 1488)
+					label      	(object ItemLabel
+					    Parent_View 	@2
+					    location   	(1696, 1437)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	288
+					    justify    	0
+					    label      	"CFaxTestUtils")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"38C3E2EB026F"
+					width      	306
+					height     	126
+					annotation 	8
+					autoResize 	TRUE)
+				    (object ClassView "Class" "Logical View::Msg::TestUtils::CEmailTestUtils" @3
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(1840, 1216)
+					label      	(object ItemLabel
+					    Parent_View 	@3
+					    location   	(1681, 1165)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	318
+					    justify    	0
+					    label      	"CEmailTestUtils")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"38C3E2C80201"
+					width      	336
+					height     	126
+					annotation 	8
+					autoResize 	TRUE)
+				    (object ClassView "Class" "Logical View::Msg::TestUtils::CMsvTestUtils" @4
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(1104, 1216)
+					label      	(object ItemLabel
+					    Parent_View 	@4
+					    location   	(761, 210)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	686
+					    justify    	0
+					    label      	"CMsvTestUtils")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"38C3E2C1014C"
+					compartment 	(object Compartment
+					    Parent_View 	@4
+					    location   	(761, 271)
+					    icon_style 	"Icon"
+					    fill_color 	13434879
+					    anchor     	2
+					    nlines     	39
+					    max_width  	684)
+					width      	704
+					height     	2036
+					annotation 	8
+					autoResize 	TRUE)
+				    (object ClassView "Class" "Logical View::Msg::TestUtils::CSmsTestUtils" @5
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(1840, 944)
+					label      	(object ItemLabel
+					    Parent_View 	@5
+					    location   	(1689, 893)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	302
+					    justify    	0
+					    label      	"CSmsTestUtils")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"38C3E2D10037"
+					width      	320
+					height     	126
+					annotation 	8
+					autoResize 	TRUE)
+				    (object ClassView "Class" "Logical View::E32::CBase" @6
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(352, 144)
+					label      	(object ItemLabel
+					    Parent_View 	@6
+					    location   	(271, 70)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	162
+					    justify    	0
+					    label      	"CBase")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"38C3E32B03C6"
+					height     	172
+					annotation 	8
+					autoResize 	TRUE)
+				    (object InheritView "" @7
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"38C3E3B80206"
+					client     	@2
+					supplier   	@4
+					line_style 	0)
+				    (object InheritView "" @8
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"38C3E3BA02F9"
+					client     	@3
+					supplier   	@4
+					line_style 	0)
+				    (object InheritView "" @9
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"38C3E3BC03D8"
+					client     	@5
+					supplier   	@4
+					line_style 	0)
+				    (object InheritView "" @10
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"38C3E3C001D5"
+					client     	@4
+					supplier   	@1
+					line_style 	0)
+				    (object InheritView "" @11
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"38C3E3C30161"
+					client     	@1
+					supplier   	@6
+					line_style 	0)))))
+		    (object Class_Category "MSGS"
+			quid       	"38C3E3420057"
+			exportControl 	"Public"
+			logical_models 	(list unit_reference_list
+			    (object Class "MMsvSessionObserver"
+				quid       	"38C3E3470004"))
+			logical_presentations 	(list unit_reference_list)))
+		logical_presentations 	(list unit_reference_list)))
+	logical_presentations 	(list unit_reference_list
+	    (object ClassDiagram "Main"
+		quid       	"38C3E2AD0032"
+		title      	"Main"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    root_subsystem 	(object SubSystem "Component View"
+	quid       	"38C3E2AD002E"
+	physical_models 	(list unit_reference_list)
+	physical_presentations 	(list unit_reference_list
+	    (object Module_Diagram "Main"
+		quid       	"38C3E2AD0049"
+		title      	"Main"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    process_structure 	(object Processes
+	quid       	"38C3E2AD002F"
+	ProcsNDevs 	(list
+	    (object Process_Diagram "Deployment View"
+		quid       	"38C3E2AD0031"
+		title      	"Deployment View"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    properties 	(object Properties
+	attributes 	(list Attribute_Set
+	    (object Attribute
+		tool       	"DDL"
+		name       	"propertyId"
+		value      	"809135966")
+	    (object Attribute
+		tool       	"DDL"
+		name       	"default__Project"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"DDL"
+			name       	"Directory"
+			value      	"AUTO GENERATE")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DataBase"
+			value      	("DataBaseSet" 800))
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DataBaseSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"DDL"
+				name       	"ANSI"
+				value      	800)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"Oracle"
+				value      	801)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"SQLServer"
+				value      	802)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"Sybase"
+				value      	803)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"Watcom"
+				value      	804)))
+		    (object Attribute
+			tool       	"DDL"
+			name       	"PrimaryKeyColumnName"
+			value      	"Id")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"PrimaryKeyColumnType"
+			value      	"NUMBER(5)")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"ViewName"
+			value      	"V_")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"TableName"
+			value      	"T_")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"InheritSuffix"
+			value      	"_V")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DropClause"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"BaseViews"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DDLScriptFilename"
+			value      	"DDL1.SQL")))
+	    (object Attribute
+		tool       	"DDL"
+		name       	"default__Attribute"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"DDL"
+			name       	"ColumnType"
+			value      	"VARCHAR")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"Length"
+			value      	"")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"NullsOK"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"PrimaryKey"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"Unique"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"CompositeUnique"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"CheckConstraint"
+			value      	"")))
+	    (object Attribute
+		tool       	"DDL"
+		name       	"HiddenTool"
+		value      	FALSE)
+	    (object Attribute
+		tool       	"Rose Model Integrator"
+		name       	"HiddenTool"
+		value      	FALSE)
+	    (object Attribute
+		tool       	"Version Control"
+		name       	"HiddenTool"
+		value      	FALSE))
+	quid       	"38C3E2AD0030"))
--- a/messagingfw/msgtest/testutils/group/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-#include "../base/group/bld.inf"
-#include "../email/group/bld.inf"
-#include "../sms/group/bld.inf"
-#include "../server/group/bld.inf"
-#include "../caf2/group/bld.inf"
-
-#include "../MsgTestUtilServer/group/bld.inf"
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/testutils/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,23 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "../base/group/bld.inf"
+#include "../email/group/bld.inf"
+#include "../sms/group/bld.inf"
+#include "../server/group/bld.inf"
+#include "../caf2/group/bld.inf"
+
+#include "../MsgTestUtilServer/group/bld.inf"
+
--- a/messagingfw/msgtest/tools/autorun/group/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-PRJ_TESTMMPFILES
-AUTORUN.mmp
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/tools/autorun/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,18 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRJ_TESTMMPFILES
+AUTORUN.mmp
+
--- a/messagingfw/msgtest/tools/copylogs/group/BLD.INF	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-PRJ_TESTMMPFILES
-CopyLogs.mmp
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/tools/copylogs/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,18 @@
+// Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+PRJ_TESTMMPFILES
+CopyLogs.mmp
+
--- a/messagingfw/msgtest/tools/group/bld.inf	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtest/tools/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -13,7 +13,7 @@
 // Description:
 //
 
-#include "../autorun/group/BLD.INF"
-#include "../copylogs/group/BLD.INF"
+#include "../autorun/group/bld.inf"
+#include "../copylogs/group/bld.inf"
 #include "../utils/group/bld.inf"
-#include "../spoofserver/group/Bld.inf"
+#include "../spoofserver/group/bld.inf"
--- a/messagingfw/msgtest/tools/spoofserver/group/Bld.inf	Mon May 03 12:58:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-// Component description file
-// 
-//
-
-PRJ_TESTMMPFILES
-
-spoofserver.mmp
-
-PRJ_TESTEXPORTS
-
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-../inc/CSpoofServer.h					/epoc32/include/cspoofserver.h
-#endif
-#ifdef SYMBIAN_OLD_EXPORT_LOCATION
-../inc/CScriptFileProcessor.h				/epoc32/include/cscriptfileprocessor.h
-#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgtest/tools/spoofserver/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -0,0 +1,29 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Component description file
+// 
+//
+
+PRJ_TESTMMPFILES
+
+spoofserver.mmp
+
+PRJ_TESTEXPORTS
+
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../inc/CSpoofServer.h					/epoc32/include/cspoofserver.h
+#endif
+#ifdef SYMBIAN_OLD_EXPORT_LOCATION
+../inc/CScriptFileProcessor.h				/epoc32/include/cscriptfileprocessor.h
+#endif
--- a/messagingfw/msgtestfw/Configurations/EmailMessage/DRM_SeparateDelivery01.txt	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestfw/Configurations/EmailMessage/DRM_SeparateDelivery01.txt	Fri Jun 25 16:18:56 2010 +0530
@@ -1,11 +1,26 @@
-From: matthewf@msexchange2k.closedtest.intra
-To: matthewf@msexchange2k.closedtest.intra
-Subject: DRM_Combined_Delivery
-Date: Tue,  9 Nov 2004 14:34:09 +0000
-MIME-Version: 1.0
-Content-Type: application/vnd.oma.drm.content;
-Content-Transfer-Encoding: base64
-X-Oma-Drm-Separate-Delivery: 12
-
-+application/vnd.oma.drm.contentcid:20041101132703-9315904379@lkjj.lkjl.com.”pEncryption-Method: AES128CBC;padding=RFC2630
-ÂßùK(sî<X@1†…ZÑc\÷8pÂ@ÈÃ?ŠÃ£qÕ+ cÀ&|WñyáäâÆ(o 4“'EäÇ%^ˆQ
\ No newline at end of file
+From: matthewf@msexchange2k.closedtest.intra
+To: matthewf@msexchange2k.closedtest.intra
+Subject: DRM_Combined_Delivery
+Date: Tue,  9 Nov 2004 14:34:09 +0000
+MIME-Version: 1.0
+Content-Type: application/vnd.oma.drm.content;
+Content-Transfer-Encoding: base64
+X-Oma-Drm-Separate-Delivery: 12
+
++application/vnd.oma.drm.contentcid:20041101132703-9315904379@lkjj.lkjl.com.”pEncryption-Method: AES128CBC;padding=RFC2630
+ÂßùK(sî<X@1†…ZÑc\÷8pÂ@ÈÃ?ŠÃ£qÕ+ cÀ&|WñyáäâÆ(o 4“'EäÇ%^ˆQs×3Ñ}«nåõT¾™Bæf¾´•q³Ь¾¼z;®‹eQ¸[Ž~Ö[JQšr”Zµ‡æçaÒÁÿÛ(„­^ÖÚÇ/¸å•óßAjôæ5¥Êd蓦Bìåi#—qå£oüYxòΕ‰fï¤(È[õMÞJ'p¥W¦bÝÙL<"d“ub?³€}Yçõ·Ïªà¶ñºRô*Pgn­Ô ´Â&Vÿ`z9ã(ÏÓ«|Ú_8ÙÙj
+aåÌ–ÿ]Ã%(KPëøQº„’i“ÅeÐ8¡0·UzÖ’²k;oÏ
28’¹ê?ÊŽþ*«d]ÜÌI ×U½*Σ^!z6¨xÉZˆ*’µç0ü(O“\'ùo@»‰ÈV[=–<#å´öLócÍþNJ&¢î€Ï"eȤxF1<tÏæ÷øWp”´ù•‡
+s߸ñw‹{§¿'¢29 ˆÝLŽó㈥¤†
‘T
+ä­ 
 ³î3,Žq$ÜvRµî=ÚÀâÔsTŸ]Êu¿]š>ØÜø© 2Š£îÃi®–££k:B•TT?+ùR!.I¡È£ãã¬3‡ECè±òËZ¥“+´2[éµî·˜kU¾Ã~!“ïKBþ\"˜™-8tCO€oVÐ×BÊ‘ã-®eSšw„êæH“T*0.çÐîu§,}=+~_0–òHùV` ²ÍóYÒ²EðI>‚bXäËI¸,Ìö®T+_O aªläBAè´:OÔ©d)´«½“;رi¾;ÿ™«
 o-j"·îdþ]»ŒfaíDþZe¾´…ºz¯†ƒŠÏ9}Cœk.޺γF—æ÷Üýa¦V¯òB>ôÃu›*)åÊÜÉ’ÉÆÞ3õÒËݲVˆÅdÜóïHåìá&ªÙýŽ[zAyØË 1rxó25Y€q^ž-Ð$iuƒ‰=r˜öc‹º‰‹EÀ«$(F'º*NÏJ }ÅHÎg¦ˆªÞêòJÚÔÿ&¶
+ø¼»¼w‘Qì¯'©¼N/ˆ…ßÙ4¿ænœ
+üÔœ§ö5NúÄsöƒ‹BZ,ak ²S'bÿL#åfû@Fµ
+)O
¸|–E³.cQúµ€_.àLaàœ„_QRßÿ„q¿ö®*É`•Ãfá3¼Üi`Ð(žêîž÷½’OE†d•P-4­ã°ÌQÅÝð*½*þmqˆ¬9ù›ý]|šsó]&Ë]g9v«uÄ_¤«½nJ„+t²žœáëñÁðבU]¦BÃÅ[ÈjÁÞ¯çq™Ã–·ë$¹›Öy!K
+ô’@IîeæZ:¨žÒêÂKˆDáÓâ(R—ùÚrçÇL³Ê†3c{qlœ¤(8±©’ð,9\óª>«œ3‡%ÚÍH2ùrÎj|êÀ$:îQ?p€FÃØÃHI¯ÕT$J¥Qvâ±^ªœ‰Ü÷={ ryá@nÆc?úžÅõ*ú}шÇ?|Ÿ ™ösÄnf)ó®KNíøCÌ¢lAÏÕbÖâWyϸG¤ÏŒËÁ8²ö¼i¿´ê"(»×Nü‚‹I–·°…)(~Tác´Tµf*—T…Ådœøìò¥O^‰–ø¬~¨$vk¤ø–h@Ì{ ú3»J°øoä)Ýω1acBÊVèÇ8 ‰+¹îcÀPe?·À>…Diþú¢~UY¥™‡5+ÐÉ:P˜I—š¾ö0T0³Wqq^u¼]*€ ®eå͆§~H"ÑÐÓï3°\ûÆaZŸ
+ó¤#¶
+оÀ¾ôЛ–?áêlŠŸ¥³œn% 7v÷ÞÓ~ñàáâì?–aKÒë	{][[ è#HÀp4@óÇmžES‚³çöŒ+:hª|(v‰Ty:·ühe5Tíc„>ÙÛ¿éî÷q ãŒL.}¬iœ³Ù°bIº
d·Cl/¡|ë@ÄðxÐE02_pM$3èõ~Iy6S»
+­é<Nnµ5ù¾üKšÀ÷.
+ ›Ò¶qÔÔÌ9w†Ü?ï!•¥°Æº‘Þ”#E<€%ID?7oO šW\-çöp\wõ™éGi	l3©®îœÕ–ý³Ã-TžSúÊGÔn!ê8ªYŒxþïY9)ÄÍåqt:J×ÖPÞTäPçôµ¸ 
+˜òàÊ©i wŠˆÒ\›Á¤³fxË*ãÖP ÛWh-Ì™±ÔúrÞÀÿB3ŒMgènÞ~Á¯ŸÁqoXÕINÈybȳæþvp&x^ð;7$o*‰aÕ€FŽøá&Õ×Qœõ[VŒ9YðBÛ­€Î…:Úð'€²MÈŽ·¥cL…k–ü@OLÌcj 8¿Pæ‚ùªøJœ'þ‰.ŒÕZòÂμE‹a8öî¬k¼dӘɹkžO½ÏAïkô+#~0äWï…T‰¦sƘêyõ×
Ê¡odЛHÀ%½ä«wH‰²N±8iëgKºÓ‡fSv‘ƒ¤#î#üZ×Ëçw	xÂu7h§”$D!“îT'÷DÂl׊œ÷óøÑèM›°¹A^}WÓ\]p/~aKýˆõóåW¡‚†„ú%[¿eK_ä´5cž£¾Åp Ú̒МՎç}<›Pé¥cŹ;·3Xß+'÷Yªã×}÷ñ©©/Ï÷Gv˜/±¦ð24;„€cÇkÉì§ÌæÝz“m­[O«—…ÂÈ„æ“ËÓ5¢›‚XÇp±;fnH_è‹_IÅANŒõÿœPØKÁ‰q\&J¶õP5jž¡î{%|‘_ɳ1l%Ú6þÒŸBNè\è›Qð×{¬~.eŸ¨ǵ_@ªI‰k3ÂÞ§—ªGEµ°Ì4é1ŽZâ3kƒ÷¼x ‹b
+cÏ‘¦ÌFǪ Ë+š–ßÙ¥Ó˹ÔÓ_ÞŒM2Él(>ï.mº:Rzê@@Û-óˆægùíiª­é×øyíù
+lŒØôf…=£ÚFí@–ÛÎF*UÒ«“¦àeÜjAZóioTêóLÌ]š45ÿ-ÉñŠ¾¢xíUzÒfö„KœQ
WÞ&\Å y~ởNªê?†oéµUs,éëÛâÌÚ÷¬TBˆŒôZí·FªòÅ–™ͳØ7wÉ®.{³æÏHíñì_ßZy’JYøð‡D’¹Qb^¸¦®™Ìue¸µ'ÀLÞóÒÛ(tµüß*<8rÔ/8Øc+橘ÙÆ¿MvKa,nƒxÕñ –zž+{…PÊZpoÉF½ö©SEÖ`’v•Ë'êéwñgr$xœŠþ­½Ú»aÓJÌ6²ê?¢eÑ‹Ÿ”5Š,ªíh‘àÝ·ˆ0
+
--- a/messagingfw/msgtestfw/TestCases/ScriptedTestCases/SendAs/MSG-SENDAS-SMS-CIT-0014-Add_To_MultipleRecipientAddr.ini	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestfw/TestCases/ScriptedTestCases/SendAs/MSG-SENDAS-SMS-CIT-0014-Add_To_MultipleRecipientAddr.ini	Fri Jun 25 16:18:56 2010 +0530
@@ -26,7 +26,7 @@
 actionParam	= sendAs smsUid sendAsMessage
 
 [SendAsAddMultipleRecipient]
-actionParam	= sendAsMessage  "9844704790" _ RSendAsMessage::TSendAsRecipientType::ESendAsRecipientTo smsUid 0 "9844704790" "lon-cn-exchng2k.msexchange2k.closedtest.intra"
+actionParam	= sendAsMessage  "9844704790" _ RSendAsMessage::TSendAsRecipientType::ESendAsRecipientTo smsUid 0 "9844704790" "lon-cn-exchng2k.msexchange2k.closedtest.intra"
 [SendAsSaveMessageAndClose]
 actionParam	= sendAsMessage
 
--- a/messagingfw/msgtestfw/TestCases/ScriptedTestCases/SendAs/data/HugeTextFile.txt	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestfw/TestCases/ScriptedTestCases/SendAs/data/HugeTextFile.txt	Fri Jun 25 16:18:56 2010 +0530
@@ -1,1021 +1,3 @@
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
 
 
 Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
@@ -1973,15 +955,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -2991,15 +1973,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -4009,15 +2991,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -5027,1033 +4009,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -7063,15 +5027,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -8081,1033 +6045,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -10117,1033 +7063,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -12153,15 +8081,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -13171,15 +9099,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -14189,15 +10117,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -15207,15 +11135,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -16225,1033 +12153,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -18261,15 +13171,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -19279,15 +14189,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -20297,1033 +15207,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -22333,15 +16225,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -23351,15 +17243,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -24369,1033 +18261,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -26405,1033 +19279,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
-MTM Registry	A list of currently installed MTMs maintained by the message server.
-TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
-M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
-MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
-RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
-SMTP	Simple Mail Transport Protocol
-SID	Secure Identification
-IMAP4	Internet Mail Access Protocol
-POP3	Post Office Protocol Version 3
-NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
-SMS	Short Message Service
-MMS	Multimedia Message Service
-WAP	Wireless Application Protocol
-WSP	WAP Session Protocol
-HTTP	Hypertext transfer protocol
-PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
-Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
-SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
-SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
-XML	Extensible Mark-up Language
-DOM	Document Object Model
-DTD	Document Type Definition, a schema that defines the structure of an XML document.
-ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
-Appendix A - Example Sequence Diagrams
-A.1	Copy to a Remote Service
- 
-Figure 33 Sequence Diagram Showing Copying to a Remote Service
-Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
-There are four basic steps:
-1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
-2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
-3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
-4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
-This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
-A.2	SMTP Session
- 
-Figure 34 Sequence Diagram Showing a SMTP Session
-Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
-1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
-2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
-3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
-4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
-A.3	SMTP Email Send
- 
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
-Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
-1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
-2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
-3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
-4.	Complete and send the message by sending a full stop to the SMTP server
-
-
-
-
-Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
-
-Status:	Issued
-Team/Department :	Messaging / Content & Messaging
- 
-Contents
-1	INTRODUCTION	6
-1.1	PURPOSE AND SCOPE	6
-2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
-3	MESSAGING ARCHITECTURE AND APIS	7
-3.1	SUBSYSTEM COMPONENTS	7
-3.1.1	Framework components	7
-3.1.1.1	Message Server and MTM architecture	7
-3.1.1.2	Schedule Send	7
-3.1.1.3	SendAs Version 1	7
-3.1.1.4	SendAs Version 2	7
-3.1.1.5	Watcher Framework	8
-3.1.1.6	Message URL Handler	8
-3.1.1.7	Bio Message Framework	8
-3.1.2	Plug-ins	8
-3.1.2.1	SMS	8
-3.1.2.2	CDMA SMS	8
-3.1.2.3	Email	9
-3.1.2.4	OBEX	9
-3.1.2.5	MMS	9
-3.1.2.6	GMXML	10
-3.1.2.7	Bio Message Plug-ins	10
-3.1.2.8	PCMTM	10
-3.1.2.9	Fax	10
-3.2	GENERAL DESCRIPTION	11
-3.2.1	Messaging / Message Server and MTM Architecture APIs	11
-3.2.1.1	Key Internal Relationships and Dependencies	11
-3.2.1.2	Key External Relationships and Dependencies	12
-3.2.1.3	API Purpose - Further Elaboration	13
-3.2.1.3.1	Message Store	13
-3.2.1.3.2	Data File Storage (pre - v9.0)	15
-3.2.1.3.3	Platform Security Compliant Message Store	16
-3.2.1.3.4	How message centres display the message store	17
-3.2.1.3.5	Message Type Module Architecture	19
-3.2.1.3.6	Message Server Client API	21
-3.2.2	Messaging / Send As APIs	22
-3.2.2.1	Key Relationships and Dependencies	22
-3.2.2.2	API Purpose - Further Elaboration	22
-3.2.2.2.1	SendAs API (pre – v9.0)	22
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
-3.2.4	Messaging / Schedule Send APIs	24
-3.2.4.1	Key Relationships and Dependencies	24
-3.2.4.2	API Purpose - Further Elaboration	24
-3.2.4.2.1	Schedule Send	24
-3.2.5	Messaging / Watchers APIs	25
-3.2.5.1	Key Relationships and Dependencies	25
-3.2.5.2	API Purpose - Further Elaboration	25
-3.2.6	Messaging / Message URL Handler APIs	26
-3.2.6.1	Key Relationships and Dependencies	26
-3.2.6.2	API Purpose - Further Elaboration	26
-3.2.6.2.1	Message URL Handler Application	26
-3.2.6.2.2	Message URL Recognisers	27
-3.2.7	Messaging / SMS APIs	27
-3.2.7.1	Key Internal Relationships and Dependencies	27
-3.2.7.2	Key External Relationships and Dependencies	28
-3.2.7.3	API Purpose - Further Elaboration	28
-3.2.7.3.1	SMS Watchers	28
-3.2.7.3.2	SMS Client MTM	29
-3.2.7.3.3	SMS Utilities	29
-3.2.7.3.4	SMS Server MTM	30
-3.2.8	Messaging / CDMA SMS APIs	31
-3.2.8.1	Key Internal Relationships and Dependencies	31
-3.2.8.2	Key External Relationships and Dependencies	32
-3.2.8.3	API Purpose - Further Elaboration	32
-3.2.8.3.1	CDMA SMS Watchers	32
-3.2.8.3.2	CDMA SMS Client MTM	33
-3.2.8.3.3	CDMA SMS Utilities	33
-3.2.8.3.4	CDMA SMS Server MTM	33
-3.2.8.3.5	Configuration for using CDMA SMS MTM	34
-3.2.9	Messaging / Email APIs	35
-3.2.9.1	Key Internal Relationships and Dependencies	35
-3.2.9.2	Key External Relationships and Dependencies	36
-3.2.9.3	API Purpose - Further Elaboration	36
-3.2.9.3.1	Email Overview	36
-3.2.9.3.2	Email Client Utilities	37
-3.2.9.3.3	Email Server MTM Utilities	37
-3.2.9.3.4	POP3 MTMs	37
-3.2.9.3.5	IMAP4 MTMs	38
-3.2.9.3.6	SMTP MTMs	40
-3.2.9.3.7	Autosend	40
-3.2.10	Messaging / MMS APIs	40
-3.2.10.1	Key Internal Relationships and Dependencies	41
-3.2.10.2	API Purpose - Further Elaboration	41
-3.2.10.2.1	MMS Overview	41
-3.2.10.2.2	MMS Utilities	42
-3.2.10.2.3	MMS Watcher	43
-3.2.10.2.4	MMS Client MTM	43
-3.2.10.2.5	MMS Server MTM	44
-3.2.10.2.6	MMS Codec	45
-3.2.11	Messaging / BIO APIs	46
-3.2.11.1	Key Internal Relationships and Dependencies	46
-3.2.11.2	API Purpose - Further Elaboration	47
-3.2.11.2.1	BIO Overview	47
-3.2.11.2.2	BIO MTM	47
-3.2.11.2.3	BIO Database	48
-3.2.11.2.4	BIO Parsers	48
-3.2.11.2.5	BIF Files and Utilities	48
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
-3.2.12	Messaging / OBEX MTM APIs	50
-3.2.12.1	Key Internal Relationships and Dependencies	50
-3.2.12.2	OBEX MTM Overview	50
-3.2.12.2.1	OBEX MTM	50
-3.2.12.2.2	IR MTM	51
-3.2.12.2.3	Bluetooth MTM	51
-3.2.12.2.4	OBEX MTM Utils	52
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
-3.2.13	Messaging / GMXML APIs	52
-3.2.13.1	Key Relationships and Dependencies	52
-3.2.13.2	Overview	53
-3.2.13.2.1	GMXML DOM	53
-3.2.13.2.2	GMXML Parser and Composer	53
-3.2.13.2.3	GMXML SMIL DTD (Validator)	53
-4	SECURITY	54
-4.1	DATA CAGING	54
-4.2	BACKUP AND RESTORE	54
-4.3	CAPABILITY RANGES	54
-4.3.1	Capabilities granted to executables	54
-4.3.2	Capabilities granted to DLLs	55
-4.3.3	Capabilities required to use the subsystem	57
-5	FURTHER INFORMATION	59
-5.1	REFERENCES	59
-5.2	OPEN ISSUES	59
-5.3	GLOSSARY	60
-APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
-A.1	COPY TO A REMOTE SERVICE	62
-A.2	SMTP SESSION	64
-A.3	SMTP EMAIL SEND	66
-
-Table of Figures
-Figure 1 Where Messaging Lives	6
-Figure 2 MTM Relationships	11
-Figure 3 External Dependencies	12
-Figure 4 Message Store	13
-Figure 5 Series 60 Inbox List View	14
-Figure 6 Remote and Local Entries	14
-Figure 7 Email Message	15
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
-Figure 9 UIQ Message Centre	18
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
-Figure 11 Nokia 9210 Outbox List View	20
-Figure 12 SendAs Version 1 Dependencies	22
-Figure 13 SendAs Version 2 Dependencies	23
-Figure 14 Schedule Send Dependencies	24
-Figure 15 Watcher Dependencies	25
-Figure 16 Message URL Handler Dependencies	26
-Figure 17 SMS Internal Dependencies	27
-Figure 18 SMS External Dependencies	28
-Figure 19 CMDA SMS Internal Dependencies	31
-Figure 20 CDMA SMS External Dependencies	32
-Figure 19 Email Internal Dependencies	35
-Figure 20 Email External Dependencies	36
-Figure 21 MMS Internal Dependencies	41
-Figure 22 MMS Utilities External Dependencies	42
-Figure 23 MMS Watcher External Dependencies	43
-Figure 24 MMS Client MTM Dependencies	43
-Figure 25 MMS Server MTM Dependencies	44
-Figure 26 BIO Message Internal Dependencies	46
-Figure 27 Bio Parser External Dependencies	47
-Figure 26 BIO Message Dependencies (v9.0)	49
-Figure 28 OBEX Internal Dependencies	50
-Figure 29 OBEX External Dependencies	51
-Figure 30 IR MTM Dependencies	51
-Figure 31 Bluetooth MTM Dependencies	52
-Figure 32 GMXML Dependencies	52
-Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
-Figure 34 Sequence Diagram Showing a SMTP Session	64
-Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
-1	Introduction
-1.1	Purpose and Scope
-The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
-2	Subsystem Overview and Background
-The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
- 
-Figure 1 Where Messaging Lives
-The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
-3	Messaging Architecture and APIs
-3.1	Subsystem components
-The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
-3.1.1	Framework components
-3.1.1.1	Message Server and MTM architecture
-The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
-Component	Description
-messaging\framework\serverexe	Executable that links to the server component and starts the message server
-messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
-messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
-3.1.1.2	Schedule Send
-The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
-Component	Description
-messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
-messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
-3.1.1.3	SendAs Version 1
-This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
-Component	Description
-messaging\sendas	High level API to allow creation of messages.
-3.1.1.4	SendAs Version 2 
-From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
-Component	Description
-messaging\sendAsV2	High level API to allow the creation and sending of messages
-
-3.1.1.5	Watcher Framework
-The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
-Component	Description
-messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
-3.1.1.6	Message URL Handler
-Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
-Component	Description
-messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
-messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
-3.1.1.7	Bio Message Framework
-The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
-Component	Description
-messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
-messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
-messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
-3.1.2	Plug-ins
-3.1.2.1	SMS
-The SMS plug-ins provide application level support for the Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
-messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
-messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
-3.1.2.2	CDMA SMS
-The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
-Component	Description
-messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
-messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
-messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
-
-3.1.2.3	Email
-The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
-Component	Description
-messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
-messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
-messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
-messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
-messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
-messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
-3.1.2.4	OBEX
-The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
-Component	Description
-messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
-messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
-messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
-messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
-messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
-messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
-messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
-3.1.2.5	MMS
-The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
-Component	Description
-messaging\mms\utils	MMS Utilities
-messaging\mms\servermtm	MMS Server MTM
-messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
-messaging\mms\codec	MMS utilities for handling MMS codecs
-messaging\mms\clientmtm	MMS Client MTM
-3.1.2.6	GMXML
-GMXML is a parser/generator for SMIL presentations for MMS messages.
-Component	Description
-messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
-messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
-messaging\GMXML\SMILdtd	SMIL DTD
-3.1.2.7	Bio Message Plug-ins
-These parsers plug into the bio messaging framework to handle specific types of bio message.
-Component	Description
-messaging\biomsg\cbcp\CBCP	Compact business card parser
-messaging\biomsg\enp\ENP	Email notification parser
-messaging\biomsg\gfp\gfp   	General file parser
-messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
-messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
-3.1.2.8	PCMTM
-Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
-3.1.2.9	Fax
-Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
-
-3.2	General Description
-3.2.1	Messaging / Message Server and MTM Architecture APIs
-3.2.1.1	Key Internal Relationships and Dependencies
- 
-Figure 2 MTM Relationships
-Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
-3.2.1.2	Key External Relationships and Dependencies
- 
-Figure 3 External Dependencies
-The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
-•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
-•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
-•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
-•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
-•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
-•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
-•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
-Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
-3.2.1.3	API Purpose - Further Elaboration
-3.2.1.3.1	Message Store
-The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
- 
-Figure 4 Message Store
-Figure 4 shows an example message store. The tree is broken down in to three levels:
-1.	The Root entry. This entry is just present to tie the tree structure together
-2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
-3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
-The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
-The message server provides three types of storage for each entry in the message store:
-•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
-•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
-•	Directory of files – normally used for attachments.
-The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
- 
-Figure 5 Series 60 Inbox List View
- 
-Figure 6 Remote and Local Entries
-As shown in Figure 6 the message store is split into two sets of entries:
-•	Remote entries - entries that are representations of entries stored on a remote store .
-•	Local entries - entries not linked to a remote store.
-The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
-Each entry within the store has a type:
-Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
-Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
-Attachment – These represent attachments under a message entry.
-Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
-Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
-Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
- 
-Figure 7 Email Message
-Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
-A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
-
-3.2.1.3.2	Data File Storage (pre - v9.0)
-This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
-Filename	Access	Purpose
-?:\system\Mail\index	Private	Message server index file, internal to message server
-?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
-?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
-?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
-c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
-c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
-C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
-?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
-?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
-3.2.1.3.3	Platform Security Compliant Message Store
-From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
-3.2.1.3.3.1	Data caging
-Filename	Purpose
-?:\private\<SID>\Mail\index	Message server index file, internal to message server
-?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
-?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
-c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
-c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
-?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
-?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
-?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
-
-3.2.1.3.4	How message centres display the message store
-The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
- 
-Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
-Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
- 
-Figure 9 UIQ Message Centre
-However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
-3.2.1.3.5	Message Type Module Architecture
-  
-Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
-The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
-3.2.1.3.5.1	UI MTM 
-Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
-•	Create – Launches the editor with a new message.
-•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
-•	View – Launches the message viewer.
-•	Display progress of an operation. 
-3.2.1.3.5.2	UI data MTM
-This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
-There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
-The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
- 
-Figure 11 Nokia 9210 Outbox List View
-3.2.1.3.5.3	Client MTM
-Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
-•	Create Message.
-•	Reply to a Message.
-•	Forward a Message.
-•	Add / remove Addressees.
-•	Add / remove body text.
-•	Add / remove subject.
-•	Add / remove attachments (the API cannot list attachments).
-The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
-3.2.1.3.5.4	Server MTM
-This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
-Functions that a Server MTM must implement:
-•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
-•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
-•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
-•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
-3.2.1.3.5.5	MTM Registration
-MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
-When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
-3.2.1.3.6	Message Server Client API
-The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
-3.2.1.3.6.1	Message Store manipulation APIs
-Requests from clients to modify the message store fall into three categories:
-1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
-2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
-3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
-The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
-Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
-3.2.1.3.6.2	Utility APIs
-1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
-2.	Register / Unregister an MTM.
-3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
-4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
-3.2.2	Messaging / Send As APIs
-3.2.2.1	Key Relationships and Dependencies
- 
-Figure 12 SendAs Version 1 Dependencies
-SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
-3.2.2.2	API Purpose - Further Elaboration
-3.2.2.2.1	SendAs API (pre – v9.0)
-The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
-SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
-SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
-A new CSendAs object must be created for each message the application wishes to create.
-3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
- 
-Figure 13 SendAs Version 2 Dependencies
-From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
-•	Send a message once the capability policing of the client application has been completed. 
-•	Allow client applications to launch an editor for a specified message type. 
-•	Allow client applications to query the message type.
-The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
-Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
-
-3.2.4	Messaging / Schedule Send APIs
-3.2.4.1	Key Relationships and Dependencies
- 
-Figure 14 Schedule Send Dependencies
-The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
-3.2.4.2	API Purpose - Further Elaboration
-3.2.4.2.1	Schedule Send
-The Schedule Send functionality is delivered by four components:
-Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
-Data Structures – These are classes used to represent the data associated with a scheduled operation.
-Executable – The executable is run by the task scheduler at the scheduled time. 
-The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
-Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
-When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
-Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
-3.2.5	Messaging / Watchers APIs
-3.2.5.1	Key Relationships and Dependencies
- 
-Figure 15 Watcher Dependencies
-The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
-3.2.5.2	API Purpose - Further Elaboration
-The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
-From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
-The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
-Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
-No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
-3.2.6	Messaging / Message URL Handler APIs
-3.2.6.1	Key Relationships and Dependencies
- 
-Figure 16 Message URL Handler Dependencies
-3.2.6.2	API Purpose - Further Elaboration 
-The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
-3.2.6.2.1	Message URL Handler Application
-This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
-3.2.6.2.2	Message URL Recognisers
-This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
-Schemes recognised:
-Scheme	Mime type
-mailto:	X-Epoc-Url/mailto
-fax:	X-Epoc-Url/fax
-sms:	X-Epoc-Url/sms
-mms:	X-Epoc-Url/mms
-See the application framework architectural description for more information on recognisers [R2].
-3.2.7	Messaging / SMS APIs
-3.2.7.1	Key Internal Relationships and Dependencies
- 
-Figure 17 SMS Internal Dependencies
-3.2.7.2	Key External Relationships and Dependencies
- 
-Figure 18 SMS External Dependencies
-3.2.7.3	API Purpose - Further Elaboration
-3.2.7.3.1	SMS Watchers
-The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.7.3.1.1	NBS Watcher
-The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
-When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
-The NBS Watcher is also responsible for handing special SMS types including:
-•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
-•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
-•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
-The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
-3.2.7.3.1.2	WAP Watcher
-The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
-3.2.7.3.2	SMS Client MTM
-The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SIM parameters.
-3.2.7.3.3	SMS Utilities
-These provide:
-•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
-•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
-•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
-•	API to validate a GSM number.
-•	Find the TMsvId of the SMS service entry.
-3.2.7.3.4	SMS Server MTM
-3.2.7.3.4.1	Sending Messages
-The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
-3.2.7.3.4.2	Scheduling Messages
-The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
-3.2.7.3.4.3	Phone Store
-The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
-3.2.7.3.4.4	SIM Parameters
-The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
-3.2.8	Messaging / CDMA SMS APIs
-3.2.8.1	Key Internal Relationships and Dependencies
- 
-Figure 19 CMDA SMS Internal Dependencies
-3.2.8.2	Key External Relationships and Dependencies
-` 
-Figure 20 CDMA SMS External Dependencies
-3.2.8.3	API Purpose - Further Elaboration
-3.2.8.3.1	CDMA SMS Watchers
-The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
-3.2.8.3.1.1	CDMA NBS Watcher
-The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
-For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
-3.2.8.3.1.2	WAP Watcher
-The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
-3.2.8.3.1.3	Other CDMA Watchers
-The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
-The CDMA watchers are also responsible for handling special SMS types including:
-•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
-•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
-•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
-•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
-3.2.8.3.2	CDMA SMS Client MTM
-The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
-•	Access to the CSmsHeader object that is used to represent the SMS message.
-•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
-•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
-•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
-•	Reading and writing SMS messages to R-UIM.
-3.2.8.3.3	CDMA SMS Utilities
-The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
-3.2.8.3.4	CDMA SMS Server MTM
-3.2.8.3.4.1	Sending Messages
-The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
-If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
-3.2.8.3.4.2	Scheduling Messages
-The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
-3.2.8.3.4.3	Phone Store
-In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
-3.2.8.3.5	Configuration for using CDMA SMS MTM
-The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
-
-
-3.2.9	Messaging / Email APIs
-3.2.9.1	Key Internal Relationships and Dependencies
- 
-Figure 19 Email Internal Dependencies
-
-3.2.9.2	Key External Relationships and Dependencies
- 
-Figure 20 Email External Dependencies
-3.2.9.3	API Purpose - Further Elaboration
-3.2.9.3.1	Email Overview
-The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
-Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
-3.2.9.3.2	Email Client Utilities
-The email client utilities are part of the imcm DLL and provide classes for:
-•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
-•	Manipulating email messages, for example adding attachments, replying etc.
-•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
-•	Storage of Email settings in the message store.
-•	Progress information for email operations.
-The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
-The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
-3.2.9.3.3	Email Server MTM Utilities
-The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
-•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
-•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
-3.2.9.3.4	POP3 MTMs
-The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
-3.2.9.3.4.1	Client MTM
-The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
-•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
-•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.4.2	Server MTM
-The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
-•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
-•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-3.2.9.3.5	IMAP4 MTMs
-The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
-3.2.9.3.5.1	Client MTM
-The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
-•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
-•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
-•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
-•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
-•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
-•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
-•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
-•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
-3.2.9.3.5.2	Server MTM
-The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
-•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
-•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
-•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
-•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
-•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
-•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
-
-3.2.9.3.6	SMTP MTMs
-The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
-3.2.9.3.6.1	Client MTM
-The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
-3.2.9.3.6.2	Server MTM
-The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
-When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
-The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
-3.2.9.3.7	Autosend
-The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
-3.2.10	Messaging / MMS APIs
-The MMS module has been removed from v9.0 and onwards.
-3.2.10.1	Key Internal Relationships and Dependencies
- 
-Figure 21 MMS Internal Dependencies
-3.2.10.2	API Purpose - Further Elaboration
-3.2.10.2.1	MMS Overview
-The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
-MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
-MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
-3.2.10.2.2	MMS Utilities
-3.2.10.2.2.1	Key External Relationships and Dependencies
- 
-Figure 22 MMS Utilities External Dependencies
-The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
-3.2.10.2.2.2	Settings
-The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
-	MMSC (MMS server) address
-	WSP or HTTP transport
-	Autofetch messages on notification
-	Preferred IAP for the MMS network connection
-The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
-3.2.10.2.2.3	Message Encapsulation
-The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
-	Adding media objects to the message
-	Enumerating through media objects
-	Adding recipients, subject line, etc. to a message
-	Adding other headers to the message, e.g. expiry date
-	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
-The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
-Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
-3.2.10.2.3	MMS Watcher
-3.2.10.2.3.1	Key External Relationships and Dependencies
- 
-Figure 23 MMS Watcher External Dependencies
-
-The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
-When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
-If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
-3.2.10.2.4	MMS Client MTM
-3.2.10.2.4.1	Key External Relationships and Dependencies
- 
-Figure 24 MMS Client MTM Dependencies
-As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
-3.2.10.2.4.2	Send-As Implementation
-The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
-The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
-3.2.10.2.4.3	Reply / Forward
-The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
-3.2.10.2.5	MMS Server MTM
-3.2.10.2.5.1	Key External Relationships and Dependencies
- 
-Figure 25 MMS Server MTM Dependencies
-The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
-3.2.10.2.5.2	Operations
-All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
-Two types of operation are supported, background and foreground:
-A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
-A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
-The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
-3.2.10.2.5.3	Session and Connection Management
-The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
-The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
-3.2.10.2.6	MMS Codec
-The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
-For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
-For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
-
- 
-3.2.11	Messaging / BIO APIs
-3.2.11.1	Key Internal Relationships and Dependencies
- 
-Figure 26 BIO Message Internal Dependencies
-3.2.11.1.1.1	Key External Relationships and Dependencies
- 
-Figure 27 Bio Parser External Dependencies
-
-3.2.11.2	API Purpose - Further Elaboration
-3.2.11.2.1	BIO Overview
-The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
-The BIO messaging components can be broken down into three groups:
-1) The BIO MTM - To initiate the parsing and processing of BIO messages
-2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
-3) The BIO Parsers - To parse and process the BIO message payload
-BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
-3.2.11.2.2	BIO MTM
-The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
-The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
-The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
-Once the message has been parsed the messaging client can initiate the processing of the message.
-The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
-The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
-3.2.11.2.3	BIO Database
-The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
-3.2.11.2.4	BIO Parsers
-The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
-3.2.11.2.4.1	Generic File Parser (GFP)
-The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
-3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
-The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
-3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
-The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
-3.2.11.2.5	BIF Files and Utilities
-The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
-3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
-In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
-Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
-The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
- 
-Figure 26 BIO Message Dependencies (v9.0)
-The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
-The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
-3.2.12	Messaging / OBEX MTM APIs
-3.2.12.1	Key Internal Relationships and Dependencies
- 
-Figure 28 OBEX Internal Dependencies
-3.2.12.2	OBEX MTM Overview
-The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
-3.2.12.2.1	OBEX MTM
-The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
-There are two APIs that can be used to create OBEX messages:
-1) The Send-As API
-2) Linked attachments by filename
-The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
-Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
-3.2.12.2.1.1	OBEX MTM Key External Dependencies
- 
-Figure 29 OBEX External Dependencies
-3.2.12.2.2	IR MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
-3.2.12.2.2.1	 IR MTM Key External Dependencies
- 
-Figure 30 IR MTM Dependencies
-3.2.12.2.3	Bluetooth MTM
-The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
-3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
- 
-Figure 31 Bluetooth MTM Dependencies
-3.2.12.2.4	OBEX MTM Utils
-The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
-1) Filename linking functionality
-2) Bluetooth SDP lookup
-The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
-
-3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
-From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
-
-3.2.13	Messaging / GMXML APIs
-3.2.13.1	Key Relationships and Dependencies
- 
-Figure 32 GMXML Dependencies
-3.2.13.2	Overview
-The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
-3.2.13.2.1	GMXML DOM
-The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
-The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
-Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
-3.2.13.2.2	GMXML Parser and Composer
-3.2.13.2.2.1	Parser
-The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
-The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
-3.2.13.2.2.2	Composer
-The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
-3.2.13.2.3	GMXML SMIL DTD (Validator)
-The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
-4	Security
-4.1	Data caging
-For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
-For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
-4.2	Backup and restore
-The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
-4.3	Capability ranges
-In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
-4.3.1	Capabilities granted to executables
-The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
-
-Executable	Capability	Rationale (basic example of capability requirement)
-msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
-	ReadDeviceData	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
-	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
-watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
-	WriteDeviceData	WriteDeviceData is needed to able to write service settings
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
-	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
-	ReadUserData 	ReadUserData is needed to be able to read user data
-	WriteUserData	WriteUserData is needed to be able to write user data
-autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
-	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
-	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
-SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
-	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be trusted by other MTM
-	ReadUserData 	ReadUserData is needed to be able to read user data.
-	WriteUserData  	WriteUserData is needed to be able to write user data.
-SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
-	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
-	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
-	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
-
-4.3.2	Capabilities granted to DLLs
-The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
-DLL	Capability
-bifu.dll	All –TCB
-bioc.dll	All –TCB 
-biodb.dll	All –TCB
-bios.dll	All –TCB
-biowatcher.dll	same as watcher.exe
-biut.dll	All –TCB
-cbcp.dll	All –TCB
-enp.dll	All –TCB
-gfp.dll	All –TCB
-iacp.dll	All –TCB
-nbswatcher.dll	same as watcher.exe 
-cdmanbswatcher.dll	same as watcher.exe
-CdmaSocketWatcher.dll	same as watcher.exe
-VMNWatcher.dll	same as watcher.exe
-WEMTWatcher.dll	same as watcher.exe
-WMTWatcher.dll	same as watcher.exe
-WPTWatcher.dll	same as watcher.exe
-wapp.dll	All –TCB
-wapwatcher.dll	same as watcher.exe 
-smildtd.dll	All –TCB
-xmldom.dll	All –TCB
-xmlparser.dll	All –TCB
-smiltranslator.dll	All –TCB 
-imcm.dll	All –TCB
-imps.dll	same as msexe.exe 
-imut.dll	All –TCB
-msgs.dll	All –TCB
-msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
-mtur.dll	All –TCB 
-pops.dll	same as msexe.exe 
-schsend.dll	All –TCB
-send.dll	All –TCB
-smcm.dll	All –TCB
-smcm_gsm.dll	Synonym for smcm.dll
-smcm_cdma.dll	Synonym for smcm.dll
-smss.dll	same as msexe.exe 
-smss_gsm.dll	Synonym for smss.dll
-smss_cdma.dll	Synonym for smss.dll
-smts.dll	same as msexe.exe 
-btcmtm.dll	All –TCB
-btsmtm.dll	same as msexe.exe 
-irc.dll	All –TCB
-irs.dll	same as msexe.exe 
-obexclientmtm.dll	All –TCB
-obexmtmutil.dll	All –TCB 
-obexservermtm.dll	same as msexe.exe
-
-The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
-4.3.3	Capabilities required to use the subsystem
-The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
-
-Component	Related Activity	Required Capability and SID
-Message server	Create message in local folder	No capability required
-	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
-	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
-Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
-Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
-Autosend	Send messages in background	NetworkService or LocalService required by the message type
-SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
-SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
-
-5	Further Information
-5.1	References
-No.	Document Reference	Version	Description
-R1	messaging_functional_specification.doc	0.6	Messaging Functional description
-R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
-R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
-R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
-R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
-5.2	Open Issues
-The following issues need to be resolved before this document is completed:
-1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
-2.	Message store section should talk about removable media.
-3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
-4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
-5.	Add a sequence diagram for sending an SMS
-6.	Add a sequence diagram for synchronising a POP3 mail box
-7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
-8.	Capability table should be updated after the implementation of server e.g. message server 
-9.	Sequence diagram may need to be changed to show secured platform operation
-10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
-11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
-12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
-13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
-14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
-15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
-16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
- 
-
-5.3	Glossary 
-The following technical terms and abbreviations are used within this document.
-Term	Definition 
-BIO
-Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
-BIO Type	UID that represents the content type of a BIO Message.
-Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
-Message Viewer	Application for viewing a message.
-Message Editor	Application for creating or editing a message
-Message Server	Symbian OS Server that handles request to modify the Message Store
-Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
-Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
-Central Repository	centralised and secure storage facility for application settings
-OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
-GMXML	XML parser / generator for use with SMIL formatted messages.
-UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
-IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -28441,15 +20297,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -29459,15 +21315,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -30477,15 +22333,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -31495,15 +23351,1033 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -32513,15 +25387,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -33531,15 +26405,1033 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -34549,15 +28441,1033 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -35567,15 +30477,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -36585,15 +31495,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -37603,15 +32513,1033 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -38621,15 +34549,1033 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -39639,15 +36585,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -40657,15 +37603,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -41675,15 +38621,1033 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -42693,15 +40657,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -43711,15 +41675,1033 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -44729,15 +43711,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -45747,15 +44729,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -46765,15 +45747,15 @@
 Message Editor	Application for creating or editing a message
 Message Server	Symbian OS Server that handles request to modify the Message Store
 Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
-Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
-Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
 Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
 Central Repository	centralised and secure storage facility for application settings
 OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
 GMXML	XML parser / generator for use with SMIL formatted messages.
 UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
 IPC	Inter Process Communication
-MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
 MTM Registry	A list of currently installed MTMs maintained by the message server.
 TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
 M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
@@ -46826,3 +45808,1021 @@
 4.	Complete and send the message by sending a full stop to the SMTP server
 
 
+
+
+Messaging Symbian OS v7.0s, v8.0, v8.1, v9.0, v9.1 Architectural Description
+
+Status:	Issued
+Team/Department :	Messaging / Content & Messaging
+ 
+Contents
+1	INTRODUCTION	6
+1.1	PURPOSE AND SCOPE	6
+2	SUBSYSTEM OVERVIEW AND BACKGROUND	6
+3	MESSAGING ARCHITECTURE AND APIS	7
+3.1	SUBSYSTEM COMPONENTS	7
+3.1.1	Framework components	7
+3.1.1.1	Message Server and MTM architecture	7
+3.1.1.2	Schedule Send	7
+3.1.1.3	SendAs Version 1	7
+3.1.1.4	SendAs Version 2	7
+3.1.1.5	Watcher Framework	8
+3.1.1.6	Message URL Handler	8
+3.1.1.7	Bio Message Framework	8
+3.1.2	Plug-ins	8
+3.1.2.1	SMS	8
+3.1.2.2	CDMA SMS	8
+3.1.2.3	Email	9
+3.1.2.4	OBEX	9
+3.1.2.5	MMS	9
+3.1.2.6	GMXML	10
+3.1.2.7	Bio Message Plug-ins	10
+3.1.2.8	PCMTM	10
+3.1.2.9	Fax	10
+3.2	GENERAL DESCRIPTION	11
+3.2.1	Messaging / Message Server and MTM Architecture APIs	11
+3.2.1.1	Key Internal Relationships and Dependencies	11
+3.2.1.2	Key External Relationships and Dependencies	12
+3.2.1.3	API Purpose - Further Elaboration	13
+3.2.1.3.1	Message Store	13
+3.2.1.3.2	Data File Storage (pre - v9.0)	15
+3.2.1.3.3	Platform Security Compliant Message Store	16
+3.2.1.3.4	How message centres display the message store	17
+3.2.1.3.5	Message Type Module Architecture	19
+3.2.1.3.6	Message Server Client API	21
+3.2.2	Messaging / Send As APIs	22
+3.2.2.1	Key Relationships and Dependencies	22
+3.2.2.2	API Purpose - Further Elaboration	22
+3.2.2.2.1	SendAs API (pre – v9.0)	22
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)	23
+3.2.4	Messaging / Schedule Send APIs	24
+3.2.4.1	Key Relationships and Dependencies	24
+3.2.4.2	API Purpose - Further Elaboration	24
+3.2.4.2.1	Schedule Send	24
+3.2.5	Messaging / Watchers APIs	25
+3.2.5.1	Key Relationships and Dependencies	25
+3.2.5.2	API Purpose - Further Elaboration	25
+3.2.6	Messaging / Message URL Handler APIs	26
+3.2.6.1	Key Relationships and Dependencies	26
+3.2.6.2	API Purpose - Further Elaboration	26
+3.2.6.2.1	Message URL Handler Application	26
+3.2.6.2.2	Message URL Recognisers	27
+3.2.7	Messaging / SMS APIs	27
+3.2.7.1	Key Internal Relationships and Dependencies	27
+3.2.7.2	Key External Relationships and Dependencies	28
+3.2.7.3	API Purpose - Further Elaboration	28
+3.2.7.3.1	SMS Watchers	28
+3.2.7.3.2	SMS Client MTM	29
+3.2.7.3.3	SMS Utilities	29
+3.2.7.3.4	SMS Server MTM	30
+3.2.8	Messaging / CDMA SMS APIs	31
+3.2.8.1	Key Internal Relationships and Dependencies	31
+3.2.8.2	Key External Relationships and Dependencies	32
+3.2.8.3	API Purpose - Further Elaboration	32
+3.2.8.3.1	CDMA SMS Watchers	32
+3.2.8.3.2	CDMA SMS Client MTM	33
+3.2.8.3.3	CDMA SMS Utilities	33
+3.2.8.3.4	CDMA SMS Server MTM	33
+3.2.8.3.5	Configuration for using CDMA SMS MTM	34
+3.2.9	Messaging / Email APIs	35
+3.2.9.1	Key Internal Relationships and Dependencies	35
+3.2.9.2	Key External Relationships and Dependencies	36
+3.2.9.3	API Purpose - Further Elaboration	36
+3.2.9.3.1	Email Overview	36
+3.2.9.3.2	Email Client Utilities	37
+3.2.9.3.3	Email Server MTM Utilities	37
+3.2.9.3.4	POP3 MTMs	37
+3.2.9.3.5	IMAP4 MTMs	38
+3.2.9.3.6	SMTP MTMs	40
+3.2.9.3.7	Autosend	40
+3.2.10	Messaging / MMS APIs	40
+3.2.10.1	Key Internal Relationships and Dependencies	41
+3.2.10.2	API Purpose - Further Elaboration	41
+3.2.10.2.1	MMS Overview	41
+3.2.10.2.2	MMS Utilities	42
+3.2.10.2.3	MMS Watcher	43
+3.2.10.2.4	MMS Client MTM	43
+3.2.10.2.5	MMS Server MTM	44
+3.2.10.2.6	MMS Codec	45
+3.2.11	Messaging / BIO APIs	46
+3.2.11.1	Key Internal Relationships and Dependencies	46
+3.2.11.2	API Purpose - Further Elaboration	47
+3.2.11.2.1	BIO Overview	47
+3.2.11.2.2	BIO MTM	47
+3.2.11.2.3	BIO Database	48
+3.2.11.2.4	BIO Parsers	48
+3.2.11.2.5	BIF Files and Utilities	48
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs	49
+3.2.12	Messaging / OBEX MTM APIs	50
+3.2.12.1	Key Internal Relationships and Dependencies	50
+3.2.12.2	OBEX MTM Overview	50
+3.2.12.2.1	OBEX MTM	50
+3.2.12.2.2	IR MTM	51
+3.2.12.2.3	Bluetooth MTM	51
+3.2.12.2.4	OBEX MTM Utils	52
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs	52
+3.2.13	Messaging / GMXML APIs	52
+3.2.13.1	Key Relationships and Dependencies	52
+3.2.13.2	Overview	53
+3.2.13.2.1	GMXML DOM	53
+3.2.13.2.2	GMXML Parser and Composer	53
+3.2.13.2.3	GMXML SMIL DTD (Validator)	53
+4	SECURITY	54
+4.1	DATA CAGING	54
+4.2	BACKUP AND RESTORE	54
+4.3	CAPABILITY RANGES	54
+4.3.1	Capabilities granted to executables	54
+4.3.2	Capabilities granted to DLLs	55
+4.3.3	Capabilities required to use the subsystem	57
+5	FURTHER INFORMATION	59
+5.1	REFERENCES	59
+5.2	OPEN ISSUES	59
+5.3	GLOSSARY	60
+APPENDIX A - EXAMPLE SEQUENCE DIAGRAMS	62
+A.1	COPY TO A REMOTE SERVICE	62
+A.2	SMTP SESSION	64
+A.3	SMTP EMAIL SEND	66
+
+Table of Figures
+Figure 1 Where Messaging Lives	6
+Figure 2 MTM Relationships	11
+Figure 3 External Dependencies	12
+Figure 4 Message Store	13
+Figure 5 Series 60 Inbox List View	14
+Figure 6 Remote and Local Entries	14
+Figure 7 Email Message	15
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)	17
+Figure 9 UIQ Message Centre	18
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)	19
+Figure 11 Nokia 9210 Outbox List View	20
+Figure 12 SendAs Version 1 Dependencies	22
+Figure 13 SendAs Version 2 Dependencies	23
+Figure 14 Schedule Send Dependencies	24
+Figure 15 Watcher Dependencies	25
+Figure 16 Message URL Handler Dependencies	26
+Figure 17 SMS Internal Dependencies	27
+Figure 18 SMS External Dependencies	28
+Figure 19 CMDA SMS Internal Dependencies	31
+Figure 20 CDMA SMS External Dependencies	32
+Figure 19 Email Internal Dependencies	35
+Figure 20 Email External Dependencies	36
+Figure 21 MMS Internal Dependencies	41
+Figure 22 MMS Utilities External Dependencies	42
+Figure 23 MMS Watcher External Dependencies	43
+Figure 24 MMS Client MTM Dependencies	43
+Figure 25 MMS Server MTM Dependencies	44
+Figure 26 BIO Message Internal Dependencies	46
+Figure 27 Bio Parser External Dependencies	47
+Figure 26 BIO Message Dependencies (v9.0)	49
+Figure 28 OBEX Internal Dependencies	50
+Figure 29 OBEX External Dependencies	51
+Figure 30 IR MTM Dependencies	51
+Figure 31 Bluetooth MTM Dependencies	52
+Figure 32 GMXML Dependencies	52
+Figure 33 Sequence Diagram Showing Copying to a Remote Service	62
+Figure 34 Sequence Diagram Showing a SMTP Session	64
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.	66
+1	Introduction
+1.1	Purpose and Scope
+The Messaging Architectural Description details the architecture and APIs exposed by the Messaging Subsystem. This document does not attempt to list all functionality provided by the messaging subsystem. For details on the functionality provided and the specifications implemented by the messaging subsystem see the Messaging Functional Description [R1]. This document describes the general architecture of messaging subsystem. Information related to a particular release version is mentioned with relevant release number. 
+2	Subsystem Overview and Background
+The Messaging Subsystem provides an application level API to handle the storage and transport of different message types. It sits between messaging applications and the lower level subsystems which messaging uses for storage and transmission of messages.
+ 
+Figure 1 Where Messaging Lives
+The message types that messaging currently supports are Email  (POP3, IMAP4 & SMTP), SMS, MMS and OBEX. The set of supported message types is extensible at run time by the use of plug-in modules that are responsible for the transmission and storage of a particular message type. This means that the set of components shown communicating with the network cloud depend on the message types installed.
+3	Messaging Architecture and APIs
+3.1	Subsystem components
+The Messaging subsystem components can be split into two categories: those components that form the framework and those that plug into the framework to support specific message types. This section briefly describes each of the components, more detailed descriptions of the components and their dependencies can be found in later sections of this document.
+3.1.1	Framework components
+3.1.1.1	Message Server and MTM architecture
+The message server is the core component in the messaging subsystem. It provides the message store used to contain messages. The Message Type Module architecture also allows plug-ins to add support for new message types to the messaging subsystem.
+Component	Description
+messaging\framework\serverexe	Executable that links to the server component and starts the message server
+messaging\framework\server	Contains classes that make up both the client and server side of the message server API.
+messaging\framework\mtmbase	Base classes for the plug-ins that handle the various message types
+3.1.1.2	Schedule Send
+The Schedule Send component is an extension to the framework that provides support for scheduling of operations such as sending messages. Message type modules that wish to support this functionality can use these support components to implement scheduling. For example the SMS MTM uses this to allow scheduled sending of SMS messages. 
+Component	Description
+messaging\schedulesend\schedulesendmtm	Base classes that handle functionality for message server plug-ins that wish to enable scheduling of sending messages.
+messaging\schedulesend\schedulesendexe	Executable use to provide schedule send behaviour.
+3.1.1.3	SendAs Version 1
+This version of SendAs is supported in releases pre - v9.0. SendAs provides a high level API for applications that wish to include a “Send As” menu to allow users to send content via one of the message types supported by messaging. The application using the API does not have to be aware of the message type selected by the user. Note the API does not send the messages. 
+Component	Description
+messaging\sendas	High level API to allow creation of messages.
+3.1.1.4	SendAs Version 2 
+From v9.0 and onwards the SendAs has been replaced with client server architecture based SendAs server. The client server architecture enhances secured platform implementation. The SendAs server polices the client application. If it is not trusted with required capabilities the SendAs server will refuse the client access. The client MTM for the message type can send a message with user permission even if the client does not have the correct capabilities.
+Component	Description
+messaging\sendAsV2	High level API to allow the creation and sending of messages
+
+3.1.1.5	Watcher Framework
+The watcher framework is a lightweight framework to allow plug-ins to wait on events. For example there is an SMS watcher that waits for incoming SMS messages and delivers them to the message store. The watcher framework will only load plug-ins from ROM.
+Component	Description
+messaging\framework\watcher	Executable that loads and runs watcher plug-ins.
+3.1.1.6	Message URL Handler
+Support for recognising messaging URLs (mailto:, sms:, fax:, mms:), and then launching an editor with a new message.
+Component	Description
+messaging\urlhandler\urlhandler	An application that parses the URLs and then creates a correctly addressed message and launches a message editor.
+messaging\urlhandler\recogniser	Recognisers that map from the URL schemes to the mime types.
+3.1.1.7	Bio Message Framework
+The Bio Message Framework provides a framework that supports plug-ins to handle messages like vCards and Internet access point set-up messages.
+Component	Description
+messaging\biomsg\BDB\BIODB	Classes to maintain the database of bio registration files.
+messaging\biomsg\BIFU\BIFU	 	Classes for reading and writing bio registration files
+messaging\biomsg\BIOC\BIOC	Bio message client MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+messaging\biomsg\BIOS\BIOS	Bio message server MTM, this is in the framework section as it forms part of the bio messaging framework it is also a plug-in to the messaging framework.
+3.1.2	Plug-ins
+3.1.2.1	SMS
+The SMS plug-ins provide application level support for the Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchers	Plug-ins to the watcher framework to listen for SMS, WSP, and WDP messages and deliver them to the global inbox in the message store.
+messaging\sms\clientmtm	A plug-in to the message server framework to provide a generic API for creation of SMS messages (SMS Client MTM & SMS utilities)
+messaging\sms\servermtm	A plug-in to the message server framework to provide a generic API for sending of SMS messages (SMS Server MTM)
+3.1.2.2	CDMA SMS
+The CDMA SMS plug-ins provide application level support for the CDMA Short Message Service messages.
+Component	Description
+messaging\biomsg\BioWatchersCdma	Plug-ins to the watcher framework to listen for CDMA SMS messages and deliver them to the global inbox in the message store.
+messaging\sms\multimode\clientmtm	A plug-in to the message server framework to provide a generic API for creation of CDMA SMS messages (CDMA SMS Client MTM)
+messaging\sms\multimode\servermtm	A plug-in to the message server framework to provide a generic API for sending of CDMA SMS messages (CDMA SMS Server MTM)
+
+3.1.2.3	Email
+The email plug-ins provide support the POP3, IMAP4 and SMTP email protocols and support for parsing and generating plain test, MIME and M-HTML format email messages.
+Component	Description
+messaging\email\clientmtms	A plug-in to the message server framework to provide a generic API for creation of email messages (IMAP4 SMTP and POP3 Client MTMs & email utilities)
+messaging\email\imapservermtm	A plug-in to the message server framework to provide a generic API for access to a remote IMAP4 server (IMAP4 Server MTM)
+messaging\email\smtpservermtm	A plug-in to the message server framework to provide a generic API for access to a remote SMTP server (SMTP Server MTM)
+messaging\email\popservermtm	A plug-in to the message server framework to provide generic API for access to remote POP3 server (POP3 Server MTM)
+messaging\email\servermtmutils	Email utilities for parsing plain text and MIME email messages. It also provides an abstraction of the TCP/IP sockets for use by the SMTP POP3 and IMAP4 plug-ins.
+messaging\email\autosend	An executable that requests SMTP Server MTM to send messages in the outbox. This is used to provide send on next connection functionality and is started by the POP3 and IMAP4 Client MTMs. 
+3.1.2.4	OBEX
+The OBEX MTM is a set of plug-ins to the message server that provides support for IR and Bluetooth beaming. 
+Component	Description
+messaging\obex\btmtm\btclient\group\btcmtm	Bluetooth Client MTM
+messaging\obex\btmtm\btserver\group\btsmtm	Bluetooth Server MTM
+messaging\obex\irmtm\irclient\group\ircmtm	IR Client MTM
+messaging\obex\irmtm\irserver\group\IRSMTM	IR Server MTM
+messaging\obex\obexmtm\obexclient\group\obexClientMtm	OBEX Client MTM, base classes for the Bluetooth and IR Client MTMs
+messaging\obex\obexmtm\obexserver\group\obexServerMtm	OBEX Server MTM, base classes for the Bluetooth and IR Server MTMs
+messaging\obex\obexmtm\obexutil\group\obexMtmUtil	OBEX MTM utilities
+3.1.2.5	MMS
+The MMS MTM is a plug-in to the message server that provides support for MMS messages. From v9.0 and onwards MMS MTM and related components are removed.
+Component	Description
+messaging\mms\utils	MMS Utilities
+messaging\mms\servermtm	MMS Server MTM
+messaging\mms\mmswatcherplugins	MMS plug-ins to WAP push framework to handle reception of MMS notifications
+messaging\mms\codec	MMS utilities for handling MMS codecs
+messaging\mms\clientmtm	MMS Client MTM
+3.1.2.6	GMXML
+GMXML is a parser/generator for SMIL presentations for MMS messages.
+Component	Description
+messaging\GMXML\XMLParser	XML parser designed for parsing of SMIL messages
+messaging\GMXML\XMLDom	XML document object model designed for parsing of SMIL messages
+messaging\GMXML\SMILdtd	SMIL DTD
+3.1.2.7	Bio Message Plug-ins
+These parsers plug into the bio messaging framework to handle specific types of bio message.
+Component	Description
+messaging\biomsg\cbcp\CBCP	Compact business card parser
+messaging\biomsg\enp\ENP	Email notification parser
+messaging\biomsg\gfp\gfp   	General file parser
+messaging\biomsg\iacp\IACP	Nokia Smart Message Internet Access Parser
+messaging\biomsg\wapp\wapp	Nokia/Ericsson OTA Parser
+3.1.2.8	PCMTM
+Plug-in to the message server that provided email synchronisation with a PC. This component has been deprecated in 8.0a and will not been documented in the API section below.
+3.1.2.9	Fax
+Plug-in to the message server that provides fax support. This component has been deprecated in 8.0a and will not been documented in the API section below.
+
+3.2	General Description
+3.2.1	Messaging / Message Server and MTM Architecture APIs
+3.2.1.1	Key Internal Relationships and Dependencies
+ 
+Figure 2 MTM Relationships
+Figure 2 shows the relationship between the Message Server and the MTM plug-ins. The grey classes are realisations of the MTM interfaces defined by the messaging framework. The message server depends on the Server MTM interface. Messaging Clients depend on the Client, UI and UI Data MTM interfaces and the Message Server Client API.
+3.2.1.2	Key External Relationships and Dependencies
+ 
+Figure 3 External Dependencies
+The grey package representing the messaging client depends on the Client, UI and UI Data interfaces and the Messaging Client API. The message server then depends on:
+•	Charconv – Provides character set conversion routines, used to convert encoded message body text to Unicode body text.
+•	EStore – Provides API to handle a stream based store used for the messaging index file and the framework classes for the message store files. (omitted from other dependency diagrams as it is implied by the dependency on the message server)
+•	F32 – Provides the file server APIs used to access the file system directories in which messaging stores files containing message data. (omitted from other dependency diagrams)
+•	BAFL – Provides API to load the correct messaging resource file dependent on the current language and to register the message store index file with the backup server. (omitted from other dependency diagrams)
+•	ETEXT – Rich text APIs used to store body text of messages, this rich text format is a Symbian Proprietary format. (omitted from other dependency diagrams)
+•	EUSER – Core Symbian OS utilities such as descriptors, arrays, client / server framework, cleanup stack and others (omitted from this and other dependency diagrams).
+•	Central Repository – Centralised and secure storage facility for application settings, the message server stores message settings data in the central repository (from v9.0 and onwards).
+Note that debug only dependencies such as the flogger have been omitted from dependency diagrams.
+3.2.1.3	API Purpose - Further Elaboration
+3.2.1.3.1	Message Store
+The message server provides persistent storage of messages and messaging account settings. It does this by providing a message store consisting of a tree of message entries. Multiple clients can access the message store simultaneously. Each entry in the tree can represent an email account, folder of messages, message part, etc.
+ 
+Figure 4 Message Store
+Figure 4 shows an example message store. The tree is broken down in to three levels:
+1.	The Root entry. This entry is just present to tie the tree structure together
+2.	Service entries. There is one local service under which local folders and messages are stored, and zero or more remote services. Remote services represent message accounts.
+3.	Message & Folder entries.  Messages and folders, under the local service represent messages stored on the device. Messages and folders under remote services represent a local copy of messages that are present on a remote server. For example under a POP3 email service you would have copies of all the messages present on the POP3 email server, or under an SMS service you might find SMS messages that are stored on a SIM.
+The message server controls access to the entries in the store. It enforces the three levels therefore attempts to create message or folder entries directly under the root entry will fail.
+The message server provides three types of storage for each entry in the message store:
+•	Index entry - TMsvEntry - intended to provide enough information for UI to display list views as shown in Figure 5. This consists of two strings and various flags (read, complete, has attachments etc). 
+•	Stream based file store - CMsvStore – provides storage of streams of data associated with UIDs. A standard UID is defined for storing body text. Other UIDs are specific. For example the email MTMs define a UID for storage of MIME headers. Compared to the index entry information this is used to store larger objects and is extensible, at the cost of being slower to access. From v9.0 and onwards CMsvStore provides an Attachment API for managing attachments. The Attachment API should be used as attachments can no longer be accessed directly due to Platform Security. 
+•	Directory of files – normally used for attachments.
+The only storage type that is always present is the index entry. The stream store and the directory of files are optional.
+ 
+Figure 5 Series 60 Inbox List View
+ 
+Figure 6 Remote and Local Entries
+As shown in Figure 6 the message store is split into two sets of entries:
+•	Remote entries - entries that are representations of entries stored on a remote store .
+•	Local entries - entries not linked to a remote store.
+The message server handles changes to local entries; internally it hands off changes to remote entries to the Server MTM that owns that service. Examples of operations that are handed off to Server MTMs are operations involving copying and moving messages to and from a remote service. See section 3.2.1.3.5 or more information on Server MTMs.
+Each entry within the store has a type:
+Folder – Messages can be grouped into folders. Standard folders such as inbox / outbox and user created folders.
+Message – Storage of the content of a message. Message entries can have child entries used to represent the structure of a message.
+Attachment – These represent attachments under a message entry.
+Root & Local Service Entry – There tie the tree structure together. However the Stream store associated with the root entry is sometimes used by UIs to store preferences e.g. default folder views etc.
+Remote Service - Represents a source and / or destination for messages. They are used to store the settings associated with the source / destination.
+Message Type Specific - MTMs can create other message types for use as child entries to messages they own. For example email uses a tree structure, with a message entry as the root, to represent the MIME structure of an email message; it uses folder entries to represent MIME folders and adds new types for entries representing the html body and text body parts of a message. This is shown in Figure 7.
+ 
+Figure 7 Email Message
+Using the message store to represent message structure allows reuse of the tree structure and makes it very simple to represent one message embedded in another. However this representation introduces performance issues as it results in each message having multiple files associated with it. The message server also keeps all index entries in memory; therefore this representation increases the memory footprint of the message server. Therefore when designing new MTMs we should think about moving away using multiple index entries to store one message in the message store.
+A default message store is created if the message server starts and no message store is present or a corrupt  message store is present. The server will initially create a store with just a root entry, and then the server will create any standard folders defined in the resource file msgs.rsc. Finally the server will check whether an executable ‘mailinit.exe’ is present on the system, if it is present the server will launch the executable to allow customisation of the message store. The behaviour of ‘mailinit.exe’ is defined by the UI family  of the device. However the typical behaviour is to load each of the UI Message Type Modules and allow each to perform any message type specific initialisation. For example the SMS plug-in typically creates a default service entry.
+
+3.2.1.3.2	Data File Storage (pre - v9.0)
+This section describes the files used by the message server before release v9.0. For information on the files used for release from v9.0 and onwards see section [3.2.1.3.3.1].
+Filename	Access	Purpose
+?:\system\Mail\index	Private	Message server index file, internal to message server
+?:\system\Mail\<8 hex digits>	Shared via API	Message server store files for services, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>.new	Shared via API	Temporary file used during committing message server store files.
+?:\SYSTEM\MAIL\<8 HEX DIGITS>_F\*	Shared	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Shared via API	Message server store files for message entries, clients access these via a messaging API.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Shared via API	Temporary file used whilst committing message server store files.
+?:\system\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Shared	Files associated with a message entry. These are accessed directly by clients.
+c:\system\data\msgs.ini	Private	Stores the drive containing the last used message store
+c:\system\Mtm\Mtm Registry v2	Private	Cache of registered MTMs, internal to message server
+C:\system\data\sms_settings.dat	Shared	Copy of the SMS settings.
+?:\System\Mail\StoreInit.tmp	Shared	Created when message server runs ‘mailinit.exe’, ‘mailinit.exe’ should delete the file when it has successfully completed.
+?:\System\Mail\storedeleted.tmp	Shared	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+Files that are shown as private should only be accessed by the message server or by connectivity process for backup and restore purposes. Files listed as shared are accessed directly by messaging clients. Files listed as shared via API are accessed by client process but only via messaging APIs.
+3.2.1.3.3	Platform Security Compliant Message Store
+From v9.0 and onwards the message store is stored in the message server's data cage and the settings data are placed in the Central Repository. Access to the message store is only possible via message server APIs and not directly through file access. This leads to secured data storage and secured platform.
+3.2.1.3.3.1	Data caging
+Filename	Purpose
+?:\private\<SID>\Mail\index	Message server index file, internal to message server
+?:\ private\<SID>\Mail\<8 hex digits>	Message server store files for services, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>.new	Temporary file used during committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_F\*	Files associated with a messaging service. These may be accessed directly by clients. 
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>	Message server store files for message entries, clients access these via a messaging API.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>.new	Temporary file used whilst committing message server store files.
+?:\ private\<SID>\Mail\<8 hex digits>_S\<hex digit>\<8 hex digits>_F\*	Files associated with a message entry. These are accessed directly by clients.
+c:\ private\<SID>\data\msgs.ini	Stores the drive containing the last used message store
+c:\ private\<SID>\Mtm\Mtm Registry v2	Cache of registered MTMs, internal to message server
+?:\ private\<SID>\Mail\StoreInit.tmp	Access via IPC call
+?:\ private\<SID>\Mail\storedeleted.tmp	Created when message server finds and deletes a corrupt message store. Allows the UI to inform the user about the fact that the message store was corrupt.
+?\resource\messaging\bif\*.bif	Registration data field with UID used in BIO framework
+
+3.2.1.3.4	How message centres display the message store
+The UI normally provides a Message Centre application to display the structure of the message store to the user. Different UIs map the structure to different views.
+ 
+Figure 8 Series 60 Message Centre (Composed from 2 screen shots)
+Figure 8 shows the top level view of the message centre application on a Series 60 phone. This shows that the message centre has hidden the local service and shows the standard folders at the same level as the services. Also the SMTP, SMS and MMS services are marked as hidden entries in the message store, and so do not appear in the message application.
+ 
+Figure 9 UIQ Message Centre
+However Figure 9 shows that the UIQ message centre has no 1-1 mapping from the structure in the message store to the structure shown to the user. Each of the message types is displayed as if its messages were contained in separate folders. Under each of these folders the user is presented with an inbox, outbox, send and drafts folder. This filtering is done in the UI layer as this functionality is not provided by the messaging API.
+3.2.1.3.5	Message Type Module Architecture
+  
+Figure 10 Messaging MTM Structure (light coloured components are part of messaging subsystem)
+The MTM architecture is the plug-in scheme provided by the messaging framework to integrate different message transports into the message server. The plug-in scheme consists of four interfaces, the UI MTM, UI Data MTM, Client MTM and Server MTM. The messaging client applications loads and uses the first three which are loaded within the client’s process space. The final one the Server MTM is loaded within the message server process. The APIs for the client facing interfaces are extensible via run time type information provided by the QueryCapability API, and the InvokeAsyncFunction and InvokeSyncFunction APIs.
+3.2.1.3.5.1	UI MTM 
+Handles requests from clients to view and edit messages or service settings. The MTM handles interaction with the message centre and as such the exact meaning of the APIs is defined by the UI. However common meanings are:
+•	Create – Launches the editor with a new message.
+•	Edit – If entry is a message this launches the editor; if entry is a service it edits the settings.
+•	View – Launches the message viewer.
+•	Display progress of an operation. 
+3.2.1.3.5.2	UI data MTM
+This MTM provides fast access to UI components such as menu resources and bitmaps required by message centre for list views etc. Again the exact semantics are UI specific.
+There is a resource file defining UI specific functions, for example the Series 60 Messaging UI checks if the resource file contains text to display in the “New Message” menu.
+The UI data MTM also provides mapping from the message store’s TMsvEntry structure to Icons for the messaging list views and a status string, for example in the case of Nokia 9210 it is used in the outbox view to provide strings like “Resend 01:07” as shown in Figure 11. The class also provides functions to determine what operations are possible with a given entry. Examples of this are APIs that return whether the UI should allow the user to reply to the entry or to delete a service entry. The UI then uses this information to determine which menu options / short-cut keys should be allowed when the user selects a given entry.
+ 
+Figure 11 Nokia 9210 Outbox List View
+3.2.1.3.5.3	Client MTM
+Provides methods to create / reply and forward messages. Functions the Client MTMs provide are:
+•	Create Message.
+•	Reply to a Message.
+•	Forward a Message.
+•	Add / remove Addressees.
+•	Add / remove body text.
+•	Add / remove subject.
+•	Add / remove attachments (the API cannot list attachments).
+The Client MTM interface is used by SendAs to provide a way of creating messages independently of the message type.
+3.2.1.3.5.4	Server MTM
+This is the final interface that makes up an MTM plug-in; it differs from the other three plug-ins in that it is loaded into the message server’s process space. The Server MTM provides access to messages under remote services. It handles connecting to remote servers to handle updating the local cache of these messages or to send messages copied to remote services when messages are copied to a remote service. The message server loads and hands off all message store operations that involve entries under a remote entry, these are the entries on the left-hand side of Figure 6.
+Functions that a Server MTM must implement:
+•	Copy/MoveToLocal – called when the message server is asked to move or copy an entry that is currently under a remote service. A Server MTM might map this to retrieving a message from a remote mailbox.
+•	Copy/MoveFromLocal – called when the message server is asked to move or copy from under the local service to a destination under a remote service. A Server MTM should map this to sending a message if the MTM supports sending.
+•	Create, Delete, Change – called when the message server is asked to perform these operations on entries under a remote service.
+•	StartCommand – this API provides a means of extending the API the Server MTM provides. Messaging clients pass a command ID and a selection of entries via the message server to the Server MTM. Examples of commands that Server MTMs might provide are: connect and synchronise the entries under a remote service with the messages on an email server, list SMS messages present on the phones SIM. These commands are MTM specific and therefore clients have to know which MTMs support which commands.
+3.2.1.3.5.5	MTM Registration
+MTMs must be registered with the message server so that clients can query what MTMs are present and the server knows which DLL to load to create a given MTM component. MTMs are registered by providing a resource file containing the MTMs UIDs, human readable name, and for each MTM interface it lists a DLL and the ordinal at which the constructor for that interface exists. The message server will search the ROM drive for MTM registration resource files  on start-up and it will automatically register any MTMs found. For registration of MTMs installed on other drives, the message server provides an API to register and de-register an MTM. Registration will persist across a reboot, so an MTM only needs to be registered when it is installed on the system.
+When MTMs are registered or unregistered the message server will send events to all messaging clients with a message server session open.
+3.2.1.3.6	Message Server Client API
+The Messaging Server Client API breaks down into two categories: APIs for manipulation of the message store and utility APIs.
+3.2.1.3.6.1	Message Store manipulation APIs
+Requests from clients to modify the message store fall into three categories:
+1.	Operations performed entirely with local entries (entries on the right-hand side of Figure 6) for example requests to create entries in the inbox, delete an entry from the drafts folder etc. The message server handles these operations directly.
+2.	Operations that involve a remote entry (entries on the left-hand side of Figure 6) for example requests to delete an entry under a POP3 service, or copy a message to an SMTP service. The message server hands these operations off to the Server MTM that owns the service under which the remote entry is stored. The only exception to this rule is the ChangeAttributes API call. This modifies flags on an index entry and is handled by the message server for both local and remote entries. This means that a Server MTM can not rely on being called when flags like the Unread flag are changed. Note that operations can not involve two remote entries; therefore requests to copy entries between a remote service representing one POP3 account to a remote service representing another POP3 account will fail with an error.
+3.	Requests that are explicitly directed at a Server MTM via the TransferCommand API. These commands are just passed to the correct Server MTM by looking up the Service ID and MTM of the first message in the selection passed into the command.
+The message server sends events when entries in the message store are modified to messaging clients that have a session open with the server. 
+Where the API provides asynchronous functions to modify the message store or transfer a command to a Server MTM, the functions will return a message server operation object. This object can be used to request progress on operation or cancel the operation. Deleting the operation object returned, or closing the session used to make the request will result in the operation being cancelled, therefore a messaging client must remain running until operations it has requested have either completed or they will be cancelled. See appendix A.1 for an example of an asynchronous copy operation. If a Server MTM operating on the same remote service is already handling an operation, the message server will queue the new operation to be handled when the Server MTM becomes free. Requests for progress of operations that are queued will fail with KErrNotReady. The fact that the queue is based on the remote service ID means that you can have two Server MTMs of the same type running at the same time as long as they are operating on different services. So for example you can have two separate POP3 MTMs running synchronising different remote services with email servers.
+3.2.1.3.6.2	Utility APIs
+1.	Access to MTM registries – These allow clients to construct instances of the interfaces an MTM implements.
+2.	Register / Unregister an MTM.
+3.	Change Drive – The message server closes the current message store and opens one on the drive specified. If no message store is present on the drive specified a new message store is created. The message sever can have only one mail store open at a time, if the current mail store is not available because a the disk the mail store is on is not present then the message server will switch the mail store back to the C: drive if an attempt is made to create a message in the inbox.
+4.	Launching Editors – This launches the correct editor for a message. It is implemented by delegating the request to the UI MTM
+3.2.2	Messaging / Send As APIs
+3.2.2.1	Key Relationships and Dependencies
+ 
+Figure 12 SendAs Version 1 Dependencies
+SendAs version 1 and only present in releases before v9.0. SendAs uses the Messaging Client API to access the registry of Client MTMs and construct the Client MTM interfaces. The Client MTMs are then used for composing the message. SendAs requires clients to implement the MSendAsObserver interface. This interface is responsible for checking the return value of the capability queries made to Client MTMs that require a response and also for rendering message types that require it. The only message type supplied by Symbian that requires rendering is Fax, however this MTM has been removed in 8.0a and future releases.
+3.2.2.2	API Purpose - Further Elaboration
+3.2.2.2.1	SendAs API (pre – v9.0)
+The SendAs API makes use of the Client MTM interface and the Messaging Client API to provide a generic API for creating messages. Note despite the name of this component SendAs does not provide an API to send the message.
+SendAs builds a list of registered MTMs, then queries each MTM to check whether it supports sending, removing those MTMs from the list that do not support sending. This list is then provided to the messaging client application. At this point the application can add more constraints on the list of MTMs; for example it can insist the MTM supports Attachments or more than a certain size of body text. SendAs queries each of the MTMs about the requirements and will drop any MTMs from the list that does not meet them. When the application has finished adding requirements it selects one of the MTMs left in the list and uses that to compose the message, adding addresses, a subject, body text and attachments.
+SendAs supports setting a BIO Type for the message that is composed. This tells the transport that the body text represents a BIO Message. This is used when sending business cards from the contacts application as SMS messages; the contacts application puts the vCard data in the body text of the message and the transport sends it correctly. If the MTM in question supports attachments then the vCard is attached to the message.
+A new CSendAs object must be created for each message the application wishes to create.
+3.2.3	Platform Security Compliant SendAs Server (v9.0 onwards)
+ 
+Figure 13 SendAs Version 2 Dependencies
+From v9.0 and onwards the CSendAs has been replaced by the SendAs server component. The new SendAs server controls the access to the message store. Some of the key SendAs Server features are listed as follows. 
+•	Send a message once the capability policing of the client application has been completed. 
+•	Allow client applications to launch an editor for a specified message type. 
+•	Allow client applications to query the message type.
+The main client-side API is the RSendAs class. The client applications use this to connect to the Send-As server. The session object on the server-side is an instance of CSendAsSession. 
+Client applications create messages using the RSendAsMessage API. Opening an RSendAsMessage object on Send-As server session creates a CSendAsMessage object in the Send-As server. There is a one-to-one mapping between an RSendAsMessage object and a CSendAsMessage object. This allows client applications to create multiple messages concurrently.
+
+3.2.4	Messaging / Schedule Send APIs
+3.2.4.1	Key Relationships and Dependencies
+ 
+Figure 14 Schedule Send Dependencies
+The Schedule Send Server MTM base class depends on the task scheduler to launch the schedule send executable at the correct time. To send the message with a package of data previously passed into the task scheduler by the Server MTM. The schedule send executable then uses the Messaging Client API to actually perform the requested operation.
+3.2.4.2	API Purpose - Further Elaboration
+3.2.4.2.1	Schedule Send
+The Schedule Send functionality is delivered by four components:
+Server MTM Base Class – The base class provides support to Server MTMs that wish to support scheduled operations. 
+Data Structures – These are classes used to represent the data associated with a scheduled operation.
+Executable – The executable is run by the task scheduler at the scheduled time. 
+The Task Scheduler – This component is part of the system libraries subsystem. Currently the SMS and Fax Server MTMs support scheduled sending.
+Clients request the Server MTM schedules operations via additional commands passed to TransferCommand API; this is passed to the Server MTM via the message server. The Server MTM packages the operation ID, a selection of message IDs, how often to poll for progress and an MTM specific buffer. It then passes this package of data to the task scheduler requesting that it launches the schedule send executable at the correct time with the packaged information.
+When the task scheduler launches the schedule send executable, it unpacks the schedule information and uses the Messaging Client API to request the Server MTM to perform the operation.
+Schedule Send supports a retry mechanism if the operation fails. The Server MTM has a resource file containing a mapping from the error codes the operation can fail with and actions to be performed. For example the SMS resource file has a mapping such that if the operation fails with an error code indicating a bad phone number the SMS will be set to failed and left in the outbox. Whereas if it fails with a error code indicating temporary network failure the send operation will be scheduled to be resent later with a maximum of three retries.
+3.2.5	Messaging / Watchers APIs
+3.2.5.1	Key Relationships and Dependencies
+ 
+Figure 15 Watcher Dependencies
+The watcher executable’s dependency on the message server is the result of a performance measure. The watcher process creates a message server session before initialising each of the watcher plug-ins and closes the session when it has finished. This keeps the message server running during initialisation avoiding starting and stopping the message server if each watcher plug-in opens and closes sessions.
+3.2.5.2	API Purpose - Further Elaboration
+The watcher framework consists of an executable that is launched when the device boots. The component that is responsible for launching it depends on the UI family. When the watcher.exe is launched it will load each DLL in z:\system\libs\watchers which has a second UID as KWatcherUid and calls the first DLL entry point to construct a CActive object.
+From v9.0 and onwards watcher DLLs are found by scanning the directory \resource\messaging\watchers for registry files. These files contain the name of a watcher DLL that can be loaded from ROM i.e. z:\sys\bin. 
+The framework has retry behaviour if the first entry point leaves, in this case the watcher framework will start a timer and try and construct the watcher object 10 seconds later. Five attempts are made before the watcher plug-in is assumed to have failed completely. Once the watcher framework has constructed all the watchers it starts the active scheduler which should never exit.
+Watcher plug-ins typically make a request to another subsystem such that they will be completed when an external event like a fax line ringing or an SMS being received occurs. When the watcher has completed processing the request it will wait for the next event.
+No support for starting / stopping watchers is provided. This is a limitation that makes watchers unsuitable for operations like listening for messages beamed via IR, as the watcher should only run while the IR port is active.
+3.2.6	Messaging / Message URL Handler APIs
+3.2.6.1	Key Relationships and Dependencies
+ 
+Figure 16 Message URL Handler Dependencies
+3.2.6.2	API Purpose - Further Elaboration 
+The Message URL Handler provides support for creating messages and launching messaging editors from URLs such as mailto:infobot@example.com?subject=current-issue. Note there is no dependency between the Message URL Handler application which processes the URLs and the Message URL Handler recognisers which maps from URLs to mime types.
+3.2.6.2.1	Message URL Handler Application
+This is a Symbian OS application that registers with the application framework that it can handle the mime types: x-epoc-url/fax, x-epoc-url/mailto and x-epoc-url/sms. When launched with a URL it will parse the URL to retrieve the address and other header fields and then use the SendAs API to create a new message with the correct address, headers etc. The application then uses the APIs in the MturUtils class provide by the mtmbase component in the messaging framework to launch the correct editor for the given message type. The application is marked as hidden and therefore should not be listed by UIs in application browsers.
+3.2.6.2.2	Message URL Recognisers
+This is a plug-in to the recogniser framework it will be called when the application framework wishes to recognise a file. Recognisers are called with the file name, in this case a URL, and a buffer containing the start of the file. The message URL recogniser compares the start of the URL with the URL schemes it recognises, if it finds a URL scheme it knows about it maps it to a mime type. The recogniser ignores the buffer passed in.
+Schemes recognised:
+Scheme	Mime type
+mailto:	X-Epoc-Url/mailto
+fax:	X-Epoc-Url/fax
+sms:	X-Epoc-Url/sms
+mms:	X-Epoc-Url/mms
+See the application framework architectural description for more information on recognisers [R2].
+3.2.7	Messaging / SMS APIs
+3.2.7.1	Key Internal Relationships and Dependencies
+ 
+Figure 17 SMS Internal Dependencies
+3.2.7.2	Key External Relationships and Dependencies
+ 
+Figure 18 SMS External Dependencies
+3.2.7.3	API Purpose - Further Elaboration
+3.2.7.3.1	SMS Watchers
+The SMS watchers are made up of two watchers, the nbswatcher.dll and the wapwatcher.dll, and some common base classes in biowatcher.dll. The watchers listen for incoming messages from the SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.7.3.1.1	NBS Watcher
+The NBS watcher handles reception of SMS messages. When initialised by the watcher framework (see section 3.2.4) the watcher queries the bio messaging database for bio messages that are listed as having a type of ENbs. For each of these bio messages the watcher creates an object that opens a connection to the SMS stack and waits for the particular message type. The message types are either defined by the port number the message will be received on or by a string to watch for at the start of the message. For example Internet Access Configuration Point messages are start with “//SIAP11” and vCards are received on port 226. Finally the watcher listens for all other messages received from the SMS stack.
+When the NBS Watcher receives a non-class 2 SMS message it creates a new entry under the global inbox in the message store. For class 2 messages  the entry is created in the class 2 folder as defined by the SMS settings, this may also be the global inbox. The details field of the entry is used to store the phone number of the incoming message or the name of the sender if the watcher finds a match for the phone number in the contacts database.  The description field is used to store the first N characters of the SMS message, where N is defined in the SMS settings, or for bio messages the description as retrieved from the bio database. Bio messages also have the BioType field set to the UID of the bio message as retrieved from the bio database. The CSmsHeader class, which is a wrapper around the CSmsMessage class provided by the nbprotocols subsystem [R3], is used to externalise the SMS message to the entry’s CMsvStore. The watcher also places a copy of the body text of the message in the rich text stream of the entry’s CMsvStore. 
+The NBS Watcher is also responsible for handing special SMS types including:
+•	Replace Type Messages – When the watcher receives a message of this type it will scan the folder the message would have been delivered to for messages that have a matching protocol ID and from address. For each of the messages it checks whether the time stamps from the service centre and discards the older message.
+•	Message Indications – The watcher can listen for incoming message waiting indications. The CSmsSettings class defines whether the watcher will listen and whether it will deliver the messages to the inbox or discard them. If the watcher is configured to listen for messages then it will use the SMS utilities in the SMS Client MTM to decode the message to determine the notification type and number of messages, e.g. 3 Email messages waiting, the strings for these messages are in the smss.rss resource file.
+•	Delivery Reports – As with Message Indications the watcher can be configured to listen for these and again the SMS utilities get a string from the smss.rss resource file to put in the description field.
+The NBS Watcher handles changes to the bio database using the observer mechanism provided by the bio message database to observe when bio message types are added or removed and starting or stopping the object watching for that bio message type.
+3.2.7.3.1.2	WAP Watcher
+The WAP watcher listens for incoming messages from the WAP stack using the WAP message API [R4]. To determine ports to use to listen for messages the watcher queries the bio message database for bio message types EWsp, EWspSecure, EWap, EWapSecure and registers as an observer of the bio database and so will listen for new bio message with these types as they are added. The watcher stores the messages in the global inbox tagged with the bio type listed in the bio message database.
+3.2.7.3.2	SMS Client MTM
+The SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SIM parameters.
+3.2.7.3.3	SMS Utilities
+These provide:
+•	Classes to represent and store SMS messages (CSmsHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and a SMS number (CSmsNumber).
+•	The CSmsHeader class contains and allows clients to access the CSmsMessage class that the nbsprotocols subsystem provides. This contains the entire SMS message and not just the header.
+•	Functions to generate descriptions and details fields to store with SMS messages, including decoding special messages such as message indication and status report messages, reading resource file for descriptions strings of special messages, using the contacts database to replace phone numbers with names. 
+•	API to validate a GSM number.
+•	Find the TMsvId of the SMS service entry.
+3.2.7.3.4	SMS Server MTM
+3.2.7.3.4.1	Sending Messages
+The SMS Server MTM handles sending of SMS and WAP messages via the SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the SMS message the Server MTM checks the bio type of the message and uses the bio database to check the transport type for the bio message. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the schedule send section 3.2.3.
+3.2.7.3.4.2	Scheduling Messages
+The SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM (see section 3.2.3). It accepts requests from clients either via the SMS Client MTM InvokeAsync API or via the CMsvSession::TransferCommand API to schedule messages to be sent or to delete existing schedules. When it receives a request to schedule a message it packages up the command and uses the scheduled send functionality to request that the task scheduler ask it to send the messages at a future point in time.
+3.2.7.3.4.3	Phone Store
+The phone store is the name given to storage of SMS messages outside of the message store. In the case of GSM phones this is the SIM. The SMS Server MTM accepts requests from clients to copy/move messages to and from the SIM and delete messages from the SIM. For example when copying to the SIM it packages up the SMS message and passes it to the SMS stack with a request to write it to the SIM. If the class2 folder has been set in the SMS settings class then the Server MTM will copy the SMS message to the SIM and then update the SMS message in the message store with details of the slot on the SIM that has been used to store the SMS and the fact that it is stored on the SIM.
+3.2.7.3.4.4	SIM Parameters
+The Server MTM provides functions to read / write SIM parameters, again these requests are passed to the SMS stack to be processed.
+3.2.8	Messaging / CDMA SMS APIs
+3.2.8.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 CMDA SMS Internal Dependencies
+3.2.8.2	Key External Relationships and Dependencies
+` 
+Figure 20 CDMA SMS External Dependencies
+3.2.8.3	API Purpose - Further Elaboration
+3.2.8.3.1	CDMA SMS Watchers
+The CDMA SMS watchers are made up of six watchers, the cdmanbswatcher.dll, vmnwatcher.dll, wemtwatcher.dll, wmtwatcher.dll, wptwatcher.dll, and the wapwatcher.dll, and some base classes in biowatcher.dll and cdmasocketwatcher. While the WAP watcher is common for both GSM and CDMA, the other watchers: CDMA NBS watcher, VMN watcher, WEMT watcher, WMT watcher, and the WPT watcher are used for CDMA only. The watchers listen for incoming messages from the CDMA SMS stack, part of the nbsprotocols subsystem [R3], and the WAP stack part of the WAP-Stack subsystem [R4]. 
+3.2.8.3.1.1	CDMA NBS Watcher
+The CDMA NBS watcher is similar to the NBS watcher and it handles bio messages defined in bio database. The CSmsHeader class is extended to wrap around the CCdmaSmsMessage class provided by the nbprotocols subsystem [R3], and is used to externalise the CDMA SMS message.
+For handling special CDMA SMS type, the CDMA NBS watcher is responsible for handling Message Indications as described in section 3.2.7.3.1.1 NBS Watcher. 
+3.2.8.3.1.2	WAP Watcher
+The GSM WAP watcher is used to handle CDMA WAP message as well. The WAP watcher listens for incoming messages from the WAP stack, which can listen from the CDMA SMS stack or GSM SMS stack as appropriate. See 3.2.7.3.1.2 for more info about WAP watcher. 
+3.2.8.3.1.3	Other CDMA Watchers
+The VMN watcher, WEMT watcher, WMT watcher and WPT watcher are CDMA watchers that handle reception of CDMA SMS messages. All CDMA SMS messages are associated with a teleservice. Therefore, each of the CDMA watchers is responsible for handling one teleservice: VMN watcher handles VMN SMS messages, WEMT watcher handles WEMT SMS messages, WMT watcher handles WMT SMS messages, and WPT watcher handles WPT SMS messages. The CSmsHeader class is reused to externalise the CDMA SMS message.
+The CDMA watchers are also responsible for handling special SMS types including:
+•	Duplicate Message – When the watcher receives a duplicate message, it will discard the duplicate message as defined by the CDMA service settings.
+•	User Acknowledge – The watcher can listen for user acknowledgment message of its teleservice type.
+•	Delivery Acknowledge – The watcher can listen for delivery acknowledgment message of its teleservice type.
+•	Read Acknowledge – The watcher can listen for read acknowledgment message of its teleservice type.
+3.2.8.3.2	CDMA SMS Client MTM
+The CDMA SMS Client MTM implements the standard set of Client MTM APIs described in Client MTM. In addition it provides:
+•	Access to the CSmsHeader object that is used to represent the SMS message.
+•	Access to the SMS settings stored in the associated SMS service. These settings are store in file store pre v9.0 but stored in Central Repository from v9.0 onwards.
+•	The APIs required by Send As to allow Send As to create SMS messages including setting the bio type of the message to allow clients of Send As to send bio messages such as vCards and vCals. The data of the bio message is stored in the body text of the SMS message.
+•	Simple check for valid SMS addresses, and SMS address is considered valid if it contains at least one digit.
+•	Reading and writing SMS messages to R-UIM.
+3.2.8.3.3	CDMA SMS Utilities
+The CDMA version of SMS utilities are binary compatible with the GSM version of SMS utilities. But the classes that store SMS Message (CSMSHeader), and SMS settings (CSmsSettings, CSmsMessageSettings) and SMS number (CSmsNumber) are extended to store CDMA information. The CSmsHeader class is extended to contain and allow clients to access the CCdmaSmsMessage in addition to the CSmsMessage. Other functions provided by the GSM SMS Utilities is also provided by the CDMA version of SMS utilities, see 3.2.7.3.3 for information about GSM SMS Utilities.
+3.2.8.3.4	CDMA SMS Server MTM
+3.2.8.3.4.1	Sending Messages
+The CDMA SMS Server MTM handles sending of CDMA SMS and WAP messages via the CDMA SMS stack and the WAP stack. To support this it implements the CopyFromLocal API inherited from the Server MTM base class. It implements this as sending SMS messages and moving successfully sent messages to the Sent folder. When sending the CDMA SMS message the Server MTM will use the appropriate teleservice type. The MTM supports ENbs that is sent via the SMS stack and EWap, EWapSecure that are sent via the WAP stack. The MTM does not support EWsp or EWspSecure although the watchers do support receiving them. 
+If a message fails to send, sending is retried according to the settings in the smss.rss resource file as described in the scheduled send section 3.2.4.
+3.2.8.3.4.2	Scheduling Messages
+The CDMA SMS Server MTM implements scheduled sending API by sub-classing from the schedule send Server MTM similar to implemented in the GSM SMS Server MTM. See 3.2.7.3.4.2 for more information.
+3.2.8.3.4.3	Phone Store
+In the case of CDMA phones, phone store can be phone-based storage or  R-UIM based storage. The CDMA SMS Server MTM accepts requests from clients to copy/move messages to and from the phone/R-UIM and delete messages from the phone/R-UIM. For example when copying to the R-UIM it packages up the SMS message and passes it to the CDMA SMS stack with a request to write it to the R-UIM.
+3.2.8.3.5	Configuration for using CDMA SMS MTM
+The CDMA messaging components currently only support single mode, but it is designed such that it can become multimode in the future. Currently, -Dcdma option is used to for selecting CDMA mode for using emulator and building ROM.
+
+
+3.2.9	Messaging / Email APIs
+3.2.9.1	Key Internal Relationships and Dependencies
+ 
+Figure 19 Email Internal Dependencies
+
+3.2.9.2	Key External Relationships and Dependencies
+ 
+Figure 20 Email External Dependencies
+3.2.9.3	API Purpose - Further Elaboration
+3.2.9.3.1	Email Overview
+The Email plug-ins consist of a set of utilities and MTMs for POP3, IMAP4 and SMTP. For each email account a pair of services entries is created in the message store. For a POP3 account there will be an SMTP service and a POP3 service, for an IMAP4 account there will be an SMTP service and as IMAP4 service. These entries are used to store the settings for the email transport. Each of the service entries has its related ID set to the other member of the pair. The SMTP service is created invisible so the user only sees the POP3 or IMAP4 service entry, copying a message to the SMTP service will cause the SMTP Server MTM to attempt to send the message. The POP3 and IMAP4 MTMs provide functionality to synchronise with a remote email server this is achieved by extending the Client MTM interface via the InvokeAsync API. Synchronisation of a POP3 or IMAP4 account will result in copying headers and optionally body text and attachments from the email server and creating message entries under the POP3 or IMAP4 service entry.
+Email messages are represented in a common format whether they are being sent via SMTP or downloaded via POP3 or IMAP4. The email client utilities provide the classes for creating and manipulating the entry structure used to store emails. The email server side utilities provide classes to convert between the entry structure used to store emails in the message store and RFC2822 email messages sent to SMTP servers and retrieved from POP3 servers. IMAP4 email messages are parsed by the email server and the IMAP4 Server MTM requests and stores the individual parts of the messages.
+3.2.9.3.2	Email Client Utilities
+The email client utilities are part of the imcm DLL and provide classes for:
+•	Storage of email messages including mime headers, RFC2822 headers, attachments, body text and encoding information in the message store
+•	Manipulating email messages, for example adding attachments, replying etc.
+•	To wrap up the character converters used to convert between standard character sets and Unicode. These make use of the charconv component that is part of the system libraries subsystem.
+•	Storage of Email settings in the message store.
+•	Progress information for email operations.
+The utilities are used directly by clients to access parts of email messages for display. CImEmailMessage provides the functionality used by clients displaying email messages, including listing attachments, getting body text and resolving URIs in M-HTML messages.
+The Email Client MTMs use the utilities when they are asked to create, reply to and forward messages CImEmailOperation provides the functionality to perform these operations. Each email message is represented by a parent message entry and then entries to represent mime folders and mime parts, see Figure 7 for an example, so adding or deleting mime parts involves walking the tree of entries and inserting / removing entries as appropriate.
+3.2.9.3.3	Email Server MTM Utilities
+The Email Server MTM Utilities are responsible for generating and parsing of RFC2822 format email messages and providing an API to wrap up a TCP/IP connection to a remote email server.
+•	Parsing of RFC2822 Email Messages – The utilities provide an API that accepts the text of an RFC2822 email message a line at a time and stores the email message in messaging’s internal format for email messages. See the Email Client Utilities for details of this format. The API handles storing of RFC2822 headers, MIME headers, decoding of Base64 encoded or uuencoded attachments and decoding of text received in character sets supported by the charconv component. This API is only accessible to Server MTMs, as it requires classes that can only be instantiated while running within the message server process. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	Generation of RFC2822 Email Messages – The utilities provide an API to convert an email in messaging’s internal format into an RFC2822 email message. The API provides access to the RFC2822 text a line at a time for streaming to an SMTP server. The exact format of the email depends on the settings passed in; the API can generate plain RFC2822 email messages with uuencoded attachments, MIME email messages with Base64 encoded attachments, or M-HTML email messages with Base64 encoded attachments. See the Messaging Functional Specification [R1] for detail on which email specifications the utilities support.
+•	TCP/IP socket wrapper – The utilities provide a class that abstracts a TCP/IP socket supplied by the networking subsystem into an API that supports sending and receiving lines of text to / from a remote server. This API is used to connect to remote email servers by each of the email Server MTMs. The API can either create insecure or secure sockets enabling the SSL encryption provided by the networking subsystem. It also supports changing an insecure socket into a secure socket, this enables the email Server MTMs to implement email protocols where the initial connection to the server is insecure and then a secure socket is negotiated before sending or requesting any sensitive information.
+3.2.9.3.4	POP3 MTMs
+The POP3 MTMs implements the functionality to synchronise the local message store with a remote POP3 email server.
+3.2.9.3.4.1	Client MTM
+The POP3 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Reply to, forward – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new messages, create receipts and forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Connecting, disconnecting and copying email while connected – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the POP3 Server MTM.
+•	Querying connection status – This command lets clients know whether the POP3 Server MTM is connected to an email server, and is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound operations – The Client MTM provides functionality to wrap up connecting to email servers, copying / moving new messages or a selection of messages, and then optionally disconnecting. These commands are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM implements this by using the CImPOP3GetMail class which requests the correct sequence of operations from the Server MTM, waiting for each operation to complete before requesting the next one.
+•	Send on next connection If the Client MTM gets a request to connect to an email server it will check whether the POP3 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Offline operations – The POP3 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.4.2	Server MTM
+The POP3 Server MTM handles the communication with the remote POP3 server and implementation of the POP3 protocol. The MTM uses CImTextServerSession to handle the communication with the email server and CImRecvConvert to parse the email messages downloaded, both are provided by the Email Server MTM Utilities. 
+•	Connect – The POP3 Server MTM will open a socket to the email server using CImTextServerSession and login user the username / password in the POP3 settings. After a successful connection the Server MTM will attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Populate Message – The POP3 Server MTM treats requests to copy a message from and to the POP3 service as a request to download the full message.
+•	Offline operations – When the POP3 Server MTM receives a request to copy, move, or delete and is not connected to a POP3 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the POP3 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+3.2.9.3.5	IMAP4 MTMs
+The IMAP4 Server MTM implements the functionality to synchronise the local message store with a remote IMAP4 email server.
+3.2.9.3.5.1	Client MTM
+The IMAP4 Client MTM implements the standard Client MTM APIs and other extensions:
+•	Connecting, disconnecting, synchronising, un/subscribing folders – These operations are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to the IMAP4 Server MTM.
+•	Send on next connection – If the Client MTM gets a request to connect to an email server it will check whether the IMAP4 settings. If send on next connection is requested it will launch the autosend.exe executable (see section 3.2.7.3.7) to handle sending messages waiting in the outbox.
+•	Reply to, and forward messages – These are accessible via the ReplyL and ForwardL APIs of a Client MTM and are implemented as calls to the email utilities class CImEmailOperation.
+•	Reply to, forward, create new, create receipt, forward as attachment – These are accessible as commands available via the InvokeAsyncFunction API of the Client MTM, they are implemented as calls to CImEmailOperation.
+•	Querying connection status – These commands let clients know whether the IMAP4 Server MTM is connected to an email server and whether it is currently processing a request. They are available via the InvokeAsyncFunction API of the Client MTM. The Client MTM requests the information from the Server MTM.
+•	Compound Connection and synchronisation – The IMAP4 Client MTM provides a compound operation that connects and synchronises with an IMAP4 server. This operation is implemented as a client side object that combines requests to the IMAP4 Server MTM. The client side operation can complete the client request either after the connection, after the connection + sync or after the connection + sync + disconnect. The client will keep requesting that the inbox be resynchronised at a configurable interval so new messages received in the inbox on the server will appear under the IMAP4 inbox. The CImapConnectAndSyncOp class handles these compound operations.
+•	Compound Connect and copy / move / populate messages – The IMAP4 Client MTM provides a compound operation that connects to an IMAP4 server and copies moves or populates messages. The implementation is provided by the CImImap4GetMail class which makes calls back into the IMAP4 Client MTM.
+•	Offline operations – The IMAP4 Client MTM has a command to cancel offline operations, this is available via the InvokeAsyncFunction API of the Client MTM. The Client MTM passes the request to the Server MTM.
+3.2.9.3.5.2	Server MTM
+The IMAP4 Server MTM handles the communication with the remote IMAP4 server and implementation of the IMAP4 protocol. The MTM uses CImTextServerSession to handle the communication with the email server. The IMAP4 Server MTM opens two connections to the IMAP4 server this enables users to download messages while the Server MTM is performing a background synchronisation if requested by the Client MTM.
+•	Connect – The IMAP4 Server MTM will open a socket to the email server using CImTextServerSession and login using the username / password in the IMAP4 settings. After a successful connection the Server MTM will optionally attempt to synchronise the current state of headers stored on the email server with the set stored in the message store and then start any pending offline operations. After the connect operation has completed the Server MTM will inform the message server that it is expecting more operations via the CommandExpected API and therefore the message server will not delete and unload the Server MTM.
+•	Copy, Move messages – The IMAP4 Server MTM supports copying and moving messages between folders on the IMAP4 server and between the IMAP4 server and local folders.
+•	Delete messages – The IMAP4 Server MTM will mark the email as deleted on the server; however it will not be deleted until the IMAP4 Server MTM disconnects from the server.
+•	Folders – The IMAP4 Server MTM will allow folders to be subscribed, unsubscribed, renamed, copied, moved, and created within the IMAP4 service. Subscribing to a folder means that it will be visible to the user and synchronised with the remote server. The inbox is always subscribed.
+•	Offline operations – When the IMAP4 Server MTM receives a request to copy, move, or delete and is not connected to an IMAP4 email server the Server MTM will store the operation in the CMsvStore of the entry being modified and perform the operation on the next connection to the email server.
+•	Disconnect – When disconnecting from a remote email server the IMAP4 MTM will run any pending offline operations stored. After the disconnect operation completes the Server MTM will allow the message server to delete and unload the Server MTM by setting the CommandExpected API to false.
+
+3.2.9.3.6	SMTP MTMs
+The SMTP MTMs provide functionality to send email messages. They are made up of the Client MTM that is part of the imcm DLL and the Server MTM.
+3.2.9.3.6.1	Client MTM
+The SMTP Client MTM implements the standard Client MTM APIs including the functions required to allow clients of Send As to create email messages.
+3.2.9.3.6.2	Server MTM
+The SMTP MTMs provide functionality to send email messages; it interprets requests to copy entries to an SMTP service as a request to send those messages. In addition it responds to two extended commands via the StartCommand Server MTM interface. These commands are KSMTPMTMIsConnected that responds with whether the Server MTM is currently connected to a remote SMTP server and KSMTPMTMSendOnNextConnection which performs the same operation as copying a selection of messages to an SMTP service. The only difference between the copy operation and the KSMTPMTMSendOnNextConnection operation is that the latter can be called without a selection of messages.
+When the Server MTM receives a request to send messages it builds a selection of messages consisting of the messages passed into the operation and any messages waiting in the outbox to be sent. To determine which messages in the outbox are waiting to be sent the SMTP server checks for messages that have the same service ID as the destination of the send operation and have a sending state of KMsvSendStateWaiting, KMsvSendStateScheduled or KMsvSendStateResend. This means that any request to send messages may result in more messages being sent than explicitly listed in the selection passed to the send operation.
+The Server MTM restores its settings from the SMTP service it has been asked to copy the messages to. Then it connects to the SMTP server using the CImTextServerSession class in the Email Server MTM Utilities, passing in the SMTP server address and TCP/IP port number from the SMTP settings. Then for each message to be sent the Server MTM uses the Email Server MTM utilities to generate an RFC2822 format message to send to the SMTP server, the RFC2822 text is generated on the fly as the data is sent to the SMTP server. If the SMTP server accepts the message to be sent then the Server MTM moves the message to the sent folder and sets its sending state to sent. If the SMTP server rejects the message then the Server MTM leaves the message in the outbox and sets the sending state to failed. Separate emails are generated for BCC recipients to ensure that the SMTP server doesn’t incorrectly include BCC recipients in emails sent to addresses in the To and CC fields of the email.
+3.2.9.3.7	Autosend
+The Autosend component is an executable that is kicked off by the POP3 and IMAP4 Client MTMs if the send on next connection setting is set. This executable will just make a request to the SMTP Server MTM to send messages associated with the SMTP service related to the POP3 or IMAP4 service, wait for the operation to finish and then exit. 
+3.2.10	Messaging / MMS APIs
+The MMS module has been removed from v9.0 and onwards.
+3.2.10.1	Key Internal Relationships and Dependencies
+ 
+Figure 21 MMS Internal Dependencies
+3.2.10.2	API Purpose - Further Elaboration
+3.2.10.2.1	MMS Overview
+The MMS MTM provides functionality for creating, accessing, sending and receiving MMS messages. Messages are sent and received without the client application needing to open or close any kind of session. The management of the MMS session is handled entirely within the MTM.
+MMS clients are alerted when a new message is available for download via the WAP Push mechanism. A WAP push watcher is provided to handle these notifications. After the notification the message can be downloaded over WSP or HTTP. Messages are sent by posting the data over WSP or HTTP. The Symbian MMS implementation can handle sending or receiving MMS message over either protocol.
+MMS messages are based on the MIME format but are binary encoded using WSP. Note that MMS messages are encoded in this way even if they are posted over HTTP as opposed to WSP. The codec component is responsible for this encoding and decoding. 
+3.2.10.2.2	MMS Utilities
+3.2.10.2.2.1	Key External Relationships and Dependencies
+ 
+Figure 22 MMS Utilities External Dependencies
+The MMS utilities provide the message and settings encapsulation classes. The MMS settings and messages are stored in the message store, the MMS utilities provide the interfaces to access this data.
+3.2.10.2.2.2	Settings
+The settings functionality provided by the MMS utilities allows the messaging client to persist MMS settings in the message store. Supported settings include:
+	MMSC (MMS server) address
+	WSP or HTTP transport
+	Autofetch messages on notification
+	Preferred IAP for the MMS network connection
+The settings functionality is also used by the server MTM to retrieve the settings prior to message sending or fetching.
+3.2.10.2.2.3	Message Encapsulation
+The message classes provide the message access functionality. Messages can be created, stored, restored and read using these classes. Functionality includes:
+	Adding media objects to the message
+	Enumerating through media objects
+	Adding recipients, subject line, etc. to a message
+	Adding other headers to the message, e.g. expiry date
+	Finding the appropriate media object for a given URI in the SMIL part (URI resolving)
+The message data is stored in the message store using one entry per message regardless of the number of media objects added to the message. This is preferable to using multiple message entries as it is faster and uses less disk space.
+Most of the message access code is common whether it is being used on the client or server side, however some parts of it are specific. For this reason it is essential that the appropriate client or server side CMmsMessage derived class is used. 
+3.2.10.2.3	MMS Watcher
+3.2.10.2.3.1	Key External Relationships and Dependencies
+ 
+Figure 23 MMS Watcher External Dependencies
+
+The MMS watcher plug-in is responsible for intercepting incoming MMS notifications and delivery reports then taking the appropriate action. It is implemented as a WAP Push watcher plug-in.
+When an MMS notification is received an MMS entry is created in the inbox using the MMS utilities. At this point the entry has its incomplete flag set. If the settings have the autofetch option selected then the MMS watcher initiates the fetch operation via the MMS client MTM.
+If a delivery report is received then the delivered flag is set on the appropriate sent message. If an outgoing message was sent to several recipients then there will be several delivered flags. A delivery report from each recipient will set the appropriate delivered flag.
+3.2.10.2.4	MMS Client MTM
+3.2.10.2.4.1	Key External Relationships and Dependencies
+ 
+Figure 24 MMS Client MTM Dependencies
+As with most other MTMs the MMS client MTM provides access to the server MTM functionality for messaging clients. It also implements the Send-As interface and reply and forward functionality.
+3.2.10.2.4.2	Send-As Implementation
+The Client MTM Send-As interface is implemented in the MMS Client MTM. The implementation differs slightly from other MTMs because additional presentation content may be generated depending on the media objects that are added. When simple combinations of images, sounds and text are added a SMIL presentation is generated to link them together. This is preferable to simple adding the objects as attachments where some clients render them as a list of files and others fail to render them at all.
+The SMIL data is constructed using templates stored in resource files, the GMXML (SMIL) composer is not used.
+3.2.10.2.4.3	Reply / Forward
+The Client MTM can be used to create replies to received messages or to create forwarded responses. The reply and forwarding operations are performed asynchronously.
+3.2.10.2.5	MMS Server MTM
+3.2.10.2.5.1	Key External Relationships and Dependencies
+ 
+Figure 25 MMS Server MTM Dependencies
+The Server MTM is the most complicated part the MMS implementation. It handles all of the state information required to send or fetch MMS messages. It is also responsible for managing the HTTP or WSP session and the connections to the phone network.
+3.2.10.2.5.2	Operations
+All MMS server MTM functionality is encapsulated in operations. An operation consists of the setup of a session, the sending, fetching and acknowledgements when appropriate, it then closes the session. The messaging client initiates an operation with a single call to the Client MTM, there is no need for the messaging client to explicitly establish the session or to know about the internal states. However, these internal states are available to the messaging client via the progress structure if this level of user feedback is required.
+Two types of operation are supported, background and foreground:
+A maximum of one foreground operation can be running at any one time. The messaging client can poll the server MTM for the progress of a running foreground operation, likewise it can cancel it if necessary.
+A background operation does not support progress information and can not be cancelled by the messaging client. It is possible to initiate background operations even if other background or foreground operations are pending. However, background operations are queued and a maximum of one will actually be running at any one time.
+The MMS watcher uses a background operation to perform automatic fetching. While the background autofetch is occurring it is still possible to start a foreground operation (such as sending a message) if required.
+3.2.10.2.5.3	Session and Connection Management
+The server MTM uses the HTTP Transport Framework to enable the HTTP or WSP session. HTTP or WSP can be selected at runtime by selecting the appropriate option in the settings. The server MTM is responsible for reading any HTTP proxy details from the CommDB and passing it to the HTTP framework. See the http transport framework architectural description for more information on recognisers [R5]
+The server MTM is also responsible for managing the connection to the phone network. Connections are opened when required using the RConnection mechanism, multi-homing is supported provided that the underlying HTTP framework transport plug-in also supports it.
+3.2.10.2.6	MMS Codec
+The MMS Server MTM is in charge of the state transitions, connection, session,  the actual posting and fetching of the data from them, however it does not encode or decode the MMS PDUs. The encoding and decoding is performed by the MMS Codec.
+For decoding the Server MTM passes the Codec the MMS PDU data in a descriptor for processing. If the PDU contains a received MMS message then the message entry is updated with the decoded MMS data.
+For encoding the Server MTM passes a reference to the message store entry containing the un-encoded MMS data. The Codec then encodes it and returns the PDU to the Server MTM in a descriptor.
+
+ 
+3.2.11	Messaging / BIO APIs
+3.2.11.1	Key Internal Relationships and Dependencies
+ 
+Figure 26 BIO Message Internal Dependencies
+3.2.11.1.1.1	Key External Relationships and Dependencies
+ 
+Figure 27 Bio Parser External Dependencies
+
+3.2.11.2	API Purpose - Further Elaboration
+3.2.11.2.1	BIO Overview
+The BIO messaging components have been designed to unify and simplify the way in which system messages are processed. In this context ‘system messages’ refers to messages received on the device which are intended to update some attribute(s) on the system as opposed to being presented to the user. Examples of these types of messages include vCards which are parsed and then displayed to the user and when accepted modify the users contact database and OTA configuration messages which are again parsed before display to the user and if accepted create email accounts or internet access points.
+The BIO messaging components can be broken down into three groups:
+1) The BIO MTM - To initiate the parsing and processing of BIO messages
+2) The BIO Database - Maps port numbers, MIME types, etc. to bio types in order to identify the type of incoming BIO messages.
+3) The BIO Parsers - To parse and process the BIO message payload
+BIO messages are not receive by the bio messaging framework, they come over other message transports for example see section 3.2.6.3.1 on the SMS watchers which describes how the SMS watchers receive bio messages and use the bio framework to tag the messages with the correct bio id.
+3.2.11.2.2	BIO MTM
+The BIO client MTM is called by the messaging client to parse or process a BIO message that has been saved in the message store. It is the responsibility of a BIO watcher to save the BIO message with the BIO flag and the appropriate BIO type set.
+The BIO client MTM does very little, its primary task is to pass on the messaging client request to the server MTM. Two operations are supported, parse and process.
+The messaging client is expected to initiate the parsing of the BIO message before processing it. The parsing step involves analysing the data and storing it in a form that can be displayed to the user via the BIO message viewer.
+Once the message has been parsed the messaging client can initiate the processing of the message.
+The BIO server MTM is responsible for deferring the parsing and processing to the appropriate BIO parser. The behaviour for the parsing and processing steps varies between parsers. See the BIO Parsers section for more information. 
+The bio MTM does not support sending messages and therefore does not support reply / forwarding messages. For bio messages sending / reply etc. is supported by the particular MTM that the message is sent over, for example SMS. 
+3.2.11.2.3	BIO Database
+The BIO database is used to identify the type of BIO messages. It maps message attributes such as port number, MIME type or leading string to a BIO type. These are attributes are then used by clients of the bio framework to know what ports to listen for messages on. For example the SMS watchers use the leading string to wait for SMS messages that start with that string and when storing those messages in the inbox tag them with the bio id associated with that leading string. See the SMS watcher section 3.2.6.3.1 for more examples of how the BIO database can be used.
+3.2.11.2.4	BIO Parsers
+The BIO parsers are plug-ins for parsing and processing incoming BIO messages. They are invoked by the BIO Server MTM depending on the BIO type of the message being processed. Each BIO parser implements two functions, ParseL and ProcessL. The level of functionality varies between parsers. Some parsers update the final repository with the received data, e.g. WAPP updates the CommDB with the received settings. Some parsers simply save the data in an unparsed state for processing by another component, this secondary parsing is not part of the BIO framework and must be initiated by the messaging client. An example is when GFP saves vCard data as a file as opposed to updating the contacts database, the UI must then invoke the Versit parser to parse the vCard and commit it to the contacts database.
+3.2.11.2.4.1	Generic File Parser (GFP)
+The generic file parser can be used to identify and save a variety of BIO data types, e.g. vCards and vCals. The Generic File Parser does not process the data, it simply saves it in the message store for processing by another component. The file is saved as an attachment of the message entry that was parsed.
+3.2.11.2.4.2	Nokia/Ericsson OTA Parser (WAPP)
+The WAPP parser decodes Nokia/Ericsson OTA messages and updates CommDB to reflect the received settings.
+3.2.11.2.4.3	Nokia Smart Message Internet Access Parser (IACP)
+The IACP parser decodes Nokia Smart Messages and updates the CommDB and messaging settings where appropriate.
+3.2.11.2.5	BIF Files and Utilities
+The BIF files encapsulate the information required for identifying BIO messages, these details may include the expected port number, MIME type or leading string. Different BIO watcher will use different information from these files, for an example see the 3.2.6.3.1. The information can be retrieved from the BIF files by using the BIF utilities. Generally BIO aware clients will access this information via the BIO database. BIF files are resource files previous to the v6.1 release they were binary files generated by biftool.exe.
+3.2.11.2.6	Platform Security Compliant Messaging / BIO APIs
+In the platform security model the BIO parsers are run in the client space rather than in the message server space, as is done in the non-platform secure model. If the BIO parsers are run in the message server space, it allows a client process to gain the capabilities of the message server. IPC policing can protect the message server from this.
+Also, for the message server to be able to load any BIO parser it would need more capabilities than it really requires. By running the BIO parsers in the client space, both these issues are solved. The client process must be trusted with the necessary capabilities to run the specified BIO parser.
+The BIO registry files are located in the \resource\messaging\bif read-only directory. All BIO parser DLLs are located in the \sys\bin protected directory.
+ 
+Figure 26 BIO Message Dependencies (v9.0)
+The BIO client MTM is responsible for loading the BIO database and BIO utilities to handle parse/process requests from clients.
+The BIO registry files no longer identify the BIO parsers DLLs via their UID – the registry file must use the BIO parser DLL name to identify them.
+3.2.12	Messaging / OBEX MTM APIs
+3.2.12.1	Key Internal Relationships and Dependencies
+ 
+Figure 28 OBEX Internal Dependencies
+3.2.12.2	OBEX MTM Overview
+The OBEX MTM offers simple IR and Bluetooth beaming functionality. It provides an API that is consistent with other MTMs so that the underlying OBEX APIs do not need to be used directly for beaming applications. The OBEX MTM does not provide OBEX receiving functionality, in order to receive OBEX data the underlying OBEX APIs must be used directly.
+3.2.12.2.1	OBEX MTM
+The OBEX MTM is split into three parts. OBEX MTM DLLs, IR MTM DLLs and Bluetooth MTM DLLs. The OBEX MTM DLLs can not be used on their own they provide the base OBEX MTM functionality for the derived IR and Bluetooth MTMs.
+There are two APIs that can be used to create OBEX messages:
+1) The Send-As API
+2) Linked attachments by filename
+The Send-As API provides an interface consistent with other MTMs, however it requires all attachments to be copied into the message store before they can be sent, this is often undesirable for beaming applications because it is wastes disk space. For this reason a second API is provided that allows attachments to be linked to outgoing messages by filename, when this API is used there is no need to copy the attachments to the message store.
+Unlike many other MTMs after OBEX tries to send a message it is deleted from the outbox whether the sending succeeds or fails.
+3.2.12.2.1.1	OBEX MTM Key External Dependencies
+ 
+Figure 29 OBEX External Dependencies
+3.2.12.2.2	IR MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the IR MTM itself just sets up the parameters.
+3.2.12.2.2.1	 IR MTM Key External Dependencies
+ 
+Figure 30 IR MTM Dependencies
+3.2.12.2.3	Bluetooth MTM
+The bulk of the OBEX MTM functionality is provided by the OBEX MTM DLLs, the Bluetooth MTM just subclasses from the OBEX MTM and sets up Bluetooth specific parameters.
+3.2.12.2.3.1	Bluetooth MTM Key External Dependencies
+ 
+Figure 31 Bluetooth MTM Dependencies
+3.2.12.2.4	OBEX MTM Utils
+The OBEX MTM Utils provide utility functionality used by the other OBEX MTM DLLs. The two main areas of functionality provided by this component are:
+1) Filename linking functionality
+2) Bluetooth SDP lookup
+The filename linking functionality is provided in the utilities because linked files must be added by the client side during message creation and need to be read on the server side during sending.
+
+3.2.12.2.5	Platform Security Compliant Messaging / OBEX MTM APIs
+From v9.0 and onwards the service settings of all the derived OBEX MTMs are stored in the Central Repository. The OBEX message is stored in the message store as an attachment – from v9.0 and onwards the Attachment API is used to attach the OBEX message.
+
+3.2.13	Messaging / GMXML APIs
+3.2.13.1	Key Relationships and Dependencies
+ 
+Figure 32 GMXML Dependencies
+3.2.13.2	Overview
+The GMXML component provides simple XML DOM parsing and validation functionality. It is intended for parsing XML that might be needed in messaging applications, specifically SMIL parsing for MMS rendering. It is not a general purpose XML parser and will not be suitable for some applications, e.g. browsing.
+3.2.13.2.1	GMXML DOM
+The DOM implementation is fit for purpose for SMIL rendering but differs from the standard DOM design in several respects, e.g. attributes are not stored as discrete nodes, for performance reasons they are stored with the element.
+The DOM tree classes are all derived from nodes. Implemented node types include elements, text and comments. The type of each element is stored as a descriptor as opposed to an enum. This is less efficient than storing it as an enum but provides maximum flexibility when dealing with unknown element types.
+Nodes are linked together in a tree structure as might be expected in a DOM implementation. The tree structure exists on the heap.
+3.2.13.2.2	GMXML Parser and Composer
+3.2.13.2.2.1	Parser
+The parser takes XML input from a buffer or file and creates the corresponding DOM structure on the heap.
+The parser is capable of performing some basic validation. In order to validate against a DTD a class that implements the GMXML DTD interface is required. The DTD interface specifies several functions that provide the required validation, e.g. one of the functions determines if a given attribute is valid for a given element. An instance of the DTD class should be passed into the parser when validation is required but can be omitted if no validation is needed.
+3.2.13.2.2.2	Composer
+The composer takes a DOM tree and generates XML output from it. The XML output is written to a file.
+3.2.13.2.3	GMXML SMIL DTD (Validator)
+The SMIL DTD validator class is an implementation of the DTD validator interface. It implements several simple functions that provide the information required to validate SMIL data. An instance of the SMIL DTD validator should be passed into the parser if SMIL validation is required.
+4	Security
+4.1	Data caging
+For data storage in the pre-platform security compliant architecture, refer to section [3.2.1.3.2]
+For the data caging in the platform security compliant architecture of v9.0 and onwards, refer to section [3.2.1.3.3]
+4.2	Backup and restore
+The message server registers the index file with the backup server. When informed about a backup/restore it releases the index file, sending events to messaging clients informing them that the message store is unavailable. When informed it can open the index file again, it checks the time stamp on the index file; if it has changed since the file was released it reloads the index file. If the newly restored index file is found to be corrupt it is deleted and a new message store is created. See the section on page 14 for details on how the message server handles corrupt stores. The client performing the restore should always wipe the existing message store before starting to copy the message store from the backup to the device.
+4.3	Capability ranges
+In the platform security compliant architecture of v9.0 and onwards, the capabilities allocated to   messaging sub-systems are as listed in following table.
+4.3.1	Capabilities granted to executables
+The following table lists the executables and their capabilities and also gives a basic example for having the required capability. 
+
+Executable	Capability	Rationale (basic example of capability requirement)
+msexe.exe	ProtServ	ProtServ is required to allow the msexe.exe to start a protected server. This stops processes without ProtServ from starting a server pretending to be the message server
+	ReadDeviceData	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData 	WriteDeviceData is needed to able to write service settings
+	NetworkServices	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+	ReadUserData	ReadUserData is needed to be able to read user data (e.g. service settings).
+watcher.exe	ReadDeviceData 	ReadDeviceData is needed to able to read service settings
+	WriteDeviceData	WriteDeviceData is needed to able to write service settings
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS).
+	LocalServices	LocalServices capability is needed for the plug-ins to access IR and Bluetooth
+	ReadUserData 	ReadUserData is needed to be able to read user data
+	WriteUserData	WriteUserData is needed to be able to write user data
+autosend.exe	ReadUserData 	ReadUserData capability is needed to be able to read data from Outbox and SMTP server MTM. 
+	WriteUserData  	WriteUserData capability is needed to be able to write data in Outbox and SMTP server MTM.
+	NetworkServices 	NetworkServices capability is needed to access network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices capability is needed to access the IR and Bluetooth
+SchSend.exe	ReadDeviceData 	ReadDeviceData is needed to able to read settings data
+	NetworkServices 	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be trusted by other MTM
+	ReadUserData 	ReadUserData is needed to be able to read user data.
+	WriteUserData  	WriteUserData is needed to be able to write user data.
+SendAs.exe	ReadDeviceData	ReadUserData is needed to be able to read data in Outbox.
+	WriteDeviceData 	WriteUserData is needed to be able to write data in Outbox.
+	NetworkServices	NetworkServices capability is needed to access the network transports (SMS, POP3, SMTP, and IMAP4).
+	LocalServices	LocalServices is needed to be able to access IR and Bluetooth
+
+4.3.2	Capabilities granted to DLLs
+The assigned Platform Security attributes for DLLs within messaging are outlined in the following table.
+DLL	Capability
+bifu.dll	All –TCB
+bioc.dll	All –TCB 
+biodb.dll	All –TCB
+bios.dll	All –TCB
+biowatcher.dll	same as watcher.exe
+biut.dll	All –TCB
+cbcp.dll	All –TCB
+enp.dll	All –TCB
+gfp.dll	All –TCB
+iacp.dll	All –TCB
+nbswatcher.dll	same as watcher.exe 
+cdmanbswatcher.dll	same as watcher.exe
+CdmaSocketWatcher.dll	same as watcher.exe
+VMNWatcher.dll	same as watcher.exe
+WEMTWatcher.dll	same as watcher.exe
+WMTWatcher.dll	same as watcher.exe
+WPTWatcher.dll	same as watcher.exe
+wapp.dll	All –TCB
+wapwatcher.dll	same as watcher.exe 
+smildtd.dll	All –TCB
+xmldom.dll	All –TCB
+xmlparser.dll	All –TCB
+smiltranslator.dll	All –TCB 
+imcm.dll	All –TCB
+imps.dll	same as msexe.exe 
+imut.dll	All –TCB
+msgs.dll	All –TCB
+msgurlrec.mdl	same as AppArc.exe (once it exists; eiksrv in meantime) 
+mtur.dll	All –TCB 
+pops.dll	same as msexe.exe 
+schsend.dll	All –TCB
+send.dll	All –TCB
+smcm.dll	All –TCB
+smcm_gsm.dll	Synonym for smcm.dll
+smcm_cdma.dll	Synonym for smcm.dll
+smss.dll	same as msexe.exe 
+smss_gsm.dll	Synonym for smss.dll
+smss_cdma.dll	Synonym for smss.dll
+smts.dll	same as msexe.exe 
+btcmtm.dll	All –TCB
+btsmtm.dll	same as msexe.exe 
+irc.dll	All –TCB
+irs.dll	same as msexe.exe 
+obexclientmtm.dll	All –TCB
+obexmtmutil.dll	All –TCB 
+obexservermtm.dll	same as msexe.exe
+
+The reason for setting a high capability to the DLLs is to make it possible for almost anyone to link to them. Although a DLL may have capabilities ALL-TCB (All minus TCB), its real capability is limited by the process which loads the DLL.
+4.3.3	Capabilities required to use the subsystem
+The message subsystem needs to be protected against malicious clients. The following table shows the key capabilities required to do related activities in different components.
+
+Component	Related Activity	Required Capability and SID
+Message server	Create message in local folder	No capability required
+	Create message in Outbox	ReadUserData, WriteUserData and MTM specific capabilities
+	Access client MTM	ReadUserData, WriteUserData and MTM specific capabilities
+Watcher	Allow plug-ins to wait on events (e.g. arrival of SMS)	Watcher always polices if the client capabilities are trusted by the watcher framework, else it will not be loaded
+Plug-ins or clients using watcher need the same capabilities as watcher.exe to be able to be loaded by watcher.
+Autosend	Send messages in background	NetworkService or LocalService required by the message type
+SchSend	Scheduling of operations (e.g. sending SMS)	SchSend always polices to see if the process was started by the Task Scheduler – if not the process terminates without performing any of the scheduled tasks. Also, the SchSend verifies that only itself and the message server created the scheduled tasks. If this is not the case, SchSend does not performing the scheduled tasks.
+SendAs	Create message Draft, move it to Outbox, and send message	WriteDeviceData or WriteUserData and other capability required by the message type
+
+5	Further Information
+5.1	References
+No.	Document Reference	Version	Description
+R1	messaging_functional_specification.doc	0.6	Messaging Functional description
+R2	SGL.GT0143.161_App-Framework_Architectural_Description.doc	1.0	App-Framework Architectural Description
+R3	NBProtocols_Subsystem_Architectural_Description.doc	0.2	NBProtocols Architectural Description
+R4	WAP-stack_architectural_analysis.doc	1.0	WAP stack architectural analysis
+R5	HTTP Transport Framework Architectural Description.doc	1.1	HTTP Transport Framework 1.1 Architectural Description
+5.2	Open Issues
+The following issues need to be resolved before this document is completed:
+1.	Top-level architecture diagram showing the framework and plug-ins should be added to overview section.
+2.	Message store section should talk about removable media.
+3.	Define "Message Server Client API" and "Messaging Client API" in the glossary, and ensure it is consistently used in the diagrams
+4.	Add a sequence diagram for receiving a vCard over SMS and integrating it into contacts
+5.	Add a sequence diagram for sending an SMS
+6.	Add a sequence diagram for synchronising a POP3 mail box
+7.	Add a sequence diagram for connecting to an IMAP4 mail box and downloading a message
+8.	Capability table should be updated after the implementation of server e.g. message server 
+9.	Sequence diagram may need to be changed to show secured platform operation
+10.	In section [3.1.1.4] the server SendAsV2 to find a correct name
+11.	Section 3.2.1.3.3.1 Data Caging file 'Mtm Registry v2'may need a correct name
+12.	Breakdown diagram showing all DLL, exes, apps in the messaging subsystem for both the pre-v8.0 and post v9.0 in section[3.2]
+13.	Needs to say more about how the capabilities are policed and the algorithms used for different operations
+14.	The dependecy between the message server and the central repository need to be listed in the email, SMS and OBEX diagrams (e.g. message store)
+15.	Section 3.2.1.2 - figure 3 - Central Repository also get used by the Message server, or server MTMs (e.g. POP3), to retrieve account settings the path, required DLL  and description are not given
+16.	Section 4.3.3 title can be Police requirement of the sub-system, add extra column for SID in the table and list the use of SID. For example SchSend checks for Task Scheduler SID
+ 
+
+5.3	Glossary 
+The following technical terms and abbreviations are used within this document.
+Term	Definition 
+BIO
+Bearer Independent Object	Smart messages e.g. vCards, vCals, and WAP provisioning messages. These can currently be received via the WAP stack, SMS stack, Bluetooth or Infrared.
+BIO Type	UID that represents the content type of a BIO Message.
+Message Centre	Application that displays list views of messages to the user, allowing the user to perform operations such as copying messages, sending messages creating new messages etc.
+Message Viewer	Application for viewing a message.
+Message Editor	Application for creating or editing a message
+Message Server	Symbian OS Server that handles request to modify the Message Store
+Message Store	Store of messages and related information kept in the file system on a Symbian OS device.
+Local Entry	An Entry in the Message Store that descends from the local service, the entries on the right hand side of Figure 6
+Remote Entry	An Entry in the Message Store that descends from a remote service, the entries on the left hand side of Figure 6
+Global Inbox	A standard folder under the local service which is used to store incoming messages like SMS MMS etc. as opposed to an IMAP4 Inbox which would be under an IMAP4 service and is a representation of the Inbox on an IMAP4 email server.
+Central Repository	centralised and secure storage facility for application settings
+OBEX	Object exchange protocol, used to send objects such as vCards or files between devices via infrared or Bluetooth.
+GMXML	XML parser / generator for use with SMIL formatted messages.
+UID	Unique Identifier, a 32 bit number allocated from a registry owned by Symbian
+IPC	Inter Process Communication
+MTM	Message Type Module is a plug-in to the message server providing support for a given message type for example IMAP4 or SMS. Each MTM is split into 4 interfaces: Client MTM, Server MTM, UI MTM and UI Data MTM. See section 3.2.1.3.5 for more detail.
+MTM Registry	A list of currently installed MTMs maintained by the message server.
+TLS	Transport Layer Security, provides encryption of a TCP/IP socket.
+M-HTML	Standard for including HTML in MIME email messages see http://www.ietf.org/rfc/rfc2557.txt
+MIME	Specification for the format of email message bodies see http://www.ietf.org/rfc/rfc1341.txt
+RFC2822	The standard format for internet mail messages see http://www.ietf.org/rfc/rfc0822.txt
+SMTP	Simple Mail Transport Protocol
+SID	Secure Identification
+IMAP4	Internet Mail Access Protocol
+POP3	Post Office Protocol Version 3
+NBS	Narrow Band Socket, in the messaging context this refers to the socket that is used to talk to the SMS stack for receiving and sending SMS messages
+SMS	Short Message Service
+MMS	Multimedia Message Service
+WAP	Wireless Application Protocol
+WSP	WAP Session Protocol
+HTTP	Hypertext transfer protocol
+PDU	Protocol Data Unit. This is the encoded form of SMS and MMS messages.
+Versit	A consortium that defined standard formats for things like contacts (vCard) and calendar entries (vCals)
+SDP	Service Discovery Protocol. A Bluetooth protocol that allows an applications to discover which services are available and to determine the characteristics of the services.
+SMIL	Synchronized Multimedia Integration Language. Presentation language that is commonly used to define the contents of an MMS message.
+XML	Extensible Mark-up Language
+DOM	Document Object Model
+DTD	Document Type Definition, a schema that defines the structure of an XML document.
+ESTORE	Symbian OS component that provides stream based storage. Messaging uses the Permanent file store provided by ESTORE to store its index entries.
+Appendix A - Example Sequence Diagrams
+A.1	Copy to a Remote Service
+ 
+Figure 33 Sequence Diagram Showing Copying to a Remote Service
+Figure 33 shows a client copying a message to a remote service using the Messaging Client API. The message server then delegates the copy to the SMTP Server MTM. The Server MTM interprets the request as a request to send the message so it opens a connection to a remote SMTP server and sends the message. While the message is being sent the client can retrieve progress information from the CMsvOperation object that was returned by CMsvEntry::CopyL. The dark grey IPC line represents the split between the objects running in the client’s process space on the left and the message server’s process on the right.
+There are four basic steps:
+1.	The client opens session with Message Server and creates a CMsvEntry set on the global outbox, 
+2.	The client then requests an asynchronous copy from the outbox to the SMTP service, a CMsvOperation object is returned. The message server loads the SMTP Server MTM and delegates the copy operation to it.
+3.	The client requests progress from the CMsvOperation object, this request is passed through to the SMTP Server MTM. The client may repeat this step multiple times.
+4.	The Server MTM finishes sending message. It moves the message to sent folder and completes the message server’s request. The message server completes the CMsvOperation object, which requests the final progress from the message server. The server returns the final progress and deletes the Server MTM. The CMsvOperation then completes the client’s original request.
+This diagram hides all of the internal working of the SMTP Server MTM, for information on this see below. 
+A.2	SMTP Session
+ 
+Figure 34 Sequence Diagram Showing a SMTP Session
+Figure 34 shows the operation of the SMTP Server MTM after a request has come from the message server to copy a message to the SMTP service.
+1.	SMTP Server MTM gets the request from the message server, it will build a selection of messages consisting of the union of the selection of messages passed in and the messages in the outbox that are associated with this SMTP service and are ready to be sent. The chain of classes are constructed, and a request is passed to networking to connect to the remote SMTP server, details of the server name and port are retrieved from the settings stored in the SMTP service entry.
+2.	The component waits for the SMTP server to respond with a greeting indicating it is willing to talk, then sends EHLO to the server and waits for the response detailing the capabilities of the Server. After this step there could set steps to start using TLS and or SMTP AUTH depending on the SMTP settings.
+3.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message to be sent, then constructs a CImSmtpFile object to handle sending, for details on the sending see SMTP Email Send. When sending the email has completed the CImSmtpFile object is deleted.
+4.	CImSmtpSession calls back into CMsgOutboxSend to retrieve the next message which returns saying there are no more messages. CImSmtpSession sends QUIT to the SMTP server and completes CMsgOutboxSend. CMsgOutboxSend deletes CImSmtpSession which tears down the connection to the SMTP server; it then completes the SMTP Server MTM. The Server MTM will then complete the message server and be deleted.
+A.3	SMTP Email Send
+ 
+Figure 35 Sequence Diagram Showing SMTP Transactions during Email Send.
+Figure 35 shows a CImSmtpFile object sending an email message to an SMTP server.
+1.	Construct a CImSendMessage object, part of the imut component. Reset the SMTP Server
+2.	Read address information from the CImHeader object stored in the message store, send address information to SMTP server.
+3.	Use CImSendMessage object to read the message from the message store and generate RFC2822 message line by line. Send each line to the server as it is generated.
+4.	Complete and send the message by sending a full stop to the SMTP server
+
+
--- a/messagingfw/msgtestproduct/email/imap/testdata/EmailMessage/1MBBody.txt	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestproduct/email/imap/testdata/EmailMessage/1MBBody.txt	Fri Jun 25 16:18:56 2010 +0530
@@ -647,7 +647,7 @@
 full of abstractions, such as menus, databases, or file systems, to name a
 few. Moreover, we
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 2 INTRODUCTION
@@ -2253,7 +2253,7 @@
 and natural, whereas with stack-based variables one should use references
 with care, if at
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 28 MEMORY MANAGEMENT
@@ -4093,7 +4093,7 @@
 In order to declare a piece of software an application, an interface
 mechanism must be
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 62 APPLICATIONS
@@ -6438,7 +6438,7 @@
 software can be included in a device when creating a device for a certain
 segment.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 106 DYNAMIC LINKING
@@ -7710,7 +7710,7 @@
 other by
 competing for the same resource, like processor execution time.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 128 CONCURRENCY
@@ -8829,7 +8829,7 @@
 connecting software to the underlying hardware. First, a device driver
 addresses the hardware,
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 148 MANAGING RESOURCES
@@ -10290,7 +10290,7 @@
 in design, and the question is fundamentally to create a system of nodes
 that are able to
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 176 NETWORKING
@@ -11427,7 +11427,7 @@
 Software security can be considered using different scopes. One scope is
 construction
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 194 SECURITY
@@ -13487,7 +13487,7 @@
 full of abstractions, such as menus, databases, or file systems, to name a
 few. Moreover, we
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 2 INTRODUCTION
@@ -15093,7 +15093,7 @@
 and natural, whereas with stack-based variables one should use references
 with care, if at
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 28 MEMORY MANAGEMENT
@@ -16933,7 +16933,7 @@
 In order to declare a piece of software an application, an interface
 mechanism must be
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 62 APPLICATIONS
@@ -19278,7 +19278,7 @@
 software can be included in a device when creating a device for a certain
 segment.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 106 DYNAMIC LINKING
@@ -20550,7 +20550,7 @@
 other by
 competing for the same resource, like processor execution time.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 128 CONCURRENCY
@@ -21669,7 +21669,7 @@
 connecting software to the underlying hardware. First, a device driver
 addresses the hardware,
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 148 MANAGING RESOURCES
@@ -23130,7 +23130,7 @@
 in design, and the question is fundamentally to create a system of nodes
 that are able to
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 176 NETWORKING
@@ -24267,7 +24267,7 @@
 Software security can be considered using different scopes. One scope is
 construction
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 194 SECURITY
--- a/messagingfw/msgtestproduct/email/imap/testdata/EmailMessage/DRM_SeparateDelivery01.txt	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestproduct/email/imap/testdata/EmailMessage/DRM_SeparateDelivery01.txt	Fri Jun 25 16:18:56 2010 +0530
@@ -1,11 +1,26 @@
-From: test@ban-build18
-To: test@ban-build18
-Subject: DRM_Combined_Delivery
-Date: Tue,  9 Nov 2004 14:34:09 +0000
-MIME-Version: 1.0
-Content-Type: application/vnd.oma.drm.content;
-Content-Transfer-Encoding: base64
-X-Oma-Drm-Separate-Delivery: 12
-
-+application/vnd.oma.drm.contentcid:20041101132703-9315904379@lkjj.lkjl.com.”pEncryption-Method: AES128CBC;padding=RFC2630
-ÂßùK(sî<X@1†…ZÑc\÷8pÂ@ÈÃ?ŠÃ£qÕ+ cÀ&|WñyáäâÆ(o 4“'EäÇ%^ˆQ
\ No newline at end of file
+From: test@ban-build18
+To: test@ban-build18
+Subject: DRM_Combined_Delivery
+Date: Tue,  9 Nov 2004 14:34:09 +0000
+MIME-Version: 1.0
+Content-Type: application/vnd.oma.drm.content;
+Content-Transfer-Encoding: base64
+X-Oma-Drm-Separate-Delivery: 12
+
++application/vnd.oma.drm.contentcid:20041101132703-9315904379@lkjj.lkjl.com.”pEncryption-Method: AES128CBC;padding=RFC2630
+ÂßùK(sî<X@1†…ZÑc\÷8pÂ@ÈÃ?ŠÃ£qÕ+ cÀ&|WñyáäâÆ(o 4“'EäÇ%^ˆQs×3Ñ}«nåõT¾™Bæf¾´•q³Ь¾¼z;®‹eQ¸[Ž~Ö[JQšr”Zµ‡æçaÒÁÿÛ(„­^ÖÚÇ/¸å•óßAjôæ5¥Êd蓦Bìåi#—qå£oüYxòΕ‰fï¤(È[õMÞJ'p¥W¦bÝÙL<"d“ub?³€}Yçõ·Ïªà¶ñºRô*Pgn­Ô ´Â&Vÿ`z9ã(ÏÓ«|Ú_8ÙÙj
+aåÌ–ÿ]Ã%(KPëøQº„’i“ÅeÐ8¡0·UzÖ’²k;oÏ
28’¹ê?ÊŽþ*«d]ÜÌI ×U½*Σ^!z6¨xÉZˆ*’µç0ü(O“\'ùo@»‰ÈV[=–<#å´öLócÍþNJ&¢î€Ï"eȤxF1<tÏæ÷øWp”´ù•‡
+s߸ñw‹{§¿'¢29 ˆÝLŽó㈥¤†
‘T
+ä­ 
 ³î3,Žq$ÜvRµî=ÚÀâÔsTŸ]Êu¿]š>ØÜø© 2Š£îÃi®–££k:B•TT?+ùR!.I¡È£ãã¬3‡ECè±òËZ¥“+´2[éµî·˜kU¾Ã~!“ïKBþ\"˜™-8tCO€oVÐ×BÊ‘ã-®eSšw„êæH“T*0.çÐîu§,}=+~_0–òHùV` ²ÍóYÒ²EðI>‚bXäËI¸,Ìö®T+_O aªläBAè´:OÔ©d)´«½“;رi¾;ÿ™«
 o-j"·îdþ]»ŒfaíDþZe¾´…ºz¯†ƒŠÏ9}Cœk.޺γF—æ÷Üýa¦V¯òB>ôÃu›*)åÊÜÉ’ÉÆÞ3õÒËݲVˆÅdÜóïHåìá&ªÙýŽ[zAyØË 1rxó25Y€q^ž-Ð$iuƒ‰=r˜öc‹º‰‹EÀ«$(F'º*NÏJ }ÅHÎg¦ˆªÞêòJÚÔÿ&¶
+ø¼»¼w‘Qì¯'©¼N/ˆ…ßÙ4¿ænœ
+üÔœ§ö5NúÄsöƒ‹BZ,ak ²S'bÿL#åfû@Fµ
+)O
¸|–E³.cQúµ€_.àLaàœ„_QRßÿ„q¿ö®*É`•Ãfá3¼Üi`Ð(žêîž÷½’OE†d•P-4­ã°ÌQÅÝð*½*þmqˆ¬9ù›ý]|šsó]&Ë]g9v«uÄ_¤«½nJ„+t²žœáëñÁðבU]¦BÃÅ[ÈjÁÞ¯çq™Ã–·ë$¹›Öy!K
+ô’@IîeæZ:¨žÒêÂKˆDáÓâ(R—ùÚrçÇL³Ê†3c{qlœ¤(8±©’ð,9\óª>«œ3‡%ÚÍH2ùrÎj|êÀ$:îQ?p€FÃØÃHI¯ÕT$J¥Qvâ±^ªœ‰Ü÷={ ryá@nÆc?úžÅõ*ú}шÇ?|Ÿ ™ösÄnf)ó®KNíøCÌ¢lAÏÕbÖâWyϸG¤ÏŒËÁ8²ö¼i¿´ê"(»×Nü‚‹I–·°…)(~Tác´Tµf*—T…Ådœøìò¥O^‰–ø¬~¨$vk¤ø–h@Ì{ ú3»J°øoä)Ýω1acBÊVèÇ8 ‰+¹îcÀPe?·À>…Diþú¢~UY¥™‡5+ÐÉ:P˜I—š¾ö0T0³Wqq^u¼]*€ ®eå͆§~H"ÑÐÓï3°\ûÆaZŸ
+ó¤#¶
+оÀ¾ôЛ–?áêlŠŸ¥³œn% 7v÷ÞÓ~ñàáâì?–aKÒë	{][[ è#HÀp4@óÇmžES‚³çöŒ+:hª|(v‰Ty:·ühe5Tíc„>ÙÛ¿éî÷q ãŒL.}¬iœ³Ù°bIº
d·Cl/¡|ë@ÄðxÐE02_pM$3èõ~Iy6S»
+­é<Nnµ5ù¾üKšÀ÷.
+ ›Ò¶qÔÔÌ9w†Ü?ï!•¥°Æº‘Þ”#E<€%ID?7oO šW\-çöp\wõ™éGi	l3©®îœÕ–ý³Ã-TžSúÊGÔn!ê8ªYŒxþïY9)ÄÍåqt:J×ÖPÞTäPçôµ¸ 
+˜òàÊ©i wŠˆÒ\›Á¤³fxË*ãÖP ÛWh-Ì™±ÔúrÞÀÿB3ŒMgènÞ~Á¯ŸÁqoXÕINÈybȳæþvp&x^ð;7$o*‰aÕ€FŽøá&Õ×Qœõ[VŒ9YðBÛ­€Î…:Úð'€²MÈŽ·¥cL…k–ü@OLÌcj 8¿Pæ‚ùªøJœ'þ‰.ŒÕZòÂμE‹a8öî¬k¼dӘɹkžO½ÏAïkô+#~0äWï…T‰¦sƘêyõ×
Ê¡odЛHÀ%½ä«wH‰²N±8iëgKºÓ‡fSv‘ƒ¤#î#üZ×Ëçw	xÂu7h§”$D!“îT'÷DÂl׊œ÷óøÑèM›°¹A^}WÓ\]p/~aKýˆõóåW¡‚†„ú%[¿eK_ä´5cž£¾Åp Ú̒МՎç}<›Pé¥cŹ;·3Xß+'÷Yªã×}÷ñ©©/Ï÷Gv˜/±¦ð24;„€cÇkÉì§ÌæÝz“m­[O«—…ÂÈ„æ“ËÓ5¢›‚XÇp±;fnH_è‹_IÅANŒõÿœPØKÁ‰q\&J¶õP5jž¡î{%|‘_ɳ1l%Ú6þÒŸBNè\è›Qð×{¬~.eŸ¨ǵ_@ªI‰k3ÂÞ§—ªGEµ°Ì4é1ŽZâ3kƒ÷¼x ‹b
+cÏ‘¦ÌFǪ Ë+š–ßÙ¥Ó˹ÔÓ_ÞŒM2Él(>ï.mº:Rzê@@Û-óˆægùíiª­é×øyíù
+lŒØôf…=£ÚFí@–ÛÎF*UÒ«“¦àeÜjAZóioTêóLÌ]š45ÿ-ÉñŠ¾¢xíUzÒfö„KœQ
WÞ&\Å y~ởNªê?†oéµUs,éëÛâÌÚ÷¬TBˆŒôZí·FªòÅ–™ͳØ7wÉ®.{³æÏHíñì_ßZy’JYøð‡D’¹Qb^¸¦®™Ìue¸µ'ÀLÞóÒÛ(tµüß*<8rÔ/8Øc+橘ÙÆ¿MvKa,nƒxÕñ –zž+{…PÊZpoÉF½ö©SEÖ`’v•Ë'êéwñgr$xœŠþ­½Ú»aÓJÌ6²ê?¢eÑ‹Ÿ”5Š,ªíh‘àÝ·ˆ0
+
--- a/messagingfw/msgtestproduct/email/imap/testdata/sys/CorruptDb.db	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestproduct/email/imap/testdata/sys/CorruptDb.db	Fri Jun 25 16:18:56 2010 +0530
@@ -1,1 +1,1 @@
-SQLite format 3   @                                                                            Š Š                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    gfhfh                                                                                                                                        t!9t a b l e A B C A B C C R56E A T E   T A B L E   A B C ( F l d 1   I N T E G E R ,   F l d 2   D O U B L E )     f345345                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
\ No newline at end of file
+SQLite format 3   @                                                                         
   Š Š                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    gfhfh                                                                                                                                        t!9t a b l e A B C A B C C R56E A T E   T A B L E   A B C ( F l d 1   I N T E G E R ,   F l d 2   D O U B L E )     f345345
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
\ No newline at end of file
--- a/messagingfw/msgtestproduct/email/pop/testdata/EmailMessage/1MBBody.txt	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestproduct/email/pop/testdata/EmailMessage/1MBBody.txt	Fri Jun 25 16:18:56 2010 +0530
@@ -647,7 +647,7 @@
 full of abstractions, such as menus, databases, or file systems, to name a
 few. Moreover, we
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 2 INTRODUCTION
@@ -2253,7 +2253,7 @@
 and natural, whereas with stack-based variables one should use references
 with care, if at
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 28 MEMORY MANAGEMENT
@@ -4093,7 +4093,7 @@
 In order to declare a piece of software an application, an interface
 mechanism must be
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 62 APPLICATIONS
@@ -6438,7 +6438,7 @@
 software can be included in a device when creating a device for a certain
 segment.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 106 DYNAMIC LINKING
@@ -7710,7 +7710,7 @@
 other by
 competing for the same resource, like processor execution time.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 128 CONCURRENCY
@@ -8829,7 +8829,7 @@
 connecting software to the underlying hardware. First, a device driver
 addresses the hardware,
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 148 MANAGING RESOURCES
@@ -10290,7 +10290,7 @@
 in design, and the question is fundamentally to create a system of nodes
 that are able to
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 176 NETWORKING
@@ -11427,7 +11427,7 @@
 Software security can be considered using different scopes. One scope is
 construction
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 194 SECURITY
@@ -13487,7 +13487,7 @@
 full of abstractions, such as menus, databases, or file systems, to name a
 few. Moreover, we
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 2 INTRODUCTION
@@ -15093,7 +15093,7 @@
 and natural, whereas with stack-based variables one should use references
 with care, if at
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 28 MEMORY MANAGEMENT
@@ -16933,7 +16933,7 @@
 In order to declare a piece of software an application, an interface
 mechanism must be
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 62 APPLICATIONS
@@ -19278,7 +19278,7 @@
 software can be included in a device when creating a device for a certain
 segment.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 106 DYNAMIC LINKING
@@ -20550,7 +20550,7 @@
 other by
 competing for the same resource, like processor execution time.
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 128 CONCURRENCY
@@ -21669,7 +21669,7 @@
 connecting software to the underlying hardware. First, a device driver
 addresses the hardware,
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 148 MANAGING RESOURCES
@@ -23130,7 +23130,7 @@
 in design, and the question is fundamentally to create a system of nodes
 that are able to
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 176 NETWORKING
@@ -24267,7 +24267,7 @@
 Software security can be considered using different scopes. One scope is
 construction
 Programming Mobile Devices: An Introduction for Practitioners Tommi Mikkonen
-c
+c
 
 2007 John Wiley & Sons, Ltd
 194 SECURITY
--- a/messagingfw/msgtestproduct/media/testdata/corrupt.db	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtestproduct/media/testdata/corrupt.db	Fri Jun 25 16:18:56 2010 +0530
@@ -1,1 +1,1 @@
-SQLite format 3   @                                                                            Š Š                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    gfhfh                                                                                                                                        t!9t a b l e A B C A B C C R56E A T E   T A B L E   A B C ( F l d 1   I N T E G E R ,   F l d 2   D O U B L E )     f345345                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
\ No newline at end of file
+SQLite format 3   @                                                                         
   Š Š                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    gfhfh                                                                                                                                        t!9t a b l e A B C A B C C R56E A T E   T A B L E   A B C ( F l d 1   I N T E G E R ,   F l d 2   D O U B L E )     f345345
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
\ No newline at end of file
--- a/messagingfw/msgtests/group/bld.inf	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/msgtests/group/bld.inf	Fri Jun 25 16:18:56 2010 +0530
@@ -31,8 +31,8 @@
 // These lot are not
 #if !defined(WINC)
 #include "../../msgconf/group/bld.inf"
-#include "../../biomsgfw/group/BLD.INF"
-#include "../../biomsgfw/T_BIOMSG/Group/BLD.INF"
+#include "../../biomsgfw/group/bld.inf"
+#include "../../biomsgfw/T_BIOMSG/Group/bld.inf"
 #include "../../msgsrvnstore/group/bld.inf"
 #include "../../watcherfw/group/bld.inf"
 #include "../../scheduledsendmtm/group/bld.inf"
--- a/messagingfw/scheduledsendmtm/group/scheduling.mdl	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/scheduledsendmtm/group/scheduling.mdl	Fri Jun 25 16:18:56 2010 +0530
@@ -1,7971 +1,7971 @@
-
-(object Petal
-    version    	43
-    _written   	"Rose 6.1.9113.5"
-    charSet    	0)
-
-(object Design "Logical View"
-    is_unit    	TRUE
-    is_loaded  	TRUE
-    quid       	"380CB4C0036B"
-    defaults   	(object defaults
-	rightMargin 	0.250000
-	leftMargin 	0.250000
-	topMargin  	0.250000
-	bottomMargin 	0.500000
-	pageOverlap 	0.250000
-	clipIconLabels 	TRUE
-	autoResize 	FALSE
-	snapToGrid 	TRUE
-	gridX      	31
-	gridY      	31
-	defaultFont 	(object Font
-	    size       	10
-	    face       	"Arial"
-	    bold       	FALSE
-	    italics    	FALSE
-	    underline  	FALSE
-	    strike     	FALSE
-	    color      	0
-	    default_color 	TRUE)
-	showMessageNum 	3
-	showClassOfObject 	TRUE
-	notation   	"Unified")
-    root_usecase_package 	(object Class_Category "Use Case View"
-	quid       	"37BA832E012C"
-	exportControl 	"Public"
-	global     	TRUE
-	logical_models 	(list unit_reference_list)
-	logical_presentations 	(list unit_reference_list
-	    (object UseCaseDiagram "Main"
-		quid       	"37BA832F00D4"
-		title      	"Main"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    root_category 	(object Class_Category "Logical View"
-	quid       	"37BA832E0123"
-	exportControl 	"Public"
-	global     	TRUE
-	subsystem  	"Component View"
-	quidu      	"37BA832E012D"
-	logical_models 	(list unit_reference_list
-	    (object Association "$UNNAMED$0"
-		quid       	"37BA858003B1"
-		roles      	(list role_list
-		    (object Role "$UNNAMED$1"
-			quid       	"37BA858102E0"
-			supplier   	"Logical View::FAXS::CFaxSession"
-			quidu      	"37BA850E019A"
-			is_navigable 	TRUE
-			is_aggregate 	TRUE)
-		    (object Role "$UNNAMED$2"
-			quid       	"37BA858102E1"
-			supplier   	"Logical View::ETel::CFaxTransfer"
-			quidu      	"37BA852C0067"
-			is_navigable 	TRUE)))
-	    (object Association "$UNNAMED$3"
-		quid       	"37D521FE03E3"
-		roles      	(list role_list
-		    (object Role "$UNNAMED$4"
-			quid       	"37D522000038"
-			supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
-			quidu      	"37CAB901016F"
-			is_navigable 	TRUE
-			is_aggregate 	TRUE)
-		    (object Role "$UNNAMED$5"
-			quid       	"37D52200006A"
-			supplier   	"Logical View::SCHSEND::CMsvScheduleSettings"
-			quidu      	"37D5214C0300"
-			is_navigable 	TRUE)))
-	    (object Association "$UNNAMED$6"
-		quid       	"380ACF7A0195"
-		roles      	(list role_list
-		    (object Role "$UNNAMED$7"
-			quid       	"380ACF7B03BD"
-			supplier   	"Logical View::SCHSEND::CMsvOffPeakTimes"
-			quidu      	"380ACDA80072"
-			is_navigable 	TRUE
-			is_aggregate 	TRUE)
-		    (object Role "$UNNAMED$8"
-			quid       	"380ACF7B03E5"
-			supplier   	"Logical View::SCHSEND::TMsvOffPeakTime"
-			quidu      	"380ACD9B034F"
-			is_navigable 	TRUE)))
-	    (object Association "$UNNAMED$9"
-		quid       	"380ACF86025A"
-		roles      	(list role_list
-		    (object Role "$UNNAMED$10"
-			quid       	"380ACF8700D5"
-			supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
-			quidu      	"37CAB901016F"
-			is_navigable 	TRUE
-			is_aggregate 	TRUE)
-		    (object Role "$UNNAMED$11"
-			quid       	"380ACF870111"
-			supplier   	"Logical View::SCHSEND::CMsvOffPeakTimes"
-			quidu      	"380ACDA80072"
-			is_navigable 	TRUE)))
-	    (object Association "$UNNAMED$12"
-		quid       	"380B36C9011B"
-		roles      	(list role_list
-		    (object Role "$UNNAMED$13"
-			quid       	"380B36C90266"
-			supplier   	"Logical View::SCHSEND::CMsvSendErrorActions"
-			quidu      	"380ACFCA026C"
-			is_navigable 	TRUE
-			is_aggregate 	TRUE)
-		    (object Role "$UNNAMED$14"
-			quid       	"380B36C902AC"
-			supplier   	"Logical View::SCHSEND::TMsvSendErrorAction"
-			quidu      	"380ACFBF02B6"
-			is_navigable 	TRUE)))
-	    (object Class_Category "ETel"
-		quid       	"37BA8A7F03C4"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "CFaxTransfer"
-			quid       	"37BA852C0067"
-			operations 	(list Operations
-			    (object Operation "Start"
-				quid       	"37BA8D6F02CB"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			language   	"C++"))
-		logical_presentations 	(list unit_reference_list))
-	    (object Class_Category "FAXS"
-		quid       	"37BA8A8F00F6"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "CFaxSession"
-			quid       	"37BA850E019A"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"37BA855E01F9"
-				supplier   	"Logical View::Epoc Generic::CActive"
-				quidu      	"37BA85360133"))
-			operations 	(list Operations
-			    (object Operation "NewLC"
-				quid       	"37BA8BEF0369"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetPhoneNumberL"
-				quid       	"37BA8D3400C7"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "StopFaxTransfer"
-				quid       	"37BA8DDD0124"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0))
-			language   	"C++")
-		    (object Class "CRecvFaxSession"
-			quid       	"37BA851502B3"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"37BA85660038"
-				supplier   	"Logical View::FAXS::CFaxSession"
-				quidu      	"37BA850E019A"))
-			language   	"C++")
-		    (object Class "CSendFaxSession"
-			quid       	"37BA84030272"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"37BA85690277"
-				supplier   	"Logical View::FAXS::CFaxSession"
-				quidu      	"37BA850E019A"))
-			operations 	(list Operations
-			    (object Operation "NextFaxFromSelectionL"
-				quid       	"37BA86080262"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SendToNextRecipientL"
-				quid       	"37BA863A021E"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "TransferNextFaxL"
-				quid       	"37BA863B019D"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetUpTransferL"
-				quid       	"37BA863E0378"
-				result     	"void"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "AddSourcesL"
-				quid       	"37BA86740068"
-				result     	"void"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CSendFaxSession"
-				quid       	"37BA868201C7"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetSendMaskL"
-				quid       	"37BA869301FE"
-				result     	"void"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "UnSetSendMask"
-				quid       	"37BA869D0324"
-				result     	"void"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "DoRunL"
-				quid       	"37BA86A700B2"
-				result     	"void"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "PagesInFaxFileL"
-				quid       	"37BA86A8015E"
-				result     	"TInt"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "StartL"
-				quid       	"37BA885A000D"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RetryStoreMessageL"
-				quid       	"37BA886D0014"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RetryAbortMessage"
-				quid       	"37BA887C005C"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			language   	"C++")
-		    (object Class "CFaxServerMTM"
-			quid       	"37BA871602B0"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"383139D200C0"
-				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
-				quidu      	"38312BAA0304"))
-			operations 	(list Operations
-			    (object Operation "DoRunL"
-				quid       	"37BA879B035C"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SendFaxesL"
-				quid       	"37BA8931005C"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "ReceiveFaxesL"
-				quid       	"37BA893202D5"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0))
-			language   	"C++")
-		    (object Class "CFaxScheduleSend"
-			quid       	"383270B50049"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"383271F9032A"
-				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
-				quidu      	"37CAB901016F")))
-		    (object Class "CFaxScheduledEntry"
-			quid       	"383270CC0331"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"3832723F0353"
-				supplier   	"Logical View::SCHSEND::CMsvScheduledEntry"
-				quidu      	"3831245B0050")))
-		    (object Association "$UNNAMED$15"
-			quid       	"383271C00101"
-			roles      	(list role_list
-			    (object Role "$UNNAMED$16"
-				quid       	"383271C0027E"
-				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
-				quidu      	"38312BAA0304"
-				is_navigable 	TRUE)
-			    (object Role "$UNNAMED$17"
-				quid       	"383271C00288"
-				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
-				quidu      	"37CAB901016F"
-				is_navigable 	TRUE
-				is_aggregate 	TRUE)))
-		    (object Association "$UNNAMED$18"
-			quid       	"383271D50238"
-			roles      	(list role_list
-			    (object Role "$UNNAMED$19"
-				quid       	"383271D503AA"
-				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
-				quidu      	"37CAB901016F")
-			    (object Role "$UNNAMED$20"
-				quid       	"383271D503DC"
-				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
-				quidu      	"38312BAA0304"
-				is_aggregate 	TRUE)))
-		    (object Mechanism @1
-			logical_models 	(list unit_reference_list
-			    (object Object "$UNNAMED$21"
-				quid       	"37BA8ACF022E"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"37BA8BB5015D"
-					supplier   	"$UNNAMED$21"
-					quidu      	"37BA8ACF022E"
-					messages   	(list Messages
-					    (object Message "SendFaxesL ( )"
-						quid       	"37BA8BB5015E"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"2"
-						ordinal    	1
-						Operation  	"SendFaxesL( )"
-						quidu      	"37BA8931005C")
-					    (object Message "SetActive ( )"
-						quid       	"37BA8C2D0386"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"13"
-						ordinal    	12
-						Operation  	"SetActive( )"
-						quidu      	"37BA87BA0388")))
-				    (object Link
-					quid       	"37BA8C11028C"
-					supplier   	"$UNNAMED$22"
-					quidu      	"37BA8B07009E"
-					messages   	(list Messages
-					    (object Message "NewLC ( )"
-						quid       	"37BA8C11028D"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"3"
-						ordinal    	2
-						Operation  	"NewLC( )"
-						quidu      	"37BA8BEF0369")
-					    (object Message "StartL ( )"
-						quid       	"37BA8C200048"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"4"
-						ordinal    	3
-						Operation  	"StartL( )"
-						quidu      	"37BA885A000D")
-					    (object Message "DoRunL ( )"
-						quid       	"37BA8FD1017E"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"ToClientFromSupplier"
-						sequence   	"15"
-						ordinal    	14
-						Operation  	"DoRunL( )"
-						quidu      	"37BA879B035C"))))
-				class      	"Logical View::FAXS::CFaxServerMTM"
-				quidu      	"37BA871602B0"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$22"
-				quid       	"37BA8B07009E"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"37BA8C6B026D"
-					supplier   	"$UNNAMED$22"
-					quidu      	"37BA8B07009E"
-					messages   	(list Messages
-					    (object Message "SetSendMaskL ( )"
-						quid       	"37BA8C6B026E"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"5"
-						ordinal    	4
-						Operation  	"SetSendMaskL( )"
-						quidu      	"37BA869301FE")
-					    (object Message "TransferNextFaxL ( )"
-						quid       	"37BA8C7A02E7"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"6"
-						ordinal    	5
-						Operation  	"TransferNextFaxL( )"
-						quidu      	"37BA863B019D")
-					    (object Message "NextFaxFromSelectionL ( )"
-						quid       	"37BA8C96000C"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"7"
-						ordinal    	6
-						Operation  	"NextFaxFromSelectionL( )"
-						quidu      	"37BA86080262")
-					    (object Message "SendToNextRecipientL ( )"
-						quid       	"37BA8CDF0147"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"8"
-						ordinal    	7
-						Operation  	"SendToNextRecipientL( )"
-						quidu      	"37BA863A021E")
-					    (object Message "SetUpTransferL ( )"
-						quid       	"37BA8D0101AA"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"9"
-						ordinal    	8
-						Operation  	"SetUpTransferL( )"
-						quidu      	"37BA863E0378")
-					    (object Message "SetPhoneNumberL ( )"
-						quid       	"37BA8D1003AB"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"10"
-						ordinal    	9
-						Operation  	"SetPhoneNumberL( )"
-						quidu      	"37BA8D3400C7")
-					    (object Message "SetActive ( )"
-						quid       	"37BA8D970355"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"12"
-						ordinal    	11
-						Operation  	"SetActive( )"
-						quidu      	"37BA87BA0388")))
-				    (object Link
-					quid       	"37BA8D650317"
-					supplier   	"$UNNAMED$23"
-					quidu      	"37BA8B0E0062"
-					messages   	(list Messages
-					    (object Message "Start ( )"
-						quid       	"37BA8D650318"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"11"
-						ordinal    	10
-						Operation  	"Start( )"
-						quidu      	"37BA8D6F02CB")
-					    (object Message "DoRunL ( )"
-						quid       	"37BA8DA70271"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"ToClientFromSupplier"
-						sequence   	"14"
-						ordinal    	13
-						Operation  	"DoRunL( )"
-						quidu      	"37BA86A700B2"))))
-				class      	"Logical View::FAXS::CSendFaxSession"
-				quidu      	"37BA84030272"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$23"
-				quid       	"37BA8B0E0062"
-				class      	"Logical View::ETel::CFaxTransfer"
-				quidu      	"37BA852C0067"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "Client"
-				quid       	"37BA8B1F0251"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"37BA8B38032A"
-					supplier   	"$UNNAMED$21"
-					quidu      	"37BA8ACF022E"
-					messages   	(list Messages
-					    (object Message "CopyFromLocalL ( )"
-						quid       	"37BA8B38032B"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"1"
-						ordinal    	0
-						Operation  	"CopyFromLocalL( )"
-						quidu      	"37BA88AA0347"))))
-				persistence 	"Transient"
-				multi      	FALSE)))
-		    (object Mechanism @2
-			logical_models 	(list unit_reference_list))
-		    (object Mechanism @3
-			logical_models 	(list unit_reference_list
-			    (object Object "Client"
-				quid       	"37C4181D031D"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"37C4184102B1"
-					supplier   	"$UNNAMED$24"
-					quidu      	"37C418360020"
-					messages   	(list Messages
-					    (object Message "DeleteScheduleL()"
-						quid       	"37C4184102B2"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"2"
-						ordinal    	1
-						Operation  	"DeleteScheduleL"
-						quidu      	"37C411CC003D")
-					    (object Message "ScheduleEntryL ( )"
-						quid       	"37C4188A0071"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"5"
-						ordinal    	4
-						Operation  	"ScheduleEntryL"
-						quidu      	"37C4116A00FA")
-					    (object Message "GetScheduleL ( )"
-						quid       	"37C419E6008F"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"1"
-						ordinal    	0
-						Operation  	"GetScheduleL"
-						quidu      	"37C4119801FB"))))
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$25"
-				quid       	"37C41829018A"
-				class      	"Logical View::FAXS::CFaxServerMTM"
-				quidu      	"37BA871602B0"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$26"
-				quid       	"37C4182C0351"
-				class      	"Logical View::FAXS::CFaxServerMTM"
-				quidu      	"37BA871602B0"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$27"
-				quid       	"37C418300325"
-				class      	"Logical View::FAXS::CFaxServerMTM"
-				quidu      	"37BA871602B0"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$24"
-				quid       	"37C418360020"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"37C418810032"
-					supplier   	"$UNNAMED$28"
-					quidu      	"37C4183C028C"
-					messages   	(list Messages
-					    (object Message "DeleteSchedule()"
-						quid       	"37C418810033"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"3"
-						ordinal    	2
-						Operation  	"DeleteSchedule( )"
-						quidu      	"37C4128401D2")))
-				    (object Link
-					quid       	"37C418B30070"
-					supplier   	"$UNNAMED$29"
-					quidu      	"37C418AC011A"
-					messages   	(list Messages
-					    (object Message "SetStatus(KStatusWaiting)"
-						quid       	"37C418B30071"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"4"
-						ordinal    	3
-						Operation  	"SetStatus(KStatusNone)")
-					    (object Message "SetStatus(KStatusScheduled)"
-						quid       	"37C4194D0162"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"6"
-						ordinal    	5))))
-				class      	"Logical View::FAXS::CFaxServerMTM"
-				quidu      	"37BA871602B0"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$28"
-				quid       	"37C4183C028C"
-				class      	"Logical View::schsvr::RScheduler"
-				quidu      	"37C412680178"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$29"
-				quid       	"37C418AC011A"
-				class      	"Logical View::MSG::TMsvEntry"
-				quidu      	"37C414BE03D1"
-				persistence 	"Transient"
-				multi      	FALSE))))
-		logical_presentations 	(list unit_reference_list
-		    (object ClassDiagram "Fax Class Diagram"
-			quid       	"37BA832F00BF"
-			title      	"Fax Class Diagram"
-			zoom       	75
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::FAXS::CFaxServerMTM" @4
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(403, 2294)
-				label      	(object ItemLabel
-				    Parent_View 	@4
-				    location   	(141, 2152)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	524
-				    justify    	0
-				    label      	"CFaxServerMTM")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA871602B0"
-				width      	542
-				height     	308
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::MSG::CBaseServerMTM" @5
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(372, 837)
-				label      	(object ItemLabel
-				    Parent_View 	@5
-				    location   	(152, 408)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	440
-				    justify    	0
-				    label      	"CBaseServerMTM")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA8720023C"
-				width      	458
-				height     	882
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::FAXS::CSendFaxSession" @6
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1085, 1085)
-				label      	(object ItemLabel
-				    Parent_View 	@6
-				    location   	(828, 704)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	514
-				    justify    	0
-				    label      	"CSendFaxSession")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA84030272"
-				width      	532
-				height     	786
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::FAXS::CRecvFaxSession" @7
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1767, 961)
-				label      	(object ItemLabel
-				    Parent_View 	@7
-				    location   	(1580, 915)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	374
-				    justify    	0
-				    label      	"CRecvFaxSession")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA851502B3"
-				width      	392
-				height     	114
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::ETel::CFaxTransfer" @8
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1953, 372)
-				label      	(object ItemLabel
-				    Parent_View 	@8
-				    location   	(1815, 276)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	276
-				    justify    	0
-				    label      	"CFaxTransfer")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA852C0067"
-				width      	294
-				height     	216
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::FAXS::CFaxSession" @9
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1395, 372)
-				label      	(object ItemLabel
-				    Parent_View 	@9
-				    location   	(1186, 241)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	418
-				    justify    	0
-				    label      	"CFaxSession")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA850E019A"
-				width      	436
-				height     	286
-				annotation 	8
-				autoResize 	TRUE)
-			    (object InheritView "" @10
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"37BA85660038"
-				client     	@7
-				supplier   	@9
-				line_style 	0)
-			    (object InheritView "" @11
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"37BA85690277"
-				client     	@6
-				supplier   	@9
-				line_style 	0)
-			    (object AssociationViewNew "$UNNAMED$0" @12
-				location   	(1709, 372)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"37BA858003B1"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$2" @13
-					Parent_View 	@12
-					location   	(841, -279)
-					label      	(object SegLabel @14
-					    Parent_View 	@13
-					    location   	(1790, 331)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	0)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"37BA858102E1"
-					client     	@12
-					supplier   	@8
-					line_style 	0)
-				    (object RoleView "$UNNAMED$1" @15
-					Parent_View 	@12
-					location   	(841, -279)
-					label      	(object SegLabel @16
-					    Parent_View 	@15
-					    location   	(1628, 331)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	1)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"37BA858102E0"
-					client     	@12
-					supplier   	@9
-					line_style 	0)))
-			    (object ClassView "Class" "Logical View::Epoc Generic::CActive" @17
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(713, 155)
-				label      	(object ItemLabel
-				    Parent_View 	@17
-				    location   	(564, 58)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	298
-				    justify    	0
-				    label      	"CActive")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA85360133"
-				width      	316
-				height     	216
-				annotation 	8)
-			    (object InheritView "" @18
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"37BA855E01F9"
-				client     	@9
-				supplier   	@17
-				line_style 	0)
-			    (object InheritView "" @19
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"37BA87F30109"
-				client     	@5
-				supplier   	@17
-				line_style 	0)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @20
-				ShowCompartmentStereotypes 	TRUE
-				location   	(1116, 1705)
-				label      	(object ItemLabel
-				    Parent_View 	@20
-				    location   	(915, 1635)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	402
-				    justify    	0
-				    label      	"CMsvScheduleSend")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37CAB901016F"
-				width      	420
-				height     	162
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::SCHSEND::CScheduleBaseServerMtm" @21
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(372, 1705)
-				label      	(object ItemLabel
-				    Parent_View 	@21
-				    location   	(10, 1501)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	724
-				    justify    	0
-				    label      	"CScheduleBaseServerMtm")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"38312BAA0304"
-				width      	742
-				height     	432
-				annotation 	8
-				autoResize 	TRUE)
-			    (object InheritView "" @22
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383139D200C0"
-				client     	@4
-				supplier   	@21
-				line_style 	0)
-			    (object InheritView "" @23
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383139DD022E"
-				client     	@21
-				supplier   	@5
-				line_style 	0)
-			    (object AssociationViewNew "$UNNAMED$18" @24
-				location   	(824, 1705)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383271D50238"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$19" @25
-					Parent_View 	@24
-					location   	(483, 31)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"383271D503AA"
-					client     	@24
-					supplier   	@20
-					line_style 	0)
-				    (object RoleView "$UNNAMED$20" @26
-					Parent_View 	@24
-					location   	(483, 31)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"383271D503DC"
-					client     	@24
-					supplier   	@21
-					line_style 	0)))
-			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduledEntry" @27
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1767, 2201)
-				label      	(object ItemLabel
-				    Parent_View 	@27
-				    location   	(1555, 2155)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	424
-				    justify    	0
-				    label      	"CFaxScheduledEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"383270CC0331"
-				width      	442
-				height     	114
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduleSend" @28
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1116, 2201)
-				label      	(object ItemLabel
-				    Parent_View 	@28
-				    location   	(921, 2155)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	390
-				    justify    	0
-				    label      	"CFaxScheduleSend")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"383270B50049"
-				width      	408
-				height     	114
-				annotation 	8)
-			    (object InheritView "" @29
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383271F9032A"
-				client     	@28
-				supplier   	@20
-				line_style 	0)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @30
-				ShowCompartmentStereotypes 	TRUE
-				location   	(1767, 1705)
-				label      	(object ItemLabel
-				    Parent_View 	@30
-				    location   	(1556, 1635)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	422
-				    justify    	0
-				    label      	"CMsvScheduledEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3831245B0050"
-				width      	440
-				height     	162
-				annotation 	8
-				autoResize 	TRUE)
-			    (object InheritView "" @31
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832723F0353"
-				client     	@27
-				supplier   	@30
-				line_style 	0)))
-		    (object InteractionDiagram "SendingSequence"
-			mechanism_ref 	@1
-			quid       	"37BA86E60329"
-			title      	"SendingSequence"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	143
-			items      	(list diagram_item_list
-			    (object InterObjView "$UNNAMED$21" @32
-				location   	(806, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@32
-				    location   	(806, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	328
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				quidu      	"37BA8ACF022E"
-				width      	346
-				height     	4015
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @33
-				    location   	(806, 403)
-				    InterObjView 	@32
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @34
-				    location   	(806, 527)
-				    InterObjView 	@32
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @35
-				    location   	(806, 558)
-				    InterObjView 	@32
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @36
-				    location   	(806, 713)
-				    InterObjView 	@32
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @37
-				    location   	(806, 899)
-				    InterObjView 	@32
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @38
-				    location   	(806, 2976)
-				    InterObjView 	@32
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @39
-				    location   	(806, 2976)
-				    InterObjView 	@32
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @40
-				    location   	(806, 4030)
-				    InterObjView 	@32
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$22" @41
-				location   	(1302, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@41
-				    location   	(1302, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				quidu      	"37BA8B07009E"
-				width      	300
-				height     	4015
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @42
-				    location   	(1302, 713)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @43
-				    location   	(1302, 899)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @44
-				    location   	(1302, 1054)
-				    InterObjView 	@41
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @45
-				    location   	(1302, 1085)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @46
-				    location   	(1302, 1240)
-				    InterObjView 	@41
-				    height     	244
-				    y_coord    	184
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @47
-				    location   	(1302, 1364)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @48
-				    location   	(1302, 1519)
-				    InterObjView 	@41
-				    height     	213
-				    y_coord    	153
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @49
-				    location   	(1302, 1612)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @50
-				    location   	(1302, 1767)
-				    InterObjView 	@41
-				    height     	244
-				    y_coord    	184
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @51
-				    location   	(1302, 1891)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @52
-				    location   	(1302, 2077)
-				    InterObjView 	@41
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @53
-				    location   	(1302, 2108)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @54
-				    location   	(1302, 2294)
-				    InterObjView 	@41
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @55
-				    location   	(1302, 2325)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @56
-				    location   	(1302, 2573)
-				    InterObjView 	@41
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @57
-				    location   	(1302, 2759)
-				    InterObjView 	@41
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @58
-				    location   	(1302, 2790)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @59
-				    location   	(1302, 3162)
-				    InterObjView 	@41
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @60
-				    location   	(1302, 4030)
-				    InterObjView 	@41
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$23" @61
-				location   	(1798, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@61
-				    location   	(1798, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				quidu      	"37BA8B0E0062"
-				width      	300
-				height     	4015
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @62
-				    location   	(1798, 2573)
-				    InterObjView 	@61
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @63
-				    location   	(1798, 3162)
-				    InterObjView 	@61
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE))
-			    (object InterObjView "Client" @64
-				location   	(465, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@64
-				    location   	(465, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"Client")
-				icon_style 	"Icon"
-				quidu      	"37BA8B1F0251"
-				width      	300
-				height     	4015
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @65
-				    location   	(465, 403)
-				    InterObjView 	@64
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE))
-			    (object InterMessView "" @66
-				location   	(0, 403)
-				label      	(object SegLabel @67
-				    Parent_View 	@66
-				    location   	(635, 359)
-				    quidu      	"37BA8B38032B"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	403
-				    justify    	0
-				    label      	"CopyFromLocalL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@64
-				supplier   	@32
-				Focus_Src  	@65
-				Focus_Entry 	@33
-				origin     	(480, 403)
-				terminus   	(790, 403)
-				ordinal    	0)
-			    (object SelfMessView "" @68
-				location   	(0, 558)
-				label      	(object SegLabel @69
-				    Parent_View 	@68
-				    location   	(897, 514)
-				    quidu      	"37BA8BB5015E"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	325
-				    justify    	0
-				    label      	"SendFaxesL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@32
-				supplier   	@32
-				Focus_Src  	@34
-				Focus_Entry 	@35
-				origin     	(822, 558)
-				terminus   	(972, 558)
-				ordinal    	1)
-			    (object InterMessView "" @70
-				location   	(0, 713)
-				label      	(object SegLabel @71
-				    Parent_View 	@70
-				    location   	(1053, 669)
-				    quidu      	"37BA8C11028D"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	225
-				    justify    	0
-				    label      	"NewLC ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@32
-				supplier   	@41
-				Focus_Src  	@36
-				Focus_Entry 	@42
-				origin     	(821, 713)
-				terminus   	(1286, 713)
-				ordinal    	2)
-			    (object InterMessView "" @72
-				location   	(0, 899)
-				label      	(object SegLabel @73
-				    Parent_View 	@72
-				    location   	(1053, 855)
-				    quidu      	"37BA8C200048"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	206
-				    justify    	0
-				    label      	"StartL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@32
-				supplier   	@41
-				Focus_Src  	@37
-				Focus_Entry 	@43
-				origin     	(821, 899)
-				terminus   	(1286, 899)
-				ordinal    	3)
-			    (object SelfMessView "" @74
-				location   	(0, 2976)
-				label      	(object SegLabel @75
-				    Parent_View 	@74
-				    location   	(897, 2932)
-				    quidu      	"37BA8C2D0386"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	291
-				    justify    	0
-				    label      	"SetActive ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@32
-				supplier   	@32
-				Focus_Src  	@38
-				Focus_Entry 	@39
-				origin     	(822, 2976)
-				terminus   	(972, 2976)
-				ordinal    	12)
-			    (object SelfMessView "" @76
-				location   	(0, 1085)
-				label      	(object SegLabel @77
-				    Parent_View 	@76
-				    location   	(1393, 1041)
-				    quidu      	"37BA8C6B026E"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	375
-				    justify    	0
-				    label      	"SetSendMaskL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@41
-				supplier   	@41
-				Focus_Src  	@44
-				Focus_Entry 	@45
-				origin     	(1318, 1085)
-				terminus   	(1468, 1085)
-				ordinal    	4)
-			    (object SelfMessView "" @78
-				location   	(0, 1364)
-				label      	(object SegLabel @79
-				    Parent_View 	@78
-				    location   	(1393, 1320)
-				    quidu      	"37BA8C7A02E7"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	415
-				    justify    	0
-				    label      	"TransferNextFaxL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@41
-				supplier   	@41
-				Focus_Src  	@46
-				Focus_Entry 	@47
-				origin     	(1318, 1364)
-				terminus   	(1468, 1364)
-				ordinal    	5)
-			    (object SelfMessView "" @80
-				location   	(0, 1612)
-				label      	(object SegLabel @81
-				    Parent_View 	@80
-				    location   	(1361, 1569)
-				    quidu      	"37BA8C96000C"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	534
-				    justify    	0
-				    label      	"NextFaxFromSelectionL ( )"
-				    pctDist    	0.286667
-				    height     	44
-				    orientation 	0)
-				client     	@41
-				supplier   	@41
-				Focus_Src  	@48
-				Focus_Entry 	@49
-				origin     	(1318, 1612)
-				terminus   	(1468, 1612)
-				ordinal    	6)
-			    (object SelfMessView "" @82
-				location   	(0, 1891)
-				label      	(object SegLabel @83
-				    Parent_View 	@82
-				    location   	(1393, 1847)
-				    quidu      	"37BA8CDF0147"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	509
-				    justify    	0
-				    label      	"SendToNextRecipientL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@41
-				supplier   	@41
-				Focus_Src  	@50
-				Focus_Entry 	@51
-				origin     	(1318, 1891)
-				terminus   	(1468, 1891)
-				ordinal    	7)
-			    (object SelfMessView "" @84
-				location   	(0, 2108)
-				label      	(object SegLabel @85
-				    Parent_View 	@84
-				    location   	(1393, 2064)
-				    quidu      	"37BA8D0101AA"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	375
-				    justify    	0
-				    label      	"SetUpTransferL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@41
-				supplier   	@41
-				Focus_Src  	@52
-				Focus_Entry 	@53
-				origin     	(1318, 2108)
-				terminus   	(1468, 2108)
-				ordinal    	8)
-			    (object SelfMessView "" @86
-				location   	(0, 2325)
-				label      	(object SegLabel @87
-				    Parent_View 	@86
-				    location   	(1393, 2281)
-				    quidu      	"37BA8D1003AB"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	459
-				    justify    	0
-				    label      	"SetPhoneNumberL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@41
-				supplier   	@41
-				Focus_Src  	@54
-				Focus_Entry 	@55
-				origin     	(1318, 2325)
-				terminus   	(1468, 2325)
-				ordinal    	9)
-			    (object InterMessView "" @88
-				location   	(0, 2573)
-				label      	(object SegLabel @89
-				    Parent_View 	@88
-				    location   	(1550, 2529)
-				    quidu      	"37BA8D650318"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	206
-				    justify    	0
-				    label      	"Start ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@41
-				supplier   	@61
-				Focus_Src  	@56
-				Focus_Entry 	@62
-				origin     	(1317, 2573)
-				terminus   	(1782, 2573)
-				ordinal    	10)
-			    (object SelfMessView "" @90
-				location   	(0, 2790)
-				label      	(object SegLabel @91
-				    Parent_View 	@90
-				    location   	(1393, 2746)
-				    quidu      	"37BA8D970355"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	291
-				    justify    	0
-				    label      	"SetActive ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@41
-				supplier   	@41
-				Focus_Src  	@57
-				Focus_Entry 	@58
-				origin     	(1318, 2790)
-				terminus   	(1468, 2790)
-				ordinal    	11)
-			    (object InterMessView "" @92
-				location   	(0, 3162)
-				label      	(object SegLabel @93
-				    Parent_View 	@92
-				    location   	(1550, 3118)
-				    quidu      	"37BA8DA70271"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	262
-				    justify    	0
-				    label      	"DoRunL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	1)
-				client     	@61
-				supplier   	@41
-				Focus_Src  	@63
-				Focus_Entry 	@59
-				origin     	(1782, 3162)
-				terminus   	(1318, 3162)
-				ordinal    	13)
-			    (object InterMessView "" @94
-				location   	(0, 4030)
-				label      	(object SegLabel @95
-				    Parent_View 	@94
-				    location   	(1052, 3986)
-				    quidu      	"37BA8FD1017E"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	262
-				    justify    	0
-				    label      	"DoRunL ( )"
-				    pctDist    	0.504630
-				    height     	45
-				    orientation 	1)
-				client     	@41
-				supplier   	@32
-				Focus_Src  	@60
-				Focus_Entry 	@40
-				origin     	(1286, 4030)
-				terminus   	(822, 4030)
-				ordinal    	14)
-			    (object NoteView @96
-				location   	(1302, 3503)
-				label      	(object ItemLabel
-				    Parent_View 	@96
-				    location   	(902, 3262)
-				    nlines     	9
-				    max_width  	765
-				    label      	
-|- Stops fax transfer (calls StopFaxTransfer())
-|- Retries sending if it failed (calls TransferNextFaxL)
-|- Sends the last fax to the next recipient (calls SendToNextRecipient())
-|- If no more recipients, sends any remaining faxes in the selection (calls TransferNextFaxL())
-				    )
-				width      	825
-				height     	494)
-			    (object NoteView @97
-				location   	(1798, 2759)
-				label      	(object ItemLabel
-				    Parent_View 	@97
-				    location   	(1645, 2665)
-				    nlines     	3
-				    max_width  	271
-				    label      	"Sends a single fax to one recipient")
-				width      	331
-				height     	200)))
-		    (object InteractionDiagram "ReceivingSequence"
-			mechanism_ref 	@2
-			quid       	"37BA870803AA"
-			title      	"ReceivingSequence"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list))
-		    (object InteractionDiagram "ClientEditsAScheduledFax"
-			mechanism_ref 	@3
-			quid       	"37C418070091"
-			title      	"ClientEditsAScheduledFax"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object InterObjView "Client" @98
-				location   	(465, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@98
-				    location   	(465, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"Client")
-				icon_style 	"Icon"
-				quidu      	"37C4181D031D"
-				width      	300
-				height     	1070
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @99
-				    location   	(465, 341)
-				    InterObjView 	@98
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @100
-				    location   	(465, 403)
-				    InterObjView 	@98
-				    height     	182
-				    y_coord    	122
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @101
-				    location   	(465, 806)
-				    InterObjView 	@98
-				    height     	244
-				    y_coord    	184
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$24" @102
-				location   	(806, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@102
-				    location   	(806, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	328
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				quidu      	"37C418360020"
-				width      	346
-				height     	1070
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @103
-				    location   	(806, 341)
-				    InterObjView 	@102
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @104
-				    location   	(806, 465)
-				    InterObjView 	@102
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @105
-				    location   	(806, 558)
-				    InterObjView 	@102
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @106
-				    location   	(806, 713)
-				    InterObjView 	@102
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @107
-				    location   	(806, 930)
-				    InterObjView 	@102
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @108
-				    location   	(806, 1023)
-				    InterObjView 	@102
-				    height     	182
-				    y_coord    	122
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$28" @109
-				location   	(1488, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@109
-				    location   	(1488, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				quidu      	"37C4183C028C"
-				width      	300
-				height     	1070
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @110
-				    location   	(1488, 589)
-				    InterObjView 	@109
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$29" @111
-				location   	(1147, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@111
-				    location   	(1147, 217)
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				quidu      	"37C418AC011A"
-				width      	300
-				height     	1070
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @112
-				    location   	(1147, 713)
-				    InterObjView 	@111
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @113
-				    location   	(1147, 1085)
-				    InterObjView 	@111
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE))
-			    (object InterMessView "" @114
-				location   	(0, 465)
-				label      	(object SegLabel @115
-				    Parent_View 	@114
-				    location   	(633, 422)
-				    quidu      	"37C4184102B2"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	378
-				    justify    	0
-				    label      	"DeleteScheduleL()"
-				    pctDist    	0.495146
-				    height     	44
-				    orientation 	0)
-				client     	@98
-				supplier   	@102
-				Focus_Src  	@100
-				Focus_Entry 	@104
-				origin     	(480, 465)
-				terminus   	(790, 465)
-				ordinal    	1)
-			    (object InterMessView "" @116
-				location   	(0, 589)
-				label      	(object SegLabel @117
-				    Parent_View 	@116
-				    location   	(1146, 545)
-				    quidu      	"37C418810033"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	356
-				    justify    	0
-				    label      	"DeleteSchedule()"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@102
-				supplier   	@109
-				Focus_Src  	@105
-				Focus_Entry 	@110
-				origin     	(821, 589)
-				terminus   	(1472, 589)
-				ordinal    	2)
-			    (object InterMessView "" @118
-				location   	(0, 930)
-				label      	(object SegLabel @119
-				    Parent_View 	@118
-				    location   	(635, 886)
-				    quidu      	"37C4188A0071"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	384
-				    justify    	0
-				    label      	"ScheduleEntryL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@98
-				supplier   	@102
-				Focus_Src  	@101
-				Focus_Entry 	@107
-				origin     	(480, 930)
-				terminus   	(790, 930)
-				ordinal    	4)
-			    (object InterMessView "" @120
-				location   	(0, 713)
-				label      	(object SegLabel @121
-				    Parent_View 	@120
-				    location   	(976, 669)
-				    quidu      	"37C418B30071"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	537
-				    justify    	0
-				    label      	"SetStatus(KStatusWaiting)"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@102
-				supplier   	@111
-				Focus_Src  	@106
-				Focus_Entry 	@112
-				origin     	(821, 713)
-				terminus   	(1131, 713)
-				ordinal    	3)
-			    (object InterMessView "" @122
-				location   	(0, 1085)
-				label      	(object SegLabel @123
-				    Parent_View 	@122
-				    location   	(976, 1041)
-				    quidu      	"37C4194D0162"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	590
-				    justify    	0
-				    label      	"SetStatus(KStatusScheduled)"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@102
-				supplier   	@111
-				Focus_Src  	@108
-				Focus_Entry 	@113
-				origin     	(821, 1085)
-				terminus   	(1131, 1085)
-				ordinal    	5)
-			    (object InterMessView "" @124
-				location   	(0, 341)
-				label      	(object SegLabel @125
-				    Parent_View 	@124
-				    location   	(635, 297)
-				    quidu      	"37C419E6008F"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	353
-				    justify    	0
-				    label      	"GetScheduleL ( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				client     	@98
-				supplier   	@102
-				Focus_Src  	@99
-				Focus_Entry 	@103
-				origin     	(480, 341)
-				terminus   	(790, 341)
-				ordinal    	0)
-			    (object NoteView @126
-				location   	(992, 1302)
-				label      	(object ItemLabel
-				    Parent_View 	@126
-				    location   	(839, 1243)
-				    nlines     	2
-				    max_width  	271
-				    label      	"Etc...")
-				width      	331
-				height     	131)))))
-	    (object Class_Category "MSG"
-		quid       	"37BA8AAA0312"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "CBaseServerMTM"
-			quid       	"37BA8720023C"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"37BA87F30109"
-				supplier   	"Logical View::Epoc Generic::CActive"
-				quidu      	"37BA85360133"))
-			operations 	(list Operations
-			    (object Operation "CopyFromLocalL"
-				quid       	"37BA88AA0347"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CopyToLocalL"
-				quid       	"37BA88AC010F"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CopyWithinServiceL"
-				quid       	"37BA88AE01BD"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "MoveToLocalL"
-				quid       	"37BA88AE0267"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "MoveFromLocalL"
-				quid       	"37BA88AE0339"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "MoveWithinServiceL"
-				quid       	"37BA88AE03E3"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "DeleteL"
-				quid       	"37BA88AF00B0"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "DeleteAllL"
-				quid       	"37BA88AF016E"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CreateL"
-				quid       	"37BA88EA032B"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ChangeL"
-				quid       	"37BA88F6008A"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "StartCommandL"
-				quid       	"37BA88F701E0"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Progress"
-				quid       	"37BA88F7032A"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CommandExpected"
-				quid       	"37BA88F80014"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetInitialEntry"
-				quid       	"37BA88F80169"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			language   	"C++")
-		    (object Class "CClient"
-			quid       	"37C411E603B6"
-			language   	"C++")
-		    (object Class "TMsvEntry"
-			quid       	"37C414BE03D1"
-			operations 	(list Operations
-			    (object Operation "SetOffPeak"
-				quid       	"37D5207A01FA"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "OffPeak"
-				quid       	"37D5208201A1"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetScheduled"
-				quid       	"37D52087005E"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Scheduled"
-				quid       	"37D5208F0006"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetSendState"
-				quid       	"37D52092038F"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SendState"
-				quid       	"37D5209A012E"
-				result     	"TInt"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			language   	"C++")
-		    (object Class "CMsvSession"
-			quid       	"3833D3690344"
-			operations 	(list Operations
-			    (object Operation "TransferCommandL"
-				quid       	"3833D37A0366"
-				parameters 	(list Parameters
-				    (object Parameter "aSelection"
-					type       	"CMsvEntrySelection&")
-				    (object Parameter "aCommandId"
-					type       	"TInt")
-				    (object Parameter "aParameter"
-					type       	"TDesC8&")
-				    (object Parameter "aStatus"
-					type       	"TRequestStatus"))
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "OpenL"
-				quid       	"3833D3840003"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))))
-		logical_presentations 	(list unit_reference_list))
-	    (object Class_Category "SCHSEND"
-		quid       	"38170EC30072"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "TMsvSendErrorAction"
-			quid       	"380ACFBF02B6"
-			operations 	(list Operations
-			    (object Operation "ExternalizeL"
-				quid       	"380AD17001BF"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "InternalizeL"
-				quid       	"380AD175032E"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "TMsvSendErrorAction"
-				quid       	"380AD1850088"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Reset"
-				quid       	"380AD1CB00F7"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iError"
-				quid       	"380ACFD9017D"
-				type       	"TInt"
-				exportControl 	"Public")
-			    (object ClassAttribute "iAction"
-				quid       	"380ACFF30012"
-				type       	"TMsvSendAction"
-				exportControl 	"Public")
-			    (object ClassAttribute "iAttempts"
-				quid       	"380AD11C031C"
-				type       	"TMsvSendAttempts"
-				exportControl 	"Public")
-			    (object ClassAttribute "iAttemptSpacing"
-				quid       	"380AD1280265"
-				type       	"TMsvSendAttemptSpacing"
-				exportControl 	"Public")
-			    (object ClassAttribute "iMaxAttempts"
-				quid       	"380AD15503AA"
-				type       	"TUint"
-				exportControl 	"Public")
-			    (object ClassAttribute "iVersion"
-				quid       	"380AD1620327"
-				type       	"TUint16"
-				exportControl 	"Public"))
-			language   	"C++")
-		    (object Class "TMsvOffPeakTime"
-			quid       	"380ACD9B034F"
-			operations 	(list Operations
-			    (object Operation "Hour"
-				quid       	"380ACF010104"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetHour"
-				quid       	"380ACF0503D1"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Minute"
-				quid       	"380ACF09011A"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetMinute"
-				quid       	"380ACF0E0027"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ValidityPeriod"
-				quid       	"380ACF120131"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetValidityPeriod"
-				quid       	"380ACF1603AE"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Day"
-				quid       	"380ACF1C0366"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetDay"
-				quid       	"380ACF350195"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Version"
-				quid       	"380ACF3A01ED"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetVersion"
-				quid       	"380ACF430005"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "NextTimeInclusive"
-				quid       	"380AD29E00AA"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iHour"
-				quid       	"380ACDF20105"
-				type       	"TUint8")
-			    (object ClassAttribute "iMinute"
-				quid       	"380ACE070141"
-				type       	"TUint8")
-			    (object ClassAttribute "iDay"
-				quid       	"380ACE110358"
-				type       	"TDay")
-			    (object ClassAttribute "iValidityPeriod"
-				quid       	"380ACE3F01BA"
-				type       	"TTimeIntervalMinutes"))
-			language   	"C++")
-		    (object Class "TMsvScheduledSendData"
-			quid       	"37D52D630383"
-			used_nodes 	(list uses_relationship_list
-			    (object Uses_Relationship
-				quid       	"383138FC00EA"
-				supplier   	"Logical View::SCHSEND::CMsvScheduledEntry"
-				quidu      	"3831245B0050"))
-			operations 	(list Operations
-			    (object Operation "Reset"
-				quid       	"380F12150076"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "StoreL"
-				quid       	"380F121D0352"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RestoreL"
-				quid       	"380F12220060"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RemoveL"
-				quid       	"380F12350021"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Retries"
-				quid       	"383128750209"
-				result     	"TInt"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "IncreaseRetries"
-				quid       	"3831288102EC"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ResetRetries"
-				quid       	"3831288A021D"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "IsReset"
-				quid       	"383128B1034F"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iTaskID"
-				quid       	"37D52D790276"
-				type       	"TInt"
-				exportControl 	"Public")
-			    (object ClassAttribute "iRef"
-				quid       	"37D52D80029E"
-				type       	"TSchedulerItemRef"
-				exportControl 	"Public")
-			    (object ClassAttribute "iRetryCount"
-				quid       	"37D52D850288"
-				type       	"TInt"
-				exportControl 	"Protected"))
-			language   	"C++")
-		    (object Class "CMsvScheduleSettings"
-			quid       	"37D5214C0300"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"38327E410367"
-				supplier   	"Logical View::Epoc Generic::CBase"
-				quidu      	"3832725B0367"))
-			operations 	(list Operations
-			    (object Operation "NewL"
-				quid       	"3831282D00B1"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Reset"
-				quid       	"380AD27501C4"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetSendExe"
-				quid       	"37D521C1001A"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SendExe"
-				quid       	"37D521CA0167"
-				result     	"TFileName"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetIntervalType"
-				quid       	"37F48F1102B4"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "IntervalType"
-				quid       	"37F48F2C015E"
-				result     	"TIntervalType"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetPriority"
-				quid       	"37F48F38031E"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Priority"
-				quid       	"37F48F440362"
-				result     	"TInt"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetValidityPeriod"
-				quid       	"380F11A7009F"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ValidityPeriod"
-				quid       	"380F11AD0397"
-				result     	"TTimeIntervalMinutes"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetLongInterval"
-				quid       	"3831262D024F"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "LongInterval"
-				quid       	"3831262D026D"
-				result     	"TTimeIntervalSeconds"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetShortInterval"
-				quid       	"3831262D0281"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ShortInterval"
-				quid       	"3831262D029F"
-				result     	"TTimeIntervalSeconds"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetVariableIntervalsL"
-				quid       	"3831262D02B3"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "VariableIntervals"
-				quid       	"3831262D02D1"
-				result     	"CArrayFixFlat<TTimeIntervalSeconds>"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Latency"
-				quid       	"3831290C0133"
-				result     	"TTimeIntervalSeconds"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetLatency"
-				quid       	"3831291001D9"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "StoreL"
-				quid       	"3831293603C9"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RestoreL"
-				quid       	"3831293B020D"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iSendExe"
-				quid       	"37D521D30124"
-				type       	"TFileName")
-			    (object ClassAttribute "iValidityPeriod"
-				quid       	"37F489FF002D"
-				type       	"TTimeIntervalMinutes")
-			    (object ClassAttribute "iIntervalType"
-				quid       	"37F48A19030F"
-				type       	"TIntervalType")
-			    (object ClassAttribute "iPriority"
-				quid       	"37F48EC3037A"
-				type       	"TInt")
-			    (object ClassAttribute "iVariableIntervals"
-				quid       	"383127AA0008"
-				type       	"CArrayFixFlat<TTimeIntervalSeconds>")
-			    (object ClassAttribute "iDefault"
-				quid       	"383127AA001C"
-				type       	"TMsvSendErrorAction")
-			    (object ClassAttribute "iLongInterval"
-				quid       	"383127AA003A"
-				type       	"TTimeIntervalSeconds")
-			    (object ClassAttribute "iShortInterval"
-				quid       	"383127AA004E"
-				type       	"TTimeIntervalSeconds"))
-			language   	"C++")
-		    (object Class "CMsvScheduleSend"
-			quid       	"37CAB901016F"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"3832736C019D"
-				supplier   	"Logical View::Epoc Generic::CBase"
-				quidu      	"3832725B0367"))
-			operations 	(list Operations
-			    (object Operation "ScheduleL"
-				quid       	"37CAB92302AF"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ReScheduleL"
-				quid       	"37CAB93A03AC"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "DeleteScheduleL"
-				quid       	"37CAB9400061"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CheckScheduleL"
-				quid       	"37CAB92900EB"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SendingCompleteL"
-				quid       	"380ED7670011"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ScheduleSettings"
-				quid       	"380ED77B036D"
-				result     	"TMsvScheduleSettings&"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "OffPeakTimes"
-				quid       	"3831210603E3"
-				result     	"CMsvOffPeakTimes"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SendErrorActions"
-				quid       	"3831210C01D9"
-				result     	"CMsvSendErrorActions"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RestoreL"
-				quid       	"383123A90181"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "GetMessageL"
-				quid       	"383123C802B2"
-				parameters 	(list Parameters
-				    (object Parameter "aId"
-					type       	"TMsvId"))
-				result     	"CMsvScheduledEntry"
-				qualification 	"const"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "GetNextAttempt"
-				quid       	"383294FC0129"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "ScheduleEntryL"
-				quid       	"3833C91300A0"
-				concurrency 	"Sequential"
-				opExportControl 	"Private"
-				uid        	0)
-			    (object Operation "CreateScheduleL"
-				quid       	"3833C993019F"
-				concurrency 	"Sequential"
-				opExportControl 	"Private"
-				uid        	0)
-			    (object Operation "DeleteScheduleForEntryL"
-				quid       	"3833CD430228"
-				concurrency 	"Sequential"
-				opExportControl 	"Private"
-				uid        	0)
-			    (object Operation "DoScheduleL"
-				quid       	"3833CEBB035F"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "GetOffPeakL"
-				quid       	"3833D0C400DD"
-				concurrency 	"Sequential"
-				opExportControl 	"Private"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iRegistered"
-				quid       	"37D5215D028D"
-				type       	"TBool"
-				initv      	"EFalse"
-				exportControl 	"Protected")
-			    (object ClassAttribute "iSettings"
-				quid       	"37D522110245"
-				type       	"TMsvScheduleSettings"
-				exportControl 	"Protected")
-			    (object ClassAttribute "iScheduler"
-				quid       	"37F490AC03C3"
-				type       	"RScheduler"
-				exportControl 	"Protected")
-			    (object ClassAttribute "iOffPeakTimes"
-				quid       	"380B371C0111"
-				type       	"CMsvOffPeakTimes"
-				exportControl 	"Protected")
-			    (object ClassAttribute "iErrorActions"
-				quid       	"383129EB02F7"
-				type       	"CMsvSendErrorActions"
-				exportControl 	"Protected")
-			    (object ClassAttribute "iServerEntry"
-				quid       	"38312A0A012F"
-				type       	"CMsvServerEntry"
-				exportControl 	"Protected"))
-			language   	"C++")
-		    (object Class "CMsvSendErrorActions"
-			quid       	"380ACFCA026C"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"38329DE601F3"
-				supplier   	"Logical View::Epoc Generic::CBase"
-				quidu      	"3832725B0367"))
-			operations 	(list Operations
-			    (object Operation "NewL"
-				quid       	"380AD33E023B"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "AddSendErrorActionL"
-				quid       	"380AD3550298"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RemoveSendErrorActionL"
-				quid       	"380AD366038D"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "GetSendErrorActionL"
-				quid       	"380AD373004D"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "StoreL"
-				quid       	"380AD37A0007"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RestoreL"
-				quid       	"380AD37D023C"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Default"
-				quid       	"381435F50305"
-				result     	"TMsvSendErrorAction"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetDefault"
-				quid       	"381435FE009C"
-				parameters 	(list Parameters
-				    (object Parameter "aAction"
-					type       	"TMsvSendErrorAction"))
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RestoreFromResourceL"
-				quid       	"383127450324"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetErrorsL"
-				quid       	"3831275E02E4"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Errors"
-				quid       	"3831276B03C9"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iErrors"
-				quid       	"380AD1950226"
-				type       	"CArrayFixFlat<TMsvSendErrorAction>")
-			    (object ClassAttribute "iDefault"
-				quid       	"383127B4028D"
-				type       	"TMsvSendErrorAction"))
-			language   	"C++")
-		    (object Class "CMsvOffPeakTimes"
-			quid       	"380ACDA80072"
-			operations 	(list Operations
-			    (object Operation "CMsvOffPeakTimes"
-				quid       	"380ACEA70227"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "StoreL"
-				quid       	"380ACEB50083"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RestoreL"
-				quid       	"380ACED003DF"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "GetNextOffPeakTime"
-				quid       	"380ACEDD0370"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Version"
-				quid       	"380ACEED02A0"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetVersion"
-				quid       	"380ACEF1031E"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			language   	"C++")
-		    (object Class "CMsvScheduledEntry"
-			quid       	"3831245B0050"
-			documentation 	
-|Abstract base class.
-|Must be implemented by the server Mtm.
-			
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"3832884602CF"
-				supplier   	"Logical View::Epoc Generic::CBase"
-				quidu      	"3832725B0367"))
-			used_nodes 	(list uses_relationship_list
-			    (object Uses_Relationship
-				quid       	"383138B70376"
-				supplier   	"Logical View::SCHSEND::TMsvScheduledSendData"
-				quidu      	"37D52D630383"))
-			operations 	(list Operations
-			    (object Operation "CanSendToAnyRecipients"
-				quid       	"383124B6003D"
-				documentation 	"Pure Virtual"
-				result     	"TBool"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RecipientsResetRetries"
-				quid       	"383125230301"
-				documentation 	"Pure Virtual"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RecipientsIncreaseRetries"
-				quid       	"3831253502AD"
-				documentation 	"Pure Virtual"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "StoreL"
-				quid       	"3831255803B1"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RestoreL"
-				quid       	"3831255C03CB"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Entry"
-				quid       	"383125700171"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Scheduled"
-				quid       	"3831257302DE"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetScheduled"
-				quid       	"3831257D0057"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "Id"
-				quid       	"3831258102E8"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "OffPeak"
-				quid       	"3831258A02F5"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ScheduleDate"
-				quid       	"3831258E028C"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetScheduleDate"
-				quid       	"38312598015A"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SendingState"
-				quid       	"3832A62C01F8"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "SetSendingState"
-				quid       	"3832A6320305"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iEntry"
-				quid       	"383125AB0071"
-				type       	"TMsvEntry")
-			    (object ClassAttribute "iData"
-				quid       	"383125B801C5"
-				type       	"TMsvEntryScheduleData")))
-		    (object Class "TMsvSchedulePackage"
-			quid       	"3831294C0208"
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iId"
-				quid       	"383129620386"
-				type       	"TMsvId"
-				exportControl 	"Public")
-			    (object ClassAttribute "iCommandId"
-				quid       	"3831297401AB"
-				exportControl 	"Public")
-			    (object ClassAttribute "iParameter"
-				quid       	"38312981029A"
-				type       	"TBufC8<KMaxParameterLength>"
-				exportControl 	"Public")))
-		    (object Class "CScheduleBaseServerMtm"
-			quid       	"38312BAA0304"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"383139DD022E"
-				supplier   	"Logical View::MSG::CBaseServerMTM"
-				quidu      	"37BA8720023C"))
-			operations 	(list Operations
-			    (object Operation "SendScheduledL"
-				quid       	"383137BF02BB"
-				documentation 	"Pure Virtual"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "ScheduleL"
-				quid       	"383137C802DC"
-				documentation 	"Pure Virtual"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "RestoreScheduleSettingsL"
-				quid       	"383137D100C2"
-				documentation 	"Pure Virtual"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0)
-			    (object Operation "ConstructL"
-				quid       	"38313807011A"
-				documentation 	"Pure Virtual"
-				concurrency 	"Sequential"
-				opExportControl 	"Protected"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iScheduleSend"
-				quid       	"383137DF032F"
-				type       	"CMsvScheduleSend"
-				exportControl 	"Protected")))
-		    (object Association "$UNNAMED$30"
-			quid       	"383139630034"
-			roles      	(list role_list
-			    (object Role "$UNNAMED$31"
-				quid       	"3831396303A5"
-				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
-				quidu      	"37CAB901016F"
-				is_aggregate 	TRUE)
-			    (object Role "$UNNAMED$32"
-				quid       	"3831396303C3"
-				supplier   	"Logical View::SCHSEND::CMsvSendErrorActions"
-				quidu      	"380ACFCA026C")))
-		    (object Association "$UNNAMED$33"
-			quid       	"3832882603D7"
-			roles      	(list role_list
-			    (object Role "$UNNAMED$34"
-				quid       	"383288270194"
-				supplier   	"Logical View::SCHSEND::CMsvScheduledEntry"
-				quidu      	"3831245B0050"
-				is_aggregate 	TRUE)
-			    (object Role "$UNNAMED$35"
-				quid       	"3832882701B2"
-				supplier   	"Logical View::SCHSEND::TMsvScheduledSendData"
-				quidu      	"37D52D630383")))
-		    (object Association "$UNNAMED$36"
-			quid       	"3832B2AB018A"
-			roles      	(list role_list
-			    (object Role "$UNNAMED$37"
-				quid       	"3832B2AB02FD"
-				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
-				quidu      	"38312BAA0304"
-				is_navigable 	TRUE
-				is_aggregate 	TRUE)
-			    (object Role "$UNNAMED$38"
-				quid       	"3832B2AB031B"
-				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
-				quidu      	"37CAB901016F"
-				is_navigable 	TRUE)))
-		    (object Mechanism @127
-			logical_models 	(list unit_reference_list
-			    (object Object "Client"
-				quid       	"3833C72F019F"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"3833C757003E"
-					supplier   	"$UNNAMED$39"
-					quidu      	"3833C74503C7"
-					messages   	(list Messages
-					    (object Message "StartCommandL( )"
-						quid       	"3833C757003F"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"1"
-						ordinal    	0
-						quidu      	"37BA88F701E0"))))
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$39"
-				quid       	"3833C74503C7"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"3833C7620274"
-					supplier   	"$UNNAMED$40"
-					quidu      	"3833C7510374"
-					messages   	(list Messages
-					    (object Message "ScheduleL( )"
-						quid       	"3833C77A00CA"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"3"
-						ordinal    	2
-						quidu      	"37CAB92302AF")))
-				    (object Link
-					quid       	"3833C76B028B"
-					supplier   	"$UNNAMED$39"
-					quidu      	"3833C74503C7"
-					messages   	(list Messages
-					    (object Message "ScheduleL( )"
-						quid       	"3833C76B028C"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"2"
-						ordinal    	1
-						quidu      	"383137C802DC"))))
-				class      	"Logical View::SCHSEND::CScheduleBaseServerMtm"
-				quidu      	"38312BAA0304"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$40"
-				quid       	"3833C7510374"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"3833C7C4015D"
-					supplier   	"$UNNAMED$40"
-					quidu      	"3833C7510374"
-					messages   	(list Messages
-					    (object Message "GetMessageL(TMsvId)"
-						quid       	"3833C7C4015E"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"4"
-						ordinal    	3
-						quidu      	"383123C802B2")
-					    (object Message "DeleteScheduleForEntryL( )"
-						quid       	"3833CD33008B"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"5"
-						ordinal    	4
-						quidu      	"3833CD430228")
-					    (object Message "SendingCompleteL( )"
-						quid       	"3833CD6C030D"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"7"
-						ordinal    	6
-						quidu      	"380ED7670011")
-					    (object Message "DoScheduleL( )"
-						quid       	"3833CECF0119"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"8"
-						ordinal    	7
-						quidu      	"3833CEBB035F")
-					    (object Message "CreateScheduleL( )"
-						quid       	"3833D1A402C0"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"9"
-						ordinal    	8
-						quidu      	"3833C993019F")
-					    (object Message "ScheduleEntryL( )"
-						quid       	"3833D1B40205"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"11"
-						ordinal    	10
-						quidu      	"3833C91300A0")))
-				    (object Link
-					quid       	"3833C87E0236"
-					supplier   	"$UNNAMED$41"
-					quidu      	"3833C80E025D"
-					messages   	(list Messages
-					    (object Message "DeleteTask( )"
-						quid       	"3833CDA602A3"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"6"
-						ordinal    	5
-						quidu      	"37C412850039")
-					    (object Message "CreatePersistentSchedule( )"
-						quid       	"3833D1AD0129"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"10"
-						ordinal    	9
-						quidu      	"37C4128400A6")
-					    (object Message "ScheduleTask( )"
-						quid       	"3833D1BB0183"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"12"
-						ordinal    	11
-						quidu      	"37C4137A01AE"))))
-				class      	"Logical View::SCHSEND::CMsvScheduleSend"
-				quidu      	"37CAB901016F"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$41"
-				quid       	"3833C80E025D"
-				class      	"Logical View::schsvr::RScheduler"
-				quidu      	"37C412680178"
-				persistence 	"Transient"
-				multi      	FALSE))))
-		logical_presentations 	(list unit_reference_list
-		    (object ClassDiagram "Scheduled Sending"
-			quid       	"37D522B800D3"
-			title      	"Scheduled Sending"
-			zoom       	75
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	519
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::MSG::TMsvEntry" @128
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(2449, 3069)
-				label      	(object ItemLabel
-				    Parent_View 	@128
-				    location   	(2287, 2845)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	324
-				    justify    	0
-				    label      	"TMsvEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37C414BE03D1"
-				width      	342
-				height     	472
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::TMsvScheduledSendData" @129
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(527, 3162)
-				label      	(object ItemLabel
-				    Parent_View 	@129
-				    location   	(274, 2838)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	506
-				    justify    	0
-				    label      	"TMsvScheduledSendData")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37D52D630383"
-				width      	524
-				height     	672
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @130
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1643, 3162)
-				label      	(object ItemLabel
-				    Parent_View 	@130
-				    location   	(1335, 2737)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	616
-				    justify    	0
-				    label      	"CMsvScheduledEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3831245B0050"
-				width      	634
-				height     	874
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::TMsvOffPeakTime" @131
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(2542, 2232)
-				label      	(object ItemLabel
-				    Parent_View 	@131
-				    location   	(2178, 1801)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	728
-				    justify    	0
-				    label      	"TMsvOffPeakTime")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACD9B034F"
-				width      	746
-				height     	886
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvOffPeakTimes" @132
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1612, 2232)
-				label      	(object ItemLabel
-				    Parent_View 	@132
-				    location   	(1270, 2003)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	684
-				    justify    	0
-				    label      	"CMsvOffPeakTimes")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACDA80072"
-				width      	702
-				height     	482
-				annotation 	8)
-			    (object AssociationViewNew "$UNNAMED$6" @133
-				location   	(2065, 2232)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"380ACF7A0195"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$8" @134
-					Parent_View 	@133
-					location   	(1445, -868)
-					label      	(object SegLabel @135
-					    Parent_View 	@134
-					    location   	(2147, 2191)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	0)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380ACF7B03E5"
-					client     	@133
-					supplier   	@131
-					line_style 	0)
-				    (object RoleView "$UNNAMED$7" @136
-					Parent_View 	@133
-					location   	(1445, -868)
-					label      	(object SegLabel @137
-					    Parent_View 	@136
-					    location   	(1983, 2191)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	1)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380ACF7B03BD"
-					client     	@133
-					supplier   	@132
-					line_style 	0)))
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSettings" @138
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(558, 806)
-				label      	(object ItemLabel
-				    Parent_View 	@138
-				    location   	(31, 38)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	1054
-				    justify    	0
-				    label      	"CMsvScheduleSettings")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37D5214C0300"
-				width      	1072
-				height     	1560
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::TMsvSendErrorAction" @139
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1674, 341)
-				label      	(object ItemLabel
-				    Parent_View 	@139
-				    location   	(1261, 42)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	826
-				    justify    	0
-				    label      	"TMsvSendErrorAction")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACFBF02B6"
-				width      	844
-				height     	622
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @140
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(558, 2232)
-				label      	(object ItemLabel
-				    Parent_View 	@140
-				    location   	(202, 1758)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	712
-				    justify    	0
-				    label      	"CMsvScheduleSend")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37CAB901016F"
-				width      	730
-				height     	972
-				annotation 	8)
-			    (object AssociationViewNew "$UNNAMED$9" @141
-				location   	(1091, 2232)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"380ACF86025A"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$11" @142
-					Parent_View 	@141
-					location   	(657, -31)
-					label      	(object SegLabel @143
-					    Parent_View 	@142
-					    location   	(1225, 2274)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	1)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380ACF870111"
-					client     	@141
-					supplier   	@132
-					line_style 	0)
-				    (object RoleView "$UNNAMED$10" @144
-					Parent_View 	@141
-					location   	(657, -31)
-					label      	(object SegLabel @145
-					    Parent_View 	@144
-					    location   	(958, 2274)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	0)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380ACF8700D5"
-					client     	@141
-					supplier   	@140
-					line_style 	0)))
-			    (object AssociationViewNew "$UNNAMED$3" @146
-				location   	(558, 1665)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"37D521FE03E3"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$5" @147
-					Parent_View 	@146
-					location   	(124, -598)
-					label      	(object SegLabel @148
-					    Parent_View 	@147
-					    location   	(517, 1602)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	0)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"37D52200006A"
-					client     	@146
-					supplier   	@138
-					line_style 	0)
-				    (object RoleView "$UNNAMED$4" @149
-					Parent_View 	@146
-					location   	(124, -598)
-					label      	(object SegLabel @150
-					    Parent_View 	@149
-					    location   	(517, 1729)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	1)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"37D522000038"
-					client     	@146
-					supplier   	@140
-					line_style 	0)))
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvSendErrorActions" @151
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1674, 1302)
-				label      	(object ItemLabel
-				    Parent_View 	@151
-				    location   	(1245, 877)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	858
-				    justify    	0
-				    label      	"CMsvSendErrorActions")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACFCA026C"
-				width      	876
-				height     	874
-				annotation 	8)
-			    (object AssociationViewNew "$UNNAMED$12" @152
-				location   	(1674, 758)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"380B36C9011B"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$14" @153
-					Parent_View 	@152
-					location   	(186, -327)
-					label      	(object SegLabel @154
-					    Parent_View 	@153
-					    location   	(1716, 673)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	1)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380B36C902AC"
-					client     	@152
-					supplier   	@139
-					line_style 	0)
-				    (object RoleView "$UNNAMED$13" @155
-					Parent_View 	@152
-					location   	(186, -327)
-					label      	(object SegLabel @156
-					    Parent_View 	@155
-					    location   	(1716, 843)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	0)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380B36C90266"
-					client     	@152
-					supplier   	@151
-					line_style 	0)))
-			    (object AssociationViewNew "$UNNAMED$30" @157
-				location   	(1079, 1795)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383139630034"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$31" @158
-					Parent_View 	@157
-					location   	(-688, 307)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3831396303A5"
-					client     	@157
-					supplier   	@140
-					line_style 	0)
-				    (object RoleView "$UNNAMED$32" @159
-					Parent_View 	@157
-					location   	(-688, 307)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3831396303C3"
-					client     	@157
-					supplier   	@151
-					line_style 	0)))))
-		    (object ClassDiagram "CMsvScheduleSend"
-			quid       	"3832735803C5"
-			title      	"CMsvScheduleSend"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @160
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(589, 899)
-				label      	(object ItemLabel
-				    Parent_View 	@160
-				    location   	(218, 418)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	742
-				    justify    	0
-				    label      	"CMsvScheduleSend")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37CAB901016F"
-				width      	760
-				height     	986
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @161
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(589, 155)
-				label      	(object ItemLabel
-				    Parent_View 	@161
-				    location   	(441, 81)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	296
-				    justify    	0
-				    label      	"CBase")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3832725B0367"
-				width      	314
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @162
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832736C019D"
-				client     	@160
-				supplier   	@161
-				line_style 	0)
-			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduleSend" @163
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1488, 899)
-				label      	(object ItemLabel
-				    Parent_View 	@163
-				    location   	(1290, 825)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	396
-				    justify    	0
-				    label      	"CFaxScheduleSend")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"383270B50049"
-				width      	414
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @164
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383271F9032A"
-				client     	@163
-				supplier   	@160
-				line_style 	0)))
-		    (object ClassDiagram "CMsvScheduleSettings"
-			quid       	"38327E2602FA"
-			title      	"CMsvScheduleSettings"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSettings" @165
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1302, 806)
-				label      	(object ItemLabel
-				    Parent_View 	@165
-				    location   	(759, 50)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	1086
-				    justify    	0
-				    label      	"CMsvScheduleSettings")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37D5214C0300"
-				width      	1104
-				height     	1536
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @166
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(341, 806)
-				label      	(object ItemLabel
-				    Parent_View 	@166
-				    location   	(193, 732)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	296
-				    justify    	0
-				    label      	"CBase")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3832725B0367"
-				width      	314
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @167
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"38327E410367"
-				client     	@165
-				supplier   	@166
-				line_style 	0)))
-		    (object ClassDiagram "ScheduleData and ScheduledEntry"
-			quid       	"383287E102CA"
-			title      	"ScheduleData and ScheduledEntry"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	600
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @168
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1240, 775)
-				label      	(object ItemLabel
-				    Parent_View 	@168
-				    location   	(926, 369)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	628
-				    justify    	0
-				    label      	"CMsvScheduledEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3831245B0050"
-				width      	646
-				height     	836
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::TMsvScheduledSendData" @169
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(403, 775)
-				label      	(object ItemLabel
-				    Parent_View 	@169
-				    location   	(150, 444)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	506
-				    justify    	0
-				    label      	"TMsvScheduledSendData")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37D52D630383"
-				width      	524
-				height     	686
-				annotation 	8)
-			    (object AssociationViewNew "$UNNAMED$33" @170
-				location   	(790, 775)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832882603D7"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$34" @171
-					Parent_View 	@170
-					location   	(449, 279)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"383288270194"
-					client     	@170
-					supplier   	@168
-					line_style 	0)
-				    (object RoleView "$UNNAMED$35" @172
-					Parent_View 	@170
-					location   	(449, 279)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3832882701B2"
-					client     	@170
-					supplier   	@169
-					line_style 	0)))
-			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @173
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1240, 124)
-				label      	(object ItemLabel
-				    Parent_View 	@173
-				    location   	(1092, 50)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	296
-				    justify    	0
-				    label      	"CBase")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3832725B0367"
-				width      	314
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @174
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832884602CF"
-				client     	@168
-				supplier   	@173
-				line_style 	0)
-			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduledEntry" @175
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(2015, 775)
-				label      	(object ItemLabel
-				    Parent_View 	@175
-				    location   	(1807, 701)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	416
-				    justify    	0
-				    label      	"CFaxScheduledEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"383270CC0331"
-				width      	434
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @176
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832723F0353"
-				client     	@175
-				supplier   	@168
-				line_style 	0)))
-		    (object ClassDiagram "CMsvOffPeakTime"
-			quid       	"383292A602EC"
-			title      	"CMsvOffPeakTime"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::SCHSEND::TMsvOffPeakTime" @177
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1364, 806)
-				label      	(object ItemLabel
-				    Parent_View 	@177
-				    location   	(1000, 375)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	728
-				    justify    	0
-				    label      	"TMsvOffPeakTime")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACD9B034F"
-				width      	746
-				height     	886
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvOffPeakTimes" @178
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(465, 806)
-				label      	(object ItemLabel
-				    Parent_View 	@178
-				    location   	(236, 600)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	458
-				    justify    	0
-				    label      	"CMsvOffPeakTimes")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACDA80072"
-				width      	476
-				height     	436
-				annotation 	8)
-			    (object AssociationViewNew "$UNNAMED$6" @179
-				location   	(846, 806)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"380ACF7A0195"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$8" @180
-					Parent_View 	@179
-					location   	(381, 0)
-					label      	(object SegLabel @181
-					    Parent_View 	@180
-					    location   	(983, 765)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	0)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380ACF7B03E5"
-					client     	@179
-					supplier   	@177
-					line_style 	0)
-				    (object RoleView "$UNNAMED$7" @182
-					Parent_View 	@179
-					location   	(381, 0)
-					label      	(object SegLabel @183
-					    Parent_View 	@182
-					    location   	(709, 765)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	1)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380ACF7B03BD"
-					client     	@179
-					supplier   	@178
-					line_style 	0)))))
-		    (object ClassDiagram "CMsvSendErrorAction"
-			quid       	"38329DD00332"
-			title      	"CMsvSendErrorAction"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::SCHSEND::TMsvSendErrorAction" @184
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1550, 806)
-				label      	(object ItemLabel
-				    Parent_View 	@184
-				    location   	(1116, 500)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	868
-				    justify    	0
-				    label      	"TMsvSendErrorAction")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACFBF02B6"
-				width      	886
-				height     	636
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvSendErrorActions" @185
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(465, 806)
-				label      	(object ItemLabel
-				    Parent_View 	@185
-				    location   	(15, 425)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	900
-				    justify    	0
-				    label      	"CMsvSendErrorActions")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"380ACFCA026C"
-				width      	918
-				height     	786
-				annotation 	8)
-			    (object AssociationViewNew "$UNNAMED$12" @186
-				location   	(1015, 806)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"380B36C9011B"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$14" @187
-					Parent_View 	@186
-					location   	(519, 0)
-					label      	(object SegLabel @188
-					    Parent_View 	@187
-					    location   	(1091, 765)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	0)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380B36C902AC"
-					client     	@186
-					supplier   	@184
-					line_style 	0)
-				    (object RoleView "$UNNAMED$13" @189
-					Parent_View 	@186
-					location   	(519, 0)
-					label      	(object SegLabel @190
-					    Parent_View 	@189
-					    location   	(938, 765)
-					    hidden     	TRUE
-					    anchor     	1
-					    anchor_loc 	1
-					    nlines     	1
-					    max_width  	450
-					    justify    	0
-					    label      	""
-					    pctDist    	0.800000
-					    height     	42
-					    orientation 	1)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"380B36C90266"
-					client     	@186
-					supplier   	@185
-					line_style 	0)))
-			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @191
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(465, 124)
-				label      	(object ItemLabel
-				    Parent_View 	@191
-				    location   	(317, 50)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	296
-				    justify    	0
-				    label      	"CBase")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3832725B0367"
-				width      	314
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @192
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"38329DE601F3"
-				client     	@185
-				supplier   	@191
-				line_style 	0)))
-		    (object ClassDiagram "MsvScheduledEntry"
-			quid       	"3832A24C03E7"
-			title      	"MsvScheduledEntry"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @193
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(496, 837)
-				label      	(object ItemLabel
-				    Parent_View 	@193
-				    location   	(182, 381)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	628
-				    justify    	0
-				    label      	"CMsvScheduledEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3831245B0050"
-				width      	646
-				height     	936
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @194
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(496, 155)
-				label      	(object ItemLabel
-				    Parent_View 	@194
-				    location   	(348, 81)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	296
-				    justify    	0
-				    label      	"CBase")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3832725B0367"
-				width      	314
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @195
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832884602CF"
-				client     	@193
-				supplier   	@194
-				line_style 	0)
-			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduledEntry" @196
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1333, 837)
-				label      	(object ItemLabel
-				    Parent_View 	@196
-				    location   	(1125, 763)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	416
-				    justify    	0
-				    label      	"CFaxScheduledEntry")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"383270CC0331"
-				width      	434
-				height     	172
-				annotation 	8)
-			    (object InheritView "" @197
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832723F0353"
-				client     	@196
-				supplier   	@193
-				line_style 	0)))
-		    (object ClassDiagram "ScheduleBaseServerMtm"
-			quid       	"3832B22700F4"
-			title      	"ScheduleBaseServerMtm"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduleSend" @198
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(1333, 1054)
-				label      	(object ItemLabel
-				    Parent_View 	@198
-				    location   	(1135, 980)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	396
-				    justify    	0
-				    label      	"CFaxScheduleSend")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"383270B50049"
-				width      	414
-				height     	172
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::FAXS::CFaxServerMTM" @199
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				location   	(496, 1054)
-				label      	(object ItemLabel
-				    Parent_View 	@199
-				    location   	(331, 979)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	330
-				    justify    	0
-				    label      	"CFaxServerMTM")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA871602B0"
-				width      	348
-				height     	174
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::MSG::CBaseServerMTM" @200
-				ShowCompartmentStereotypes 	TRUE
-				location   	(496, 248)
-				label      	(object ItemLabel
-				    Parent_View 	@200
-				    location   	(310, 173)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	372
-				    justify    	0
-				    label      	"CBaseServerMTM")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA8720023C"
-				width      	390
-				height     	174
-				annotation 	8
-				autoResize 	TRUE)
-			    (object ClassView "Class" "Logical View::SCHSEND::CScheduleBaseServerMtm" @201
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(496, 651)
-				label      	(object ItemLabel
-				    Parent_View 	@201
-				    location   	(134, 470)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	724
-				    justify    	0
-				    label      	"CScheduleBaseServerMtm")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"38312BAA0304"
-				width      	742
-				height     	386
-				annotation 	8)
-			    (object InheritView "" @202
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383139D200C0"
-				client     	@199
-				supplier   	@201
-				line_style 	0)
-			    (object InheritView "" @203
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383139DD022E"
-				client     	@201
-				supplier   	@200
-				line_style 	0)
-			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @204
-				ShowCompartmentStereotypes 	TRUE
-				location   	(1333, 651)
-				label      	(object ItemLabel
-				    Parent_View 	@204
-				    location   	(1129, 599)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	408
-				    justify    	0
-				    label      	"CMsvScheduleSend")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37CAB901016F"
-				width      	426
-				height     	128
-				annotation 	8
-				autoResize 	TRUE)
-			    (object InheritView "" @205
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"383271F9032A"
-				client     	@198
-				supplier   	@204
-				line_style 	0)
-			    (object AssociationViewNew "$UNNAMED$36" @206
-				location   	(993, 651)
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3832B2AB018A"
-				roleview_list 	(list RoleViews
-				    (object RoleView "$UNNAMED$37" @207
-					Parent_View 	@206
-					location   	(466, -496)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3832B2AB02FD"
-					client     	@206
-					supplier   	@201
-					line_style 	0)
-				    (object RoleView "$UNNAMED$38" @208
-					Parent_View 	@206
-					location   	(466, -496)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3832B2AB031B"
-					client     	@206
-					supplier   	@204
-					line_style 	0)))))
-		    (object InteractionDiagram "PerfectScheduling"
-			mechanism_ref 	@127
-			quid       	"37C4124D0273"
-			title      	"PerfectScheduling"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	261
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object InterObjView "Client" @209
-				location   	(465, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@209
-				    location   	(465, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"Client")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833C72F019F"
-				width      	300
-				height     	2775
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @210
-				    location   	(465, 496)
-				    line_color 	3342489
-				    InterObjView 	@209
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$39" @211
-				location   	(992, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@211
-				    location   	(992, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	500
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833C74503C7"
-				width      	518
-				height     	2775
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @212
-				    location   	(992, 496)
-				    line_color 	3342489
-				    InterObjView 	@211
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @213
-				    location   	(992, 620)
-				    line_color 	3342489
-				    InterObjView 	@211
-				    height     	213
-				    y_coord    	153
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @214
-				    location   	(992, 713)
-				    line_color 	3342489
-				    InterObjView 	@211
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @215
-				    location   	(992, 961)
-				    line_color 	3342489
-				    InterObjView 	@211
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$40" @216
-				location   	(1519, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@216
-				    location   	(1519, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	372
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833C7510374"
-				width      	390
-				height     	2775
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @217
-				    location   	(1519, 961)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @218
-				    location   	(1519, 1116)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @219
-				    location   	(1519, 1147)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @220
-				    location   	(1519, 1333)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @221
-				    location   	(1519, 1364)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @222
-				    location   	(1519, 1581)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @223
-				    location   	(1519, 1767)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @224
-				    location   	(1519, 1767)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @225
-				    location   	(1519, 1953)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @226
-				    location   	(1519, 1984)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @227
-				    location   	(1519, 2170)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @228
-				    location   	(1519, 2201)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @229
-				    location   	(1519, 2387)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @230
-				    location   	(1519, 2573)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @231
-				    location   	(1519, 2604)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @232
-				    location   	(1519, 2790)
-				    line_color 	3342489
-				    InterObjView 	@216
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$41" @233
-				location   	(2108, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@233
-				    location   	(2108, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833C80E025D"
-				width      	300
-				height     	2775
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @234
-				    location   	(2108, 1581)
-				    line_color 	3342489
-				    InterObjView 	@233
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @235
-				    location   	(2108, 2387)
-				    line_color 	3342489
-				    InterObjView 	@233
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @236
-				    location   	(2108, 2790)
-				    line_color 	3342489
-				    InterObjView 	@233
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE))
-			    (object InterMessView "" @237
-				location   	(31, 496)
-				label      	(object SegLabel @238
-				    Parent_View 	@237
-				    location   	(728, 452)
-				    quidu      	"3833C757003F"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	390
-				    justify    	0
-				    label      	"StartCommandL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@209
-				supplier   	@211
-				Focus_Src  	@210
-				Focus_Entry 	@212
-				origin     	(480, 496)
-				terminus   	(976, 496)
-				ordinal    	0)
-			    (object SelfMessView "" @239
-				location   	(31, 713)
-				label      	(object SegLabel @240
-				    Parent_View 	@239
-				    location   	(1083, 669)
-				    quidu      	"3833C76B028C"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	282
-				    justify    	0
-				    label      	"ScheduleL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@211
-				supplier   	@211
-				Focus_Src  	@213
-				Focus_Entry 	@214
-				origin     	(1008, 713)
-				terminus   	(1158, 713)
-				ordinal    	1)
-			    (object InterMessView "" @241
-				location   	(31, 961)
-				label      	(object SegLabel @242
-				    Parent_View 	@241
-				    location   	(1255, 917)
-				    quidu      	"3833C77A00CA"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	282
-				    justify    	0
-				    label      	"ScheduleL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@211
-				supplier   	@216
-				Focus_Src  	@215
-				Focus_Entry 	@217
-				origin     	(1007, 961)
-				terminus   	(1503, 961)
-				ordinal    	2)
-			    (object SelfMessView "" @243
-				location   	(31, 1147)
-				label      	(object SegLabel @244
-				    Parent_View 	@243
-				    location   	(1610, 1103)
-				    quidu      	"3833C7C4015E"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	462
-				    justify    	0
-				    label      	"GetMessageL(TMsvId)"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@216
-				Focus_Src  	@218
-				Focus_Entry 	@219
-				origin     	(1535, 1147)
-				terminus   	(1685, 1147)
-				ordinal    	3)
-			    (object SelfMessView "" @245
-				location   	(31, 1364)
-				label      	(object SegLabel @246
-				    Parent_View 	@245
-				    location   	(1610, 1320)
-				    quidu      	"3833CD33008B"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	557
-				    justify    	0
-				    label      	"DeleteScheduleForEntryL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@216
-				Focus_Src  	@220
-				Focus_Entry 	@221
-				origin     	(1535, 1364)
-				terminus   	(1685, 1364)
-				ordinal    	4)
-			    (object SelfMessView "" @247
-				location   	(31, 1767)
-				label      	(object SegLabel @248
-				    Parent_View 	@247
-				    location   	(1610, 1723)
-				    quidu      	"3833CD6C030D"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	445
-				    justify    	0
-				    label      	"SendingCompleteL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@216
-				Focus_Src  	@223
-				Focus_Entry 	@224
-				origin     	(1535, 1767)
-				terminus   	(1685, 1767)
-				ordinal    	6)
-			    (object InterMessView "" @249
-				location   	(31, 1581)
-				label      	(object SegLabel @250
-				    Parent_View 	@249
-				    location   	(1813, 1537)
-				    quidu      	"3833CDA602A3"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	295
-				    justify    	0
-				    label      	"DeleteTask( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@233
-				Focus_Src  	@222
-				Focus_Entry 	@234
-				origin     	(1534, 1581)
-				terminus   	(2092, 1581)
-				ordinal    	5)
-			    (object SelfMessView "" @251
-				location   	(31, 1984)
-				label      	(object SegLabel @252
-				    Parent_View 	@251
-				    location   	(1610, 1940)
-				    quidu      	"3833CECF0119"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	336
-				    justify    	0
-				    label      	"DoScheduleL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@216
-				Focus_Src  	@225
-				Focus_Entry 	@226
-				origin     	(1535, 1984)
-				terminus   	(1685, 1984)
-				ordinal    	7)
-			    (object SelfMessView "" @253
-				location   	(31, 2201)
-				label      	(object SegLabel @254
-				    Parent_View 	@253
-				    location   	(1610, 2157)
-				    quidu      	"3833D1A402C0"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	394
-				    justify    	0
-				    label      	"CreateScheduleL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@216
-				Focus_Src  	@227
-				Focus_Entry 	@228
-				origin     	(1535, 2201)
-				terminus   	(1685, 2201)
-				ordinal    	8)
-			    (object InterMessView "" @255
-				location   	(31, 2387)
-				label      	(object SegLabel @256
-				    Parent_View 	@255
-				    location   	(1813, 2343)
-				    quidu      	"3833D1AD0129"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	579
-				    justify    	0
-				    label      	"CreatePersistentSchedule( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@233
-				Focus_Src  	@229
-				Focus_Entry 	@235
-				origin     	(1534, 2387)
-				terminus   	(2092, 2387)
-				ordinal    	9)
-			    (object SelfMessView "" @257
-				location   	(31, 2604)
-				label      	(object SegLabel @258
-				    Parent_View 	@257
-				    location   	(1610, 2560)
-				    quidu      	"3833D1B40205"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	394
-				    justify    	0
-				    label      	"ScheduleEntryL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@216
-				Focus_Src  	@230
-				Focus_Entry 	@231
-				origin     	(1535, 2604)
-				terminus   	(1685, 2604)
-				ordinal    	10)
-			    (object InterMessView "" @259
-				location   	(31, 2790)
-				label      	(object SegLabel @260
-				    Parent_View 	@259
-				    location   	(1813, 2746)
-				    quidu      	"3833D1BB0183"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	363
-				    justify    	0
-				    label      	"ScheduleTask( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@216
-				supplier   	@233
-				Focus_Src  	@232
-				Focus_Entry 	@236
-				origin     	(1534, 2790)
-				terminus   	(2092, 2790)
-				ordinal    	11)))))
-	    (object Class_Category "schsvr"
-		quid       	"38170F130059"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "RScheduler"
-			quid       	"37C412680178"
-			operations 	(list Operations
-			    (object Operation "Register"
-				quid       	"37C4127A0110"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CreatePersistentSchedule"
-				quid       	"37C4128400A6"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "DeleteSchedule"
-				quid       	"37C4128401D2"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "DisableSchedule"
-				quid       	"37C4128402A4"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "EnableSchedule"
-				quid       	"37C412840377"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "DeleteTask"
-				quid       	"37C412850039"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "GetScheduleRefsL"
-				quid       	"37C4128500ED"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "GetScheduleL"
-				quid       	"37C4128501CA"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "GetTaskRefsL"
-				quid       	"37C4128502A6"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "GetTaskDataSizeL"
-				quid       	"37C412850378"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ScheduleTask"
-				quid       	"37C4137A01AE"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			language   	"C++")
-		    (object Class "CScheduledTask"
-			quid       	"3833D3AF029A"
-			operations 	(list Operations
-			    (object Operation "NewLC"
-				quid       	"3833D3C70399"
-				parameters 	(list Parameters
-				    (object Parameter "aReadStream"
-					type       	"RStoreReadStream"))
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))))
-		logical_presentations 	(list unit_reference_list))
-	    (object Class_Category "Epoc Generic"
-		quid       	"38170F220141"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "CActive"
-			quid       	"37BA85360133"
-			operations 	(list Operations
-			    (object Operation "SetActive"
-				quid       	"37BA87BA0388"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iStatus"
-				quid       	"3833D54900EB"
-				type       	"TRequestStatus"))
-			language   	"C++")
-		    (object Class "CArrayFixFlat<TMsvOffPeakTime>"
-			quid       	"380ACDCF0245"
-			language   	"C++")
-		    (object Class "CBase"
-			quid       	"3832725B0367"))
-		logical_presentations 	(list unit_reference_list))
-	    (object Class_Category "SCHEXE"
-		quid       	"3833D2A701C8"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class "CSendEXE"
-			quid       	"37CAB8EA02D5"
-			superclasses 	(list inheritance_relationship_list
-			    (object Inheritance_Relationship
-				quid       	"3833D4910028"
-				supplier   	"Logical View::Epoc Generic::CActive"
-				quidu      	"37BA85360133"))
-			operations 	(list Operations
-			    (object Operation "E32Main"
-				quid       	"37CAB95B01B5"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "ProcessFileL"
-				quid       	"3833D2EB01DA"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "RetrieveMessagesL"
-				quid       	"3833D359025A"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0)
-			    (object Operation "CallMtmL"
-				quid       	"3833D362036C"
-				concurrency 	"Sequential"
-				opExportControl 	"Public"
-				uid        	0))
-			class_attributes 	(list class_attribute_list
-			    (object ClassAttribute "iSendParameter"
-				quid       	"3833D41C0233"
-				type       	"TBufC8<512>")
-			    (object ClassAttribute "iSendCommand"
-				quid       	"3833D42302E7"
-				type       	"TInt")
-			    (object ClassAttribute "iSelection"
-				quid       	"3833D46900DF"
-				type       	"CMsvEntrySelection"))
-			language   	"C++")
-		    (object Mechanism @261
-			logical_models 	(list unit_reference_list
-			    (object Object "$UNNAMED$42"
-				quid       	"3833D4BA01F4"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"3833D4C30161"
-					supplier   	"$UNNAMED$43"
-					quidu      	"3833D4BF0089"
-					messages   	(list Messages
-					    (object Message "E32Main( )"
-						quid       	"3833D4C30162"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"1"
-						ordinal    	0
-						quidu      	"37CAB95B01B5"))))
-				class      	"Logical View::schsvr::RScheduler"
-				quidu      	"37C412680178"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$43"
-				quid       	"3833D4BF0089"
-				collaborators 	(list link_list
-				    (object Link
-					quid       	"3833D4C90123"
-					supplier   	"$UNNAMED$43"
-					quidu      	"3833D4BF0089"
-					messages   	(list Messages
-					    (object Message "ProcessFileL( )"
-						quid       	"3833D4C90124"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"2"
-						ordinal    	1
-						quidu      	"3833D2EB01DA")
-					    (object Message "RetrieveMessagesL( )"
-						quid       	"3833D4CD03B4"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"3"
-						ordinal    	2
-						quidu      	"3833D359025A")
-					    (object Message "CallMtmL( )"
-						quid       	"3833D4E80254"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"5"
-						ordinal    	4
-						quidu      	"3833D362036C")))
-				    (object Link
-					quid       	"3833D4D802E7"
-					supplier   	"$UNNAMED$44"
-					quidu      	"3833D4D400A7"
-					messages   	(list Messages
-					    (object Message "NewLC(RStoreReadStream)"
-						quid       	"3833D4D802E8"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"4"
-						ordinal    	3
-						quidu      	"3833D3C70399")))
-				    (object Link
-					quid       	"3833D4F8027F"
-					supplier   	"$UNNAMED$45"
-					quidu      	"3833D4F402F2"
-					messages   	(list Messages
-					    (object Message "OpenL( )"
-						quid       	"3833D4F80280"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"6"
-						ordinal    	5
-						quidu      	"3833D3840003")
-					    (object Message "TransferCommandL(iSelection, iSendCommandId, iSendParameter, iStatus)"
-						quid       	"3833D4FD02CD"
-						frequency  	"Aperiodic"
-						synchronization 	"Simple"
-						dir        	"FromClientToSupplier"
-						sequence   	"7"
-						ordinal    	6
-						Operation  	"TransferCommandL(CMsvEntrySelection&, TInt, TDesC8&, TRequestStatus)"
-						quidu      	"3833D37A0366"))))
-				class      	"Logical View::SCHEXE::CSendEXE"
-				quidu      	"37CAB8EA02D5"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$44"
-				quid       	"3833D4D400A7"
-				class      	"Logical View::schsvr::CScheduledTask"
-				quidu      	"3833D3AF029A"
-				persistence 	"Transient"
-				multi      	FALSE)
-			    (object Object "$UNNAMED$45"
-				quid       	"3833D4F402F2"
-				class      	"Logical View::MSG::CMsvSession"
-				quidu      	"3833D3690344"
-				persistence 	"Transient"
-				multi      	FALSE))))
-		logical_presentations 	(list unit_reference_list
-		    (object ClassDiagram "SCHEXE"
-			quid       	"3833D47B013F"
-			title      	"SCHEXE"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object ClassView "Class" "Logical View::SCHEXE::CSendEXE" @262
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(744, 837)
-				label      	(object ItemLabel
-				    Parent_View 	@262
-				    location   	(427, 606)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	634
-				    justify    	0
-				    label      	"CSendEXE")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37CAB8EA02D5"
-				width      	652
-				height     	486
-				annotation 	8)
-			    (object ClassView "Class" "Logical View::Epoc Generic::CActive" @263
-				ShowCompartmentStereotypes 	TRUE
-				IncludeAttribute 	TRUE
-				IncludeOperation 	TRUE
-				location   	(744, 217)
-				label      	(object ItemLabel
-				    Parent_View 	@263
-				    location   	(596, 113)
-				    fill_color 	13434879
-				    nlines     	1
-				    max_width  	296
-				    justify    	0
-				    label      	"CActive")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"37BA85360133"
-				width      	314
-				height     	232
-				annotation 	8)
-			    (object InheritView "" @264
-				stereotype 	TRUE
-				line_color 	3342489
-				quidu      	"3833D4910028"
-				client     	@262
-				supplier   	@263
-				line_style 	0)))
-		    (object InteractionDiagram "SCHEXE"
-			mechanism_ref 	@261
-			quid       	"3833D26E00A4"
-			title      	"SCHEXE"
-			zoom       	100
-			max_height 	28350
-			max_width  	21600
-			origin_x   	0
-			origin_y   	0
-			items      	(list diagram_item_list
-			    (object InterObjView "$UNNAMED$42" @265
-				location   	(465, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@265
-				    location   	(465, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833D4BA01F4"
-				width      	300
-				height     	1690
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @266
-				    location   	(465, 434)
-				    line_color 	3342489
-				    InterObjView 	@265
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$43" @267
-				location   	(899, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@267
-				    location   	(899, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833D4BF0089"
-				width      	300
-				height     	1690
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @268
-				    location   	(899, 434)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @269
-				    location   	(899, 620)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @270
-				    location   	(899, 651)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @271
-				    location   	(899, 868)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @272
-				    location   	(899, 899)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @273
-				    location   	(899, 1085)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @274
-				    location   	(899, 1271)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @275
-				    location   	(899, 1302)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	60
-				    y_coord    	0
-				    Nested     	TRUE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @276
-				    location   	(899, 1488)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	120
-				    y_coord    	60
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @277
-				    location   	(899, 1674)
-				    line_color 	3342489
-				    InterObjView 	@267
-				    height     	151
-				    y_coord    	91
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$44" @278
-				location   	(1240, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@278
-				    location   	(1240, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	320
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833D4D400A7"
-				width      	338
-				height     	1690
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @279
-				    location   	(1240, 1085)
-				    line_color 	3342489
-				    InterObjView 	@278
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE))
-			    (object InterObjView "$UNNAMED$45" @280
-				location   	(1581, 217)
-				font       	(object Font
-				    underline  	TRUE)
-				label      	(object ItemLabel
-				    Parent_View 	@280
-				    location   	(1581, 217)
-				    fill_color 	13434879
-				    anchor_loc 	1
-				    nlines     	2
-				    max_width  	282
-				    justify    	0
-				    label      	"")
-				icon_style 	"Icon"
-				line_color 	3342489
-				fill_color 	13434879
-				quidu      	"3833D4F402F2"
-				width      	300
-				height     	1690
-				icon_height 	0
-				icon_width 	0
-				icon_y_offset 	0
-				annotation 	1
-				Focus_Of_Control 	(object Focus_Of_Control "" @281
-				    location   	(1581, 1488)
-				    line_color 	3342489
-				    InterObjView 	@280
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE)
-				Focus_Of_Control 	(object Focus_Of_Control "" @282
-				    location   	(1581, 1705)
-				    line_color 	3342489
-				    InterObjView 	@280
-				    height     	60
-				    y_coord    	0
-				    Nested     	FALSE))
-			    (object InterMessView "" @283
-				location   	(31, 434)
-				label      	(object SegLabel @284
-				    Parent_View 	@283
-				    location   	(681, 390)
-				    quidu      	"3833D4C30162"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	244
-				    justify    	0
-				    label      	"E32Main( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@265
-				supplier   	@267
-				Focus_Src  	@266
-				Focus_Entry 	@268
-				origin     	(480, 434)
-				terminus   	(883, 434)
-				ordinal    	0)
-			    (object SelfMessView "" @285
-				location   	(31, 651)
-				label      	(object SegLabel @286
-				    Parent_View 	@285
-				    location   	(990, 607)
-				    quidu      	"3833D4C90124"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	322
-				    justify    	0
-				    label      	"ProcessFileL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@267
-				supplier   	@267
-				Focus_Src  	@269
-				Focus_Entry 	@270
-				origin     	(915, 651)
-				terminus   	(1065, 651)
-				ordinal    	1)
-			    (object SelfMessView "" @287
-				location   	(31, 899)
-				label      	(object SegLabel @288
-				    Parent_View 	@287
-				    location   	(990, 855)
-				    quidu      	"3833D4CD03B4"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	438
-				    justify    	0
-				    label      	"RetrieveMessagesL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@267
-				supplier   	@267
-				Focus_Src  	@271
-				Focus_Entry 	@272
-				origin     	(915, 899)
-				terminus   	(1065, 899)
-				ordinal    	2)
-			    (object InterMessView "" @289
-				location   	(31, 1085)
-				label      	(object SegLabel @290
-				    Parent_View 	@289
-				    location   	(1069, 1041)
-				    quidu      	"3833D4D802E8"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	551
-				    justify    	0
-				    label      	"NewLC(RStoreReadStream)"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@267
-				supplier   	@278
-				Focus_Src  	@273
-				Focus_Entry 	@279
-				origin     	(914, 1085)
-				terminus   	(1224, 1085)
-				ordinal    	3)
-			    (object SelfMessView "" @291
-				location   	(31, 1302)
-				label      	(object SegLabel @292
-				    Parent_View 	@291
-				    location   	(990, 1258)
-				    quidu      	"3833D4E80254"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	257
-				    justify    	0
-				    label      	"CallMtmL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@267
-				supplier   	@267
-				Focus_Src  	@274
-				Focus_Entry 	@275
-				origin     	(915, 1302)
-				terminus   	(1065, 1302)
-				ordinal    	4)
-			    (object InterMessView "" @293
-				location   	(31, 1488)
-				label      	(object SegLabel @294
-				    Parent_View 	@293
-				    location   	(1239, 1444)
-				    quidu      	"3833D4F80280"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	203
-				    justify    	0
-				    label      	"OpenL( )"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@267
-				supplier   	@280
-				Focus_Src  	@276
-				Focus_Entry 	@281
-				origin     	(914, 1488)
-				terminus   	(1565, 1488)
-				ordinal    	5)
-			    (object InterMessView "" @295
-				location   	(31, 1705)
-				label      	(object SegLabel @296
-				    Parent_View 	@295
-				    location   	(1239, 1661)
-				    quidu      	"3833D4FD02CD"
-				    anchor_loc 	1
-				    nlines     	1
-				    max_width  	1424
-				    justify    	0
-				    label      	"TransferCommandL(iSelection, iSendCommandId, iSendParameter, iStatus)"
-				    pctDist    	0.500000
-				    height     	45
-				    orientation 	0)
-				line_color 	3342489
-				client     	@267
-				supplier   	@280
-				Focus_Src  	@277
-				Focus_Entry 	@282
-				origin     	(914, 1705)
-				terminus   	(1565, 1705)
-				ordinal    	6)))))
-	    (object Class_Category "SMSMTM"
-		quid       	"383994880157"
-		exportControl 	"Public"
-		logical_models 	(list unit_reference_list
-		    (object Class_Category "SMSS"
-			quid       	"3839948E02F1"
-			exportControl 	"Public"
-			logical_models 	(list unit_reference_list
-			    (object Class "CSmsServerMtm"
-				quid       	"3839949603B0"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"3839953501B0"
-					supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
-					quidu      	"38312BAA0304")))
-			    (object Class "CSmsOutboxSend"
-				quid       	"383994A4025C")
-			    (object Class "CSmsSendSession"
-				quid       	"383994AF0244")
-			    (object Class "CSmsSend"
-				quid       	"383994BE01FF")
-			    (object Class "CSmsRecipientSend"
-				quid       	"383994CB0045")
-			    (object Class "CSmsTextRecipientSend"
-				quid       	"383994D5034D"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"3839955A00AF"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
-					quidu      	"383994CB0045")))
-			    (object Class "CSmsWapRecipientSend"
-				quid       	"383994E70168"
-				superclasses 	(list inheritance_relationship_list
-				    (object Inheritance_Relationship
-					quid       	"3839955C012A"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
-					quidu      	"383994CB0045")))
-			    (object Association "$UNNAMED$46"
-				quid       	"38399566019D"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$47"
-					quid       	"3839956603E1"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
-					quidu      	"383994CB0045"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)
-				    (object Role "$UNNAMED$48"
-					quid       	"3839956603E2"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
-					quidu      	"383994AF0244")))
-			    (object Association "$UNNAMED$49"
-				quid       	"3839956F031C"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$50"
-					quid       	"3839957000ED"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
-					quidu      	"383994AF0244"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)
-				    (object Role "$UNNAMED$51"
-					quid       	"3839957000F7"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
-					quidu      	"383994CB0045"
-					is_navigable 	TRUE)))
-			    (object Association "$UNNAMED$52"
-				quid       	"3839958503D2"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$53"
-					quid       	"3839958601DF"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
-					quidu      	"383994BE01FF")
-				    (object Role "$UNNAMED$54"
-					quid       	"3839958601E9"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
-					quidu      	"383994CB0045"
-					is_navigable 	TRUE)))
-			    (object Association "$UNNAMED$55"
-				quid       	"383995D90242"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$56"
-					quid       	"383995DA00B3"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
-					quidu      	"383994BE01FF"
-					is_navigable 	TRUE)
-				    (object Role "$UNNAMED$57"
-					quid       	"383995DA00BD"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
-					quidu      	"383994AF0244"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)))
-			    (object Association "$UNNAMED$58"
-				quid       	"383996320088"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$59"
-					quid       	"38399632027C"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
-					quidu      	"383994A4025C"
-					is_navigable 	TRUE)
-				    (object Role "$UNNAMED$60"
-					quid       	"383996320286"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
-					quidu      	"383994AF0244"
-					is_aggregate 	TRUE)))
-			    (object Association "$UNNAMED$61"
-				quid       	"3839963900A6"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$62"
-					quid       	"38399639031D"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
-					quidu      	"383994AF0244"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)
-				    (object Role "$UNNAMED$63"
-					quid       	"383996390331"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
-					quidu      	"383994A4025C"
-					is_navigable 	TRUE)))
-			    (object Association "$UNNAMED$64"
-				quid       	"38399648006B"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$65"
-					quid       	"3839964901A3"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
-					quidu      	"383994AF0244"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)
-				    (object Role "$UNNAMED$66"
-					quid       	"3839964901B7"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
-					quidu      	"383994A4025C")))
-			    (object Association "$UNNAMED$67"
-				quid       	"3839965003A2"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$68"
-					quid       	"38399651026D"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
-					quidu      	"383994A4025C"
-					is_aggregate 	TRUE)
-				    (object Role "$UNNAMED$69"
-					quid       	"383996510281"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
-					quidu      	"383994AF0244")))
-			    (object Association "$UNNAMED$70"
-				quid       	"3839966601D7"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$71"
-					quid       	"383996670142"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsServerMtm"
-					quidu      	"3839949603B0"
-					is_navigable 	TRUE)
-				    (object Role "$UNNAMED$72"
-					quid       	"383996670143"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
-					quidu      	"383994A4025C"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)))
-			    (object Association "$UNNAMED$73"
-				quid       	"3839967C00B6"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$74"
-					quid       	"3839967C02FB"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsServerMtm"
-					quidu      	"3839949603B0"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)
-				    (object Role "$UNNAMED$75"
-					quid       	"3839967C0305"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
-					quidu      	"383994A4025C")))
-			    (object Association "$UNNAMED$76"
-				quid       	"3839969E0033"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$77"
-					quid       	"3839969E01D7"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
-					quidu      	"383994A4025C")
-				    (object Role "$UNNAMED$78"
-					quid       	"3839969E01F5"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsServerMtm"
-					quidu      	"3839949603B0"
-					is_aggregate 	TRUE)))
-			    (object Association "$UNNAMED$79"
-				quid       	"383996E700A6"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$80"
-					quid       	"383996E702E1"
-					supplier   	"Logical View::SMSMTM::SMCM::CSmsHeader"
-					quidu      	"383996BD00A5"
-					is_navigable 	TRUE
-					is_aggregate 	TRUE)
-				    (object Role "$UNNAMED$81"
-					quid       	"383996E702E2"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
-					quidu      	"383994BE01FF")))
-			    (object Association "$UNNAMED$82"
-				quid       	"383996ED00F5"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$83"
-					quid       	"383996ED02CB"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
-					quidu      	"383994BE01FF"
-					is_navigable 	TRUE)
-				    (object Role "$UNNAMED$84"
-					quid       	"383996ED02DF"
-					supplier   	"Logical View::SMSMTM::SMCM::CSmsHeader"
-					quidu      	"383996BD00A5"
-					is_aggregate 	TRUE)))
-			    (object Association "$UNNAMED$85"
-				quid       	"383996F102F9"
-				roles      	(list role_list
-				    (object Role "$UNNAMED$86"
-					quid       	"383996F2011A"
-					supplier   	"Logical View::SMSMTM::SMCM::CSmsHeader"
-					quidu      	"383996BD00A5")
-				    (object Role "$UNNAMED$87"
-					quid       	"383996F2012E"
-					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
-					quidu      	"383994BE01FF"
-					is_aggregate 	TRUE))))
-			logical_presentations 	(list unit_reference_list
-			    (object ClassDiagram "SMSS"
-				quid       	"383994F40102"
-				title      	"SMSS"
-				zoom       	100
-				max_height 	28350
-				max_width  	21600
-				origin_x   	0
-				origin_y   	225
-				items      	(list diagram_item_list
-				    (object ClassView "Class" "Logical View::SCHSEND::CScheduleBaseServerMtm" @297
-					ShowCompartmentStereotypes 	TRUE
-					location   	(930, 465)
-					label      	(object ItemLabel
-					    Parent_View 	@297
-					    location   	(672, 390)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	516
-					    justify    	0
-					    label      	"CScheduleBaseServerMtm")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"38312BAA0304"
-					width      	534
-					height     	174
-					annotation 	8
-					autoResize 	TRUE)
-				    (object ClassView "Class" "Logical View::MSG::CBaseServerMTM" @298
-					ShowCompartmentStereotypes 	TRUE
-					location   	(930, 155)
-					label      	(object ItemLabel
-					    Parent_View 	@298
-					    location   	(744, 80)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	372
-					    justify    	0
-					    label      	"CBaseServerMTM")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"37BA8720023C"
-					width      	390
-					height     	174
-					annotation 	8
-					autoResize 	TRUE)
-				    (object InheritView "" @299
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"383139DD022E"
-					client     	@297
-					supplier   	@298
-					line_style 	0)
-				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsTextRecipientSend" @300
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(341, 2015)
-					label      	(object ItemLabel
-					    Parent_View 	@300
-					    location   	(101, 1964)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	480
-					    justify    	0
-					    label      	"CSmsTextRecipientSend")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"383994D5034D"
-					width      	498
-					height     	126
-					annotation 	8)
-				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsWapRecipientSend" @301
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(992, 2015)
-					label      	(object ItemLabel
-					    Parent_View 	@301
-					    location   	(748, 1964)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	488
-					    justify    	0
-					    label      	"CSmsWapRecipientSend")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"383994E70168"
-					width      	506
-					height     	126
-					annotation 	8)
-				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsServerMtm" @302
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(930, 775)
-					label      	(object ItemLabel
-					    Parent_View 	@302
-					    location   	(753, 724)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	354
-					    justify    	0
-					    label      	"CSmsServerMtm")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"3839949603B0"
-					width      	372
-					height     	126
-					annotation 	8)
-				    (object InheritView "" @303
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3839953501B0"
-					client     	@302
-					supplier   	@297
-					line_style 	0)
-				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsOutboxSend" @304
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(930, 1116)
-					label      	(object ItemLabel
-					    Parent_View 	@304
-					    location   	(747, 1065)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	366
-					    justify    	0
-					    label      	"CSmsOutboxSend")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"383994A4025C"
-					width      	384
-					height     	126
-					annotation 	8)
-				    (object AssociationViewNew "$UNNAMED$76" @305
-					location   	(930, 945)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3839969E0033"
-					roleview_list 	(list RoleViews
-					    (object RoleView "$UNNAMED$77" @306
-						Parent_View 	@305
-						location   	(0, 170)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"3839969E01D7"
-						client     	@305
-						supplier   	@304
-						line_style 	0)
-					    (object RoleView "$UNNAMED$78" @307
-						Parent_View 	@305
-						location   	(0, 170)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"3839969E01F5"
-						client     	@305
-						supplier   	@302
-						line_style 	0)))
-				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsRecipientSend" @308
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(589, 1736)
-					label      	(object ItemLabel
-					    Parent_View 	@308
-					    location   	(387, 1685)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	404
-					    justify    	0
-					    label      	"CSmsRecipientSend")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"383994CB0045"
-					width      	422
-					height     	126
-					annotation 	8)
-				    (object InheritView "" @309
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3839955A00AF"
-					client     	@300
-					supplier   	@308
-					line_style 	0)
-				    (object InheritView "" @310
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3839955C012A"
-					client     	@301
-					supplier   	@308
-					line_style 	0)
-				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsSendSession" @311
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(930, 1426)
-					label      	(object ItemLabel
-					    Parent_View 	@311
-					    location   	(738, 1375)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	384
-					    justify    	0
-					    label      	"CSmsSendSession")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"383994AF0244"
-					width      	402
-					height     	126
-					annotation 	8)
-				    (object AssociationViewNew "$UNNAMED$49" @312
-					location   	(756, 1580)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3839956F031C"
-					roleview_list 	(list RoleViews
-					    (object RoleView "$UNNAMED$50" @313
-						Parent_View 	@312
-						location   	(167, -156)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"3839957000ED"
-						client     	@312
-						supplier   	@311
-						line_style 	0)
-					    (object RoleView "$UNNAMED$51" @314
-						Parent_View 	@312
-						location   	(167, -156)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"3839957000F7"
-						client     	@312
-						supplier   	@308
-						line_style 	0)))
-				    (object AssociationViewNew "$UNNAMED$67" @315
-					location   	(930, 1270)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3839965003A2"
-					roleview_list 	(list RoleViews
-					    (object RoleView "$UNNAMED$68" @316
-						Parent_View 	@315
-						location   	(0, -156)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"38399651026D"
-						client     	@315
-						supplier   	@304
-						line_style 	0)
-					    (object RoleView "$UNNAMED$69" @317
-						Parent_View 	@315
-						location   	(0, -156)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"383996510281"
-						client     	@315
-						supplier   	@311
-						line_style 	0)))
-				    (object ClassView "Class" "Logical View::SMSMTM::SMCM::CSmsHeader" @318
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(1860, 1736)
-					label      	(object ItemLabel
-					    Parent_View 	@318
-					    location   	(1724, 1662)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	272
-					    justify    	0
-					    label      	"CSmsHeader")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"383996BD00A5"
-					width      	290
-					height     	172
-					annotation 	8)
-				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsSend" @319
-					ShowCompartmentStereotypes 	TRUE
-					IncludeAttribute 	TRUE
-					IncludeOperation 	TRUE
-					location   	(1302, 1736)
-					label      	(object ItemLabel
-					    Parent_View 	@319
-					    location   	(1179, 1685)
-					    fill_color 	13434879
-					    nlines     	1
-					    max_width  	246
-					    justify    	0
-					    label      	"CSmsSend")
-					icon_style 	"Icon"
-					line_color 	3342489
-					fill_color 	13434879
-					quidu      	"383994BE01FF"
-					width      	264
-					height     	126
-					annotation 	8)
-				    (object AssociationViewNew "$UNNAMED$52" @320
-					location   	(984, 1736)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"3839958503D2"
-					roleview_list 	(list RoleViews
-					    (object RoleView "$UNNAMED$53" @321
-						Parent_View 	@320
-						location   	(395, 0)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"3839958601DF"
-						client     	@320
-						supplier   	@319
-						line_style 	0)
-					    (object RoleView "$UNNAMED$54" @322
-						Parent_View 	@320
-						location   	(395, 0)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"3839958601E9"
-						client     	@320
-						supplier   	@308
-						line_style 	0)))
-				    (object AssociationViewNew "$UNNAMED$55" @323
-					location   	(1116, 1580)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"383995D90242"
-					roleview_list 	(list RoleViews
-					    (object RoleView "$UNNAMED$56" @324
-						Parent_View 	@323
-						location   	(186, 154)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"383995DA00B3"
-						client     	@323
-						supplier   	@319
-						line_style 	0)
-					    (object RoleView "$UNNAMED$57" @325
-						Parent_View 	@323
-						location   	(186, 154)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"383995DA00BD"
-						client     	@323
-						supplier   	@311
-						line_style 	0)))
-				    (object AssociationViewNew "$UNNAMED$85" @326
-					location   	(1574, 1736)
-					stereotype 	TRUE
-					line_color 	3342489
-					quidu      	"383996F102F9"
-					roleview_list 	(list RoleViews
-					    (object RoleView "$UNNAMED$86" @327
-						Parent_View 	@326
-						location   	(272, 0)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"383996F2011A"
-						client     	@326
-						supplier   	@318
-						line_style 	0)
-					    (object RoleView "$UNNAMED$87" @328
-						Parent_View 	@326
-						location   	(272, 0)
-						stereotype 	TRUE
-						line_color 	3342489
-						quidu      	"383996F2012E"
-						client     	@326
-						supplier   	@319
-						line_style 	0)))))))
-		    (object Class_Category "SMCM"
-			quid       	"383996B7026A"
-			exportControl 	"Public"
-			logical_models 	(list unit_reference_list
-			    (object Class "CSmsHeader"
-				quid       	"383996BD00A5"))
-			logical_presentations 	(list unit_reference_list)))
-		statemachine 	(object State_Machine "State/Activity Model"
-		    quid       	"3858AFFD00E4"
-		    states     	(list States
-			(object State "$UNNAMED$88"
-			    quid       	"3858B04B0013"
-			    transitions 	(list transition_list
-				(object State_Transition
-				    quid       	"3858B0CE001C"
-				    label      	""
-				    supplier   	"Pending"
-				    quidu      	"3858B0500288"
-				    Event      	(object Event "Delivery Report Requested"
-					quid       	"3858B0CE001D")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B0CE001F"))
-				(object State_Transition
-				    quid       	"3858B0D20126"
-				    label      	""
-				    supplier   	"Sent"
-				    quidu      	"3858B05901D6"
-				    Event      	(object Event "Delivery Report NOT Requested"
-					quid       	"3858B0D20127")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B0D20129"))
-				(object State_Transition
-				    quid       	"3858B0E502BE"
-				    label      	""
-				    supplier   	"Scheduled"
-				    quidu      	"3858B0C00102"
-				    Event      	(object Event "Sending Fails"
-					quid       	"3858B0E502BF")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B0E502C1"))
-				(object State_Transition
-				    quid       	"3858B1760280"
-				    label      	""
-				    supplier   	"Failed"
-				    quidu      	"3858B062021F"
-				    Event      	(object Event "Sending Fails and not scheduled"
-					quid       	"3858B1760281")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B1760283"))
-				(object State_Transition
-				    quid       	"3858B79600AE"
-				    label      	""
-				    supplier   	"Pending"
-				    quidu      	"3858B0500288"
-				    Event      	(object Event "Delivery Report Requested"
-					quid       	"3858B79600AF")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B79600B1"))
-				(object State_Transition
-				    quid       	"3858B79803E6"
-				    label      	""
-				    supplier   	"Sent"
-				    quidu      	"3858B05901D6"
-				    Event      	(object Event "Delivery Report NOT Requested"
-					quid       	"3858B79803E7")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B79803E9")))
-			    type       	"StartState")
-			(object State "Pending"
-			    quid       	"3858B0500288"
-			    transitions 	(list transition_list
-				(object State_Transition
-				    quid       	"3858B0F4011B"
-				    label      	""
-				    supplier   	"Scheduled"
-				    quidu      	"3858B0C00102"
-				    Event      	(object Event "Delivery Report NOT Received"
-					quid       	"3858B0F4011C")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B0F4011E"))
-				(object State_Transition
-				    quid       	"3858B11D0138"
-				    label      	""
-				    supplier   	"Delivered"
-				    quidu      	"3858B1140031"
-				    Event      	(object Event "Delivery Report Received"
-					quid       	"3858B11D0139")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B11D013B"))
-				(object State_Transition
-				    quid       	"3858B11F0271"
-				    label      	""
-				    supplier   	"Failed"
-				    quidu      	"3858B062021F"
-				    Event      	(object Event "Delivery Report NOT Received"
-					quid       	"3858B11F0272")
-				    sendEvent  	(object sendEvent
-					quid       	"3858B11F0274")))
-			    type       	"Normal")
-			(object State "Sent"
-			    quid       	"3858B05901D6"
-			    transitions 	(list transition_list
-				(object State_Transition
-				    quid       	"3858B3390166"
-				    supplier   	"$UNNAMED$89"
-				    quidu      	"3858B33502BF"
-				    sendEvent  	(object sendEvent
-					quid       	"3858B3390169")))
-			    type       	"Normal")
-			(object State "Failed"
-			    quid       	"3858B062021F"
-			    transitions 	(list transition_list
-				(object State_Transition
-				    quid       	"3858B0FF008A"
-				    supplier   	"Scheduled"
-				    quidu      	"3858B0C00102"
-				    sendEvent  	(object sendEvent
-					quid       	"3858B0FF008D"))
-				(object State_Transition
-				    quid       	"3858B3400207"
-				    supplier   	"$UNNAMED$89"
-				    quidu      	"3858B33502BF"
-				    sendEvent  	(object sendEvent
-					quid       	"3858B340020A")))
-			    type       	"Normal")
-			(object State "Scheduled"
-			    quid       	"3858B0C00102"
-			    transitions 	(list transition_list
-				(object State_Transition
-				    quid       	"3858B0F601E6"
-				    supplier   	"Pending"
-				    quidu      	"3858B0500288"
-				    sendEvent  	(object sendEvent
-					quid       	"3858B0F601E9"))
-				(object State_Transition
-				    quid       	"3858B0FA01C4"
-				    supplier   	"Failed"
-				    quidu      	"3858B062021F"
-				    sendEvent  	(object sendEvent
-					quid       	"3858B0FA01C7"))
-				(object State_Transition
-				    quid       	"3858B10502EC"
-				    supplier   	"Sent"
-				    quidu      	"3858B05901D6"
-				    sendEvent  	(object sendEvent
-					quid       	"3858B10502EF")))
-			    type       	"Normal")
-			(object State "Delivered"
-			    quid       	"3858B1140031"
-			    transitions 	(list transition_list
-				(object State_Transition
-				    quid       	"3858B33D0343"
-				    supplier   	"$UNNAMED$89"
-				    quidu      	"3858B33502BF"
-				    sendEvent  	(object sendEvent
-					quid       	"3858B33D0346")))
-			    type       	"Normal")
-			(object State "$UNNAMED$89"
-			    quid       	"3858B33502BF"
-			    type       	"EndState"))
-		    partitions 	(list Partitions)
-		    statediagrams 	(list StateDiagrams
-			(object State_Diagram "SMS Logging"
-			    quid       	"3858AFFD00EE"
-			    title      	"SMS Logging"
-			    zoom       	100
-			    max_height 	28350
-			    max_width  	21600
-			    origin_x   	0
-			    origin_y   	0
-			    items      	(list diagram_item_list
-				(object StateView "StartState" "$UNNAMED$88" @329
-				    location   	(682, 868)
-				    label      	(object ItemLabel
-					Parent_View 	@329
-					location   	(724, 838)
-					nlines     	2
-					max_width  	600
-					label      	"")
-				    icon_style 	"Icon"
-				    line_color 	3342489
-				    fill_color 	13434879
-				    quidu      	"3858B04B0013")
-				(object StateView "Normal" "Pending" @330
-				    location   	(341, 372)
-				    label      	(object ItemLabel
-					Parent_View 	@330
-					location   	(341, 361)
-					fill_color 	13434879
-					anchor_loc 	1
-					nlines     	2
-					max_width  	204
-					justify    	0
-					label      	"Pending")
-				    icon_style 	"Icon"
-				    line_color 	3342489
-				    fill_color 	13434879
-				    quidu      	"3858B0500288")
-				(object StateView "Normal" "Sent" @331
-				    location   	(1395, 1426)
-				    label      	(object ItemLabel
-					Parent_View 	@331
-					location   	(1395, 1415)
-					fill_color 	13434879
-					anchor_loc 	1
-					nlines     	2
-					max_width  	204
-					justify    	0
-					label      	"Sent")
-				    icon_style 	"Icon"
-				    line_color 	3342489
-				    fill_color 	13434879
-				    quidu      	"3858B05901D6")
-				(object StateView "Normal" "Failed" @332
-				    location   	(1519, 868)
-				    label      	(object ItemLabel
-					Parent_View 	@332
-					location   	(1519, 857)
-					fill_color 	13434879
-					anchor_loc 	1
-					nlines     	2
-					max_width  	204
-					justify    	0
-					label      	"Failed")
-				    icon_style 	"Icon"
-				    line_color 	3342489
-				    fill_color 	13434879
-				    quidu      	"3858B062021F")
-				(object StateView "Normal" "Scheduled" @333
-				    location   	(341, 1426)
-				    label      	(object ItemLabel
-					Parent_View 	@333
-					location   	(341, 1415)
-					fill_color 	13434879
-					anchor_loc 	1
-					nlines     	2
-					max_width  	204
-					justify    	0
-					label      	"Scheduled")
-				    icon_style 	"Icon"
-				    line_color 	3342489
-				    fill_color 	13434879
-				    quidu      	"3858B0C00102")
-				(object StateView "Normal" "Delivered" @334
-				    location   	(1395, 372)
-				    label      	(object ItemLabel
-					Parent_View 	@334
-					location   	(1395, 361)
-					fill_color 	13434879
-					anchor_loc 	1
-					nlines     	2
-					max_width  	204
-					justify    	0
-					label      	"Delivered")
-				    icon_style 	"Icon"
-				    line_color 	3342489
-				    fill_color 	13434879
-				    quidu      	"3858B1140031")
-				(object StateView "EndState" "$UNNAMED$89" @335
-				    location   	(1984, 868)
-				    label      	(object ItemLabel
-					Parent_View 	@335
-					location   	(2038, 826)
-					nlines     	2
-					max_width  	600
-					label      	"")
-				    icon_style 	"Icon"
-				    line_color 	3342489
-				    fill_color 	13434879
-				    quidu      	"3858B33502BF")
-				(object TransView "" @336
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B33D0343"
-				    client     	@334
-				    supplier   	@335
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @337
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B3400207"
-				    client     	@332
-				    supplier   	@335
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @338
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B3390166"
-				    client     	@331
-				    supplier   	@335
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @339
-				    label      	(object SegLabel @340
-					Parent_View 	@339
-					location   	(1016, 826)
-					anchor_loc 	1
-					nlines     	1
-					max_width  	589
-					justify    	0
-					label      	"Sending Fails and not scheduled"
-					pctDist    	0.464856
-					height     	43
-					orientation 	0)
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B1760280"
-				    client     	@329
-				    supplier   	@332
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @341
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B0E502BE"
-				    client     	@329
-				    supplier   	@333
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @342
-				    label      	(object SegLabel @343
-					Parent_View 	@342
-					location   	(1203, 1281)
-					anchor_loc 	1
-					nlines     	3
-					max_width  	413
-					justify    	0
-					label      	"Delivery Report NOT Requested"
-					pctDist    	0.826003
-					height     	5
-					orientation 	1)
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B79803E6"
-				    client     	@329
-				    supplier   	@331
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @344
-				    label      	(object SegLabel @345
-					Parent_View 	@344
-					location   	(542, 655)
-					anchor_loc 	1
-					nlines     	3
-					max_width  	250
-					justify    	0
-					label      	"Delivery Report Requested"
-					pctDist    	0.451599
-					height     	6
-					orientation 	1)
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B79600AE"
-				    client     	@329
-				    supplier   	@330
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @346
-				    label      	(object SegLabel @347
-					Parent_View 	@346
-					location   	(868, 328)
-					anchor_loc 	1
-					nlines     	1
-					max_width  	495
-					justify    	0
-					label      	"Delivery Report Received"
-					pctDist    	0.500000
-					height     	45
-					orientation 	0)
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B11D0138"
-				    client     	@330
-				    supplier   	@334
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @348
-				    label      	(object SegLabel @349
-					Parent_View 	@348
-					location   	(1042, 585)
-					anchor_loc 	1
-					nlines     	2
-					max_width  	331
-					justify    	0
-					label      	"Delivery Report NOT Received"
-					pctDist    	0.595652
-					height     	76
-					orientation 	0)
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B11F0271"
-				    client     	@330
-				    supplier   	@332
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @350
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B10502EC"
-				    client     	@333
-				    supplier   	@331
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @351
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B0FA01C4"
-				    client     	@333
-				    supplier   	@332
-				    line_style 	0
-				    x_offset   	FALSE)
-				(object TransView "" @352
-				    stereotype 	TRUE
-				    line_color 	3342489
-				    quidu      	"3858B0F601E6"
-				    client     	@333
-				    supplier   	@330
-				    line_style 	0
-				    x_offset   	FALSE)))))
-		logical_presentations 	(list unit_reference_list)))
-	logical_presentations 	(list unit_reference_list
-	    (object ClassDiagram "Main"
-		quid       	"38172ED70226"
-		title      	"Main"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    root_subsystem 	(object SubSystem "Component View"
-	quid       	"37BA832E012D"
-	physical_models 	(list unit_reference_list)
-	physical_presentations 	(list unit_reference_list
-	    (object Module_Diagram "Main"
-		quid       	"37BA832F00D3"
-		title      	"Main"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    process_structure 	(object Processes
-	quid       	"37BA832E012E"
-	ProcsNDevs 	(list
-	    (object Process_Diagram "Deployment View"
-		quid       	"37BA832F008D"
-		title      	"Deployment View"
-		zoom       	100
-		max_height 	28350
-		max_width  	21600
-		origin_x   	0
-		origin_y   	0
-		items      	(list diagram_item_list))))
-    properties 	(object Properties
-	attributes 	(list Attribute_Set
-	    (object Attribute
-		tool       	"cg"
-		name       	"roseId"
-		value      	"753117540")
-	    (object Attribute
-		tool       	"cg"
-		name       	"propertyId"
-		value      	"809135966")
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Project"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileExtension"
-			value      	"h")
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileBackupExtension"
-			value      	"h~")
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileTemporaryExtension"
-			value      	"h#")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileExtension"
-			value      	"cpp")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileBackupExtension"
-			value      	"cp~")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileTemporaryExtension"
-			value      	"cp#")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CreateMissingDirectories"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"StopOnError"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"ErrorLimit"
-			value      	30)
-		    (object Attribute
-			tool       	"cg"
-			name       	"Directory"
-			value      	"AUTO GENERATE")
-		    (object Attribute
-			tool       	"cg"
-			name       	"PathSeparator"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"FileNameFormat"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BooleanType"
-			value      	"int")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AllowTemplates"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"AllowProtectedInheritance"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"OneByValueContainer"
-			value      	"$targetClass")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OneByReferenceContainer"
-			value      	"$targetClass *")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OptionalByValueContainer"
-			value      	"OptionalByValue<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OptionalByReferenceContainer"
-			value      	"$targetClass *")
-		    (object Attribute
-			tool       	"cg"
-			name       	"FixedByValueContainer"
-			value      	"$targetClass[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedFixedByValueContainer"
-			value      	"$targetClass[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"FixedByReferenceContainer"
-			value      	"$targetClass *[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedFixedByReferenceContainer"
-			value      	"$targetClass *[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedByValueContainer"
-			value      	"BoundedListByValue<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedBoundedByValueContainer"
-			value      	"BoundedSetByValue<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedByReferenceContainer"
-			value      	"BoundedListByReference<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedBoundedByReferenceContainer"
-			value      	"BoundedSetByReference<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnboundedByValueContainer"
-			value      	"UnboundedListByValue<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedUnboundedByValueContainer"
-			value      	"UnboundedSetByValue<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnboundedByReferenceContainer"
-			value      	"UnboundedListByReference<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedUnboundedByReferenceContainer"
-			value      	"UnboundedSetByReference<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedByValueContainer"
-			value      	"AssociationByValue<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedQualifiedByValueContainer"
-			value      	"DictionaryByValue<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedByReferenceContainer"
-			value      	"AssociationByReference<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedQualifiedByReferenceContainer"
-			value      	"DictionaryByReference<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GeneratePreserveRegions"
-			value      	TRUE)))
-	    (object Attribute
-		tool       	"cg"
-		name       	"compiler2.1__Project"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileExtension"
-			value      	"h")
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileBackupExtension"
-			value      	"h~")
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileTemporaryExtension"
-			value      	"h#")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileExtension"
-			value      	"cpp")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileBackupExtension"
-			value      	"cp~")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileTemporaryExtension"
-			value      	"cp#")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CreateMissingDirectories"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"StopOnError"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"ErrorLimit"
-			value      	30)
-		    (object Attribute
-			tool       	"cg"
-			name       	"Directory"
-			value      	"AUTO GENERATE")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BooleanType"
-			value      	"int")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AllowTemplates"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"AllowProtectedInheritance"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"OneByValueContainer"
-			value      	"$targetClass")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OneByReferenceContainer"
-			value      	"$targetClass *")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OptionalByValueContainer"
-			value      	"OptionalByValue(sizeof($targetClass))")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OptionalByReferenceContainer"
-			value      	"$targetClass *")
-		    (object Attribute
-			tool       	"cg"
-			name       	"FixedByValueContainer"
-			value      	"$targetClass[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedFixedByValueContainer"
-			value      	"$targetClass[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"FixedByReferenceContainer"
-			value      	"$targetClass *[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedFixedByReferenceContainer"
-			value      	"$targetClass *[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedByValueContainer"
-			value      	"BoundedListByValue(sizeof($targetClass),$limit)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedBoundedByValueContainer"
-			value      	"BoundedSetByValue(sizeof($targetClass),$limit)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedByReferenceContainer"
-			value      	"BoundedListByReference($limit)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedBoundedByReferenceContainer"
-			value      	"BoundedSetByReference($limit)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnboundedByValueContainer"
-			value      	"UnboundedListByValue(sizeof($targetClass))")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedUnboundedByValueContainer"
-			value      	"UnboundedSetByValue(sizeof($targetClass))")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnboundedByReferenceContainer"
-			value      	"UnboundedListByReference")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedUnboundedByReferenceContainer"
-			value      	"UnboundedSetByReference")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedByValueContainer"
-			value      	"AssociationByValue(sizeof($qualtype), sizeof($qualcont)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedQualifiedByValueContainer"
-			value      	"DictionaryByValue(sizeof($qualtype), sizeof($qualcont)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedByReferenceContainer"
-			value      	"AssociationByReference(sizeof($qualtype), sizeof($qualcont)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedQualifiedByReferenceContainer"
-			value      	"DictionaryByReference(sizeof($qualtype), sizeof($qualcont)")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GeneratePreserveRegions"
-			value      	TRUE)))
-	    (object Attribute
-		tool       	"cg"
-		name       	"compiler3.0__Project"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileExtension"
-			value      	"h")
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileBackupExtension"
-			value      	"h~")
-		    (object Attribute
-			tool       	"cg"
-			name       	"HeaderFileTemporaryExtension"
-			value      	"h#")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileExtension"
-			value      	"cpp")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileBackupExtension"
-			value      	"cp~")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeFileTemporaryExtension"
-			value      	"cp#")
-		    (object Attribute
-			tool       	"cg"
-			name       	"CreateMissingDirectories"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"StopOnError"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"ErrorLimit"
-			value      	30)
-		    (object Attribute
-			tool       	"cg"
-			name       	"Directory"
-			value      	"AUTO GENERATE")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BooleanType"
-			value      	"int")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AllowTemplates"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"AllowProtectedInheritance"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"OneByValueContainer"
-			value      	"$targetClass")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OneByReferenceContainer"
-			value      	"$targetClass *")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OptionalByValueContainer"
-			value      	"OptionalByValue<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OptionalByReferenceContainer"
-			value      	"$targetClass *")
-		    (object Attribute
-			tool       	"cg"
-			name       	"FixedByValueContainer"
-			value      	"$targetClass[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedFixedByValueContainer"
-			value      	"$targetClass[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"FixedByReferenceContainer"
-			value      	"$targetClass *[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedFixedByReferenceContainer"
-			value      	"$targetClass *[$limit]")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedByValueContainer"
-			value      	"BoundedListByValue<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedBoundedByValueContainer"
-			value      	"BoundedSetByValue<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedByReferenceContainer"
-			value      	"BoundedListByReference<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedBoundedByReferenceContainer"
-			value      	"BoundedSetByReference<$targetClass,$limit>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnboundedByValueContainer"
-			value      	"UnboundedListByValue<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedUnboundedByValueContainer"
-			value      	"UnboundedSetByValue<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnboundedByReferenceContainer"
-			value      	"UnboundedListByReference<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedUnboundedByReferenceContainer"
-			value      	"UnboundedSetByReference<$targetClass>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedByValueContainer"
-			value      	"AssociationByValue<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedQualifiedByValueContainer"
-			value      	"DictionaryByValue<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedByReferenceContainer"
-			value      	"AssociationByReference<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"UnorderedQualifiedByReferenceContainer"
-			value      	"DictionaryByReference<$qualtype, $qualcont>")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GeneratePreserveRegions"
-			value      	TRUE)))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Class"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeName"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"ImplementationType"
-			value      	(value Text ""))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateDefaultConstructor"
-			value      	("GenerateSet" 199))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DefaultConstructorVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineDefaultConstructor"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateCopyConstructor"
-			value      	("GenerateSet" 199))
-		    (object Attribute
-			tool       	"cg"
-			name       	"CopyConstructorVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineCopyConstructor"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateDestructor"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"DestructorVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DestructorKind"
-			value      	("ThreeKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineDestructor"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateAssignmentOperation"
-			value      	("GenerateSet" 199))
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssignmentVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssignmentKind"
-			value      	("ThreeKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineAssignmentOperation"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateEqualityOperations"
-			value      	("GenerateSet" 199))
-		    (object Attribute
-			tool       	"cg"
-			name       	"EqualityVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"EqualityKind"
-			value      	("FriendKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineEqualityOperations"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateRelationalOperations"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"RelationalVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"RelationalKind"
-			value      	("FriendKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineRelationalOperations"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateStorageMgmtOperations"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"StorageMgmtVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineStorageMgmtOperations"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateSubscriptOperation"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"SubscriptVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"SubscriptKind"
-			value      	("ThreeKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"SubscriptResultType"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineSubscriptOperation"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateDereferenceOperation"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"DereferenceVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DereferenceKind"
-			value      	("ThreeKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DereferenceResultType"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineDereferenceOperation"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateIndirectionOperation"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"IndirectionVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"IndirectionKind"
-			value      	("ThreeKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"IndirectionResultType"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineIndirectionOperation"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateStreamOperations"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"StreamVisibility"
-			value      	("VisibilitySet" 45))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineStreamOperations"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"ThreeKindSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Common"
-				value      	200)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Virtual"
-				value      	201)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Abstract"
-				value      	202)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"KindSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Common"
-				value      	200)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Virtual"
-				value      	201)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Abstract"
-				value      	202)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Static"
-				value      	203)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"FriendKindSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Common"
-				value      	200)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Virtual"
-				value      	201)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Abstract"
-				value      	202)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Friend"
-				value      	204)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"DeclareAndDefine"
-				value      	199)
-			    (object Attribute
-				tool       	"cg"
-				name       	"DeclareOnly"
-				value      	205)
-			    (object Attribute
-				tool       	"cg"
-				name       	"DoNotDeclare"
-				value      	206)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"VisibilitySet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Public"
-				value      	45)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Protected"
-				value      	44)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Private"
-				value      	43)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Implementation"
-				value      	14)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"ConstValue"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateDefaultSpecifier"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"DefaultSpecifier"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"IDLElement"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"IDLSpecificationType"
-			value      	("IDLSpecSet" 22))
-		    (object Attribute
-			tool       	"cg"
-			name       	"IDLSpecSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Interface"
-				value      	22)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Typedef"
-				value      	54)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Enumeration"
-				value      	8)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Const"
-				value      	71)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Exception"
-				value      	61)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Struct"
-				value      	51)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Union"
-				value      	81)))))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Module-Spec"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"Generate"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"CmIdentification"
-			value      	(value Text "  %X% %Q% %Z% %W%"))
-		    (object Attribute
-			tool       	"cg"
-			name       	"CopyrightNotice"
-			value      	(value Text ""))
-		    (object Attribute
-			tool       	"cg"
-			name       	"FileName"
-			value      	"AUTO GENERATE")
-		    (object Attribute
-			tool       	"cg"
-			name       	"InclusionProtectionSymbol"
-			value      	"AUTO GENERATE")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AdditionalIncludes"
-			value      	(value Text ""))
-		    (object Attribute
-			tool       	"cg"
-			name       	"IncludeBySimpleName"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InliningStyle"
-			value      	("InliningStyleSet" 207))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InliningStyleSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"InClassDeclaration"
-				value      	208)
-			    (object Attribute
-				tool       	"cg"
-				name       	"FollowingClassDeclaration"
-				value      	207)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateIDLModule"
-			value      	FALSE)))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Module-Body"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"Generate"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"CmIdentification"
-			value      	(value Text "  %X% %Q% %Z% %W%"))
-		    (object Attribute
-			tool       	"cg"
-			name       	"CopyrightNotice"
-			value      	(value Text ""))
-		    (object Attribute
-			tool       	"cg"
-			name       	"FileName"
-			value      	"AUTO GENERATE")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AdditionalIncludes"
-			value      	(value Text ""))
-		    (object Attribute
-			tool       	"cg"
-			name       	"IncludeBySimpleName"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InliningStyle"
-			value      	("InliningStyleSet" 207))
-		    (object Attribute
-			tool       	"cg"
-			name       	"InliningStyleSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"InClassDeclaration"
-				value      	208)
-			    (object Attribute
-				tool       	"cg"
-				name       	"FollowingClassDeclaration"
-				value      	207)))))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Operation"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeName"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"OperationKind"
-			value      	("OperationKindSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"OperationKindSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Common"
-				value      	200)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Virtual"
-				value      	201)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Abstract"
-				value      	202)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Static"
-				value      	203)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Friend"
-				value      	204)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"OperationIsConst"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"EntryCode"
-			value      	(value Text ""))
-		    (object Attribute
-			tool       	"cg"
-			name       	"ExitCode"
-			value      	(value Text ""))
-		    (object Attribute
-			tool       	"cg"
-			name       	"Inline"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"OperationIsOneWay"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"Context"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"Raises"
-			value      	"")))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Has"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeName"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"Ordered"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"NameIfUnlabeled"
-			value      	"the_$supplier")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateDataMember"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberName"
-			value      	"$relationship")
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberVisibility"
-			value      	("DataMemberVisibilitySet" 14))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberVisibilitySet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Public"
-				value      	45)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Protected"
-				value      	44)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Private"
-				value      	43)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Implementation"
-				value      	14)
-			    (object Attribute
-				tool       	"cg"
-				name       	"AtRelationshipVisibility"
-				value      	210)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateGetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateSetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetName"
-			value      	"get_$relationship")
-		    (object Attribute
-			tool       	"cg"
-			name       	"SetName"
-			value      	"set_$relationship")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetKinds"
-			value      	("GetSetKindsSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetKindsSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Common"
-				value      	200)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Virtual"
-				value      	201)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Abstract"
-				value      	202)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Static"
-				value      	203)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Friend"
-				value      	204)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"ContainerClass"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"SelectorName"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"SelectorType"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetIsConst"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetByReference"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineGet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"SetReturnsValue"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineSet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"ForwardReferenceOnly"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateForwardReference"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"IsReadOnly"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedHasRelType"
-			value      	("HasRelTypeSet" 47))
-		    (object Attribute
-			tool       	"cg"
-			name       	"HasRelTypeSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Array"
-				value      	24)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Sequence"
-				value      	47)))))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Association"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"NameIfUnlabeled"
-			value      	"the_$targetClass")))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Role"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeName"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"ForwardReferenceOnly"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"NameIfUnlabeled"
-			value      	"the_$targetClass")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateDataMember"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberName"
-			value      	"$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberVisibility"
-			value      	("DataMemberVisibilitySet" 14))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberVisibilitySet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Public"
-				value      	45)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Protected"
-				value      	44)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Private"
-				value      	43)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Implementation"
-				value      	14)
-			    (object Attribute
-				tool       	"cg"
-				name       	"AtRelationshipVisibility"
-				value      	210)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"ContainerClass"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedContainer"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassContainer"
-			value      	"$supplier *")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetKinds"
-			value      	("GetSetKindsSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetKindsSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Common"
-				value      	200)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Virtual"
-				value      	201)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Abstract"
-				value      	202)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Static"
-				value      	203)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Friend"
-				value      	204)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetByReference"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateGetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetName"
-			value      	"get_$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetIsConst"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineGet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateSetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"SetName"
-			value      	"set_$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"SetReturnsValue"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineSet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateQualifiedGetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedGetName"
-			value      	"get_$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedGetIsConst"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineQualifiedGet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateQualifiedSetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedSetName"
-			value      	"set_$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"QualifiedSetReturnsValue"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineQualifiedSet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateAssocClassDataMember"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassDataMemberName"
-			value      	"$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassDataMemberVisibility"
-			value      	("DataMemberVisibilitySet" 14))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberVisibilitySet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Public"
-				value      	45)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Protected"
-				value      	44)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Private"
-				value      	43)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Implementation"
-				value      	14)
-			    (object Attribute
-				tool       	"cg"
-				name       	"AtRelationshipVisibility"
-				value      	210)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassGetSetKinds"
-			value      	("GetSetKindsSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateAssocClassGetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassGetName"
-			value      	"get_$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassGetIsConst"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineAssocClassGet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateAssocClassSetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassSetName"
-			value      	"set_$target")
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassSetReturnsValue"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineAssocClassSet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocClassForwardReferenceOnly"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateForwardReference"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"IsReadOnly"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"BoundedRoleType"
-			value      	("AssocTypeSet" 47))
-		    (object Attribute
-			tool       	"cg"
-			name       	"AssocTypeSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Array"
-				value      	24)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Sequence"
-				value      	47)))))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Attribute"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"CodeName"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateDataMember"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberName"
-			value      	"$attribute")
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberVisibility"
-			value      	("DataMemberVisibilitySet" 14))
-		    (object Attribute
-			tool       	"cg"
-			name       	"DataMemberVisibilitySet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Public"
-				value      	45)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Protected"
-				value      	44)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Private"
-				value      	43)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Implementation"
-				value      	14)
-			    (object Attribute
-				tool       	"cg"
-				name       	"AtAttributeVisibility"
-				value      	211)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateGetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateSetOperation"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetName"
-			value      	"get_$attribute")
-		    (object Attribute
-			tool       	"cg"
-			name       	"SetName"
-			value      	"set_$attribute")
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetKinds"
-			value      	("GetSetKindsSet" 200))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetKindsSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"cg"
-				name       	"Common"
-				value      	200)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Virtual"
-				value      	201)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Abstract"
-				value      	202)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Static"
-				value      	203)
-			    (object Attribute
-				tool       	"cg"
-				name       	"Friend"
-				value      	204)))
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetIsConst"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GetSetByReference"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineGet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"SetReturnsValue"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"InlineSet"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"CaseSpecifier"
-			value      	"")
-		    (object Attribute
-			tool       	"cg"
-			name       	"IsReadOnly"
-			value      	FALSE)))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Uses"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"ForwardReferenceOnly"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateForwardReference"
-			value      	FALSE)))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Subsystem"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"Directory"
-			value      	"AUTO GENERATE")))
-	    (object Attribute
-		tool       	"DDL"
-		name       	"propertyId"
-		value      	"809135966")
-	    (object Attribute
-		tool       	"DDL"
-		name       	"default__Project"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DataBase"
-			value      	("DataBaseSet" 800))
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DataBaseSet"
-			value      	(list Attribute_Set
-			    (object Attribute
-				tool       	"DDL"
-				name       	"ANSI"
-				value      	800)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"Oracle"
-				value      	801)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"SQLServer"
-				value      	802)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"Sybase"
-				value      	803)
-			    (object Attribute
-				tool       	"DDL"
-				name       	"Watcom"
-				value      	804)))
-		    (object Attribute
-			tool       	"DDL"
-			name       	"PrimaryKeyColumnName"
-			value      	"Id")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"PrimaryKeyColumnType"
-			value      	"NUMBER(5)")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"ViewName"
-			value      	"V_")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"TableName"
-			value      	"T_")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"InheritSuffix"
-			value      	"_V")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DropClause"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"BaseViews"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"DDLScriptFilename"
-			value      	"DDL1.SQL")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"Directory"
-			value      	"AUTO GENERATE")))
-	    (object Attribute
-		tool       	"DDL"
-		name       	"default__Attribute"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"DDL"
-			name       	"ColumnType"
-			value      	"VARCHAR")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"Length"
-			value      	"")
-		    (object Attribute
-			tool       	"DDL"
-			name       	"NullsOK"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"PrimaryKey"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"Unique"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"CompositeUnique"
-			value      	FALSE)
-		    (object Attribute
-			tool       	"DDL"
-			name       	"CheckConstraint"
-			value      	"")))
-	    (object Attribute
-		tool       	"cg"
-		name       	"default__Category"
-		value      	(list Attribute_Set
-		    (object Attribute
-			tool       	"cg"
-			name       	"GenerateIDLModule"
-			value      	TRUE)
-		    (object Attribute
-			tool       	"cg"
-			name       	"ModuleName"
-			value      	(value Text ""))))
-	    (object Attribute
-		tool       	"DDL"
-		name       	"HiddenTool"
-		value      	FALSE)
-	    (object Attribute
-		tool       	"Rose Model Integrator"
-		name       	"HiddenTool"
-		value      	FALSE)
-	    (object Attribute
-		tool       	"Version Control"
-		name       	"HiddenTool"
-		value      	FALSE))
-	quid       	"37BA832E012F"))
+
+(object Petal
+    version    	43
+    _written   	"Rose 6.1.9113.5"
+    charSet    	0)
+
+(object Design "Logical View"
+    is_unit    	TRUE
+    is_loaded  	TRUE
+    quid       	"380CB4C0036B"
+    defaults   	(object defaults
+	rightMargin 	0.250000
+	leftMargin 	0.250000
+	topMargin  	0.250000
+	bottomMargin 	0.500000
+	pageOverlap 	0.250000
+	clipIconLabels 	TRUE
+	autoResize 	FALSE
+	snapToGrid 	TRUE
+	gridX      	31
+	gridY      	31
+	defaultFont 	(object Font
+	    size       	10
+	    face       	"Arial"
+	    bold       	FALSE
+	    italics    	FALSE
+	    underline  	FALSE
+	    strike     	FALSE
+	    color      	0
+	    default_color 	TRUE)
+	showMessageNum 	3
+	showClassOfObject 	TRUE
+	notation   	"Unified")
+    root_usecase_package 	(object Class_Category "Use Case View"
+	quid       	"37BA832E012C"
+	exportControl 	"Public"
+	global     	TRUE
+	logical_models 	(list unit_reference_list)
+	logical_presentations 	(list unit_reference_list
+	    (object UseCaseDiagram "Main"
+		quid       	"37BA832F00D4"
+		title      	"Main"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    root_category 	(object Class_Category "Logical View"
+	quid       	"37BA832E0123"
+	exportControl 	"Public"
+	global     	TRUE
+	subsystem  	"Component View"
+	quidu      	"37BA832E012D"
+	logical_models 	(list unit_reference_list
+	    (object Association "$UNNAMED$0"
+		quid       	"37BA858003B1"
+		roles      	(list role_list
+		    (object Role "$UNNAMED$1"
+			quid       	"37BA858102E0"
+			supplier   	"Logical View::FAXS::CFaxSession"
+			quidu      	"37BA850E019A"
+			is_navigable 	TRUE
+			is_aggregate 	TRUE)
+		    (object Role "$UNNAMED$2"
+			quid       	"37BA858102E1"
+			supplier   	"Logical View::ETel::CFaxTransfer"
+			quidu      	"37BA852C0067"
+			is_navigable 	TRUE)))
+	    (object Association "$UNNAMED$3"
+		quid       	"37D521FE03E3"
+		roles      	(list role_list
+		    (object Role "$UNNAMED$4"
+			quid       	"37D522000038"
+			supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
+			quidu      	"37CAB901016F"
+			is_navigable 	TRUE
+			is_aggregate 	TRUE)
+		    (object Role "$UNNAMED$5"
+			quid       	"37D52200006A"
+			supplier   	"Logical View::SCHSEND::CMsvScheduleSettings"
+			quidu      	"37D5214C0300"
+			is_navigable 	TRUE)))
+	    (object Association "$UNNAMED$6"
+		quid       	"380ACF7A0195"
+		roles      	(list role_list
+		    (object Role "$UNNAMED$7"
+			quid       	"380ACF7B03BD"
+			supplier   	"Logical View::SCHSEND::CMsvOffPeakTimes"
+			quidu      	"380ACDA80072"
+			is_navigable 	TRUE
+			is_aggregate 	TRUE)
+		    (object Role "$UNNAMED$8"
+			quid       	"380ACF7B03E5"
+			supplier   	"Logical View::SCHSEND::TMsvOffPeakTime"
+			quidu      	"380ACD9B034F"
+			is_navigable 	TRUE)))
+	    (object Association "$UNNAMED$9"
+		quid       	"380ACF86025A"
+		roles      	(list role_list
+		    (object Role "$UNNAMED$10"
+			quid       	"380ACF8700D5"
+			supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
+			quidu      	"37CAB901016F"
+			is_navigable 	TRUE
+			is_aggregate 	TRUE)
+		    (object Role "$UNNAMED$11"
+			quid       	"380ACF870111"
+			supplier   	"Logical View::SCHSEND::CMsvOffPeakTimes"
+			quidu      	"380ACDA80072"
+			is_navigable 	TRUE)))
+	    (object Association "$UNNAMED$12"
+		quid       	"380B36C9011B"
+		roles      	(list role_list
+		    (object Role "$UNNAMED$13"
+			quid       	"380B36C90266"
+			supplier   	"Logical View::SCHSEND::CMsvSendErrorActions"
+			quidu      	"380ACFCA026C"
+			is_navigable 	TRUE
+			is_aggregate 	TRUE)
+		    (object Role "$UNNAMED$14"
+			quid       	"380B36C902AC"
+			supplier   	"Logical View::SCHSEND::TMsvSendErrorAction"
+			quidu      	"380ACFBF02B6"
+			is_navigable 	TRUE)))
+	    (object Class_Category "ETel"
+		quid       	"37BA8A7F03C4"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "CFaxTransfer"
+			quid       	"37BA852C0067"
+			operations 	(list Operations
+			    (object Operation "Start"
+				quid       	"37BA8D6F02CB"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			language   	"C++"))
+		logical_presentations 	(list unit_reference_list))
+	    (object Class_Category "FAXS"
+		quid       	"37BA8A8F00F6"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "CFaxSession"
+			quid       	"37BA850E019A"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"37BA855E01F9"
+				supplier   	"Logical View::Epoc Generic::CActive"
+				quidu      	"37BA85360133"))
+			operations 	(list Operations
+			    (object Operation "NewLC"
+				quid       	"37BA8BEF0369"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetPhoneNumberL"
+				quid       	"37BA8D3400C7"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "StopFaxTransfer"
+				quid       	"37BA8DDD0124"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0))
+			language   	"C++")
+		    (object Class "CRecvFaxSession"
+			quid       	"37BA851502B3"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"37BA85660038"
+				supplier   	"Logical View::FAXS::CFaxSession"
+				quidu      	"37BA850E019A"))
+			language   	"C++")
+		    (object Class "CSendFaxSession"
+			quid       	"37BA84030272"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"37BA85690277"
+				supplier   	"Logical View::FAXS::CFaxSession"
+				quidu      	"37BA850E019A"))
+			operations 	(list Operations
+			    (object Operation "NextFaxFromSelectionL"
+				quid       	"37BA86080262"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SendToNextRecipientL"
+				quid       	"37BA863A021E"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "TransferNextFaxL"
+				quid       	"37BA863B019D"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetUpTransferL"
+				quid       	"37BA863E0378"
+				result     	"void"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "AddSourcesL"
+				quid       	"37BA86740068"
+				result     	"void"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CSendFaxSession"
+				quid       	"37BA868201C7"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetSendMaskL"
+				quid       	"37BA869301FE"
+				result     	"void"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "UnSetSendMask"
+				quid       	"37BA869D0324"
+				result     	"void"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "DoRunL"
+				quid       	"37BA86A700B2"
+				result     	"void"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "PagesInFaxFileL"
+				quid       	"37BA86A8015E"
+				result     	"TInt"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "StartL"
+				quid       	"37BA885A000D"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RetryStoreMessageL"
+				quid       	"37BA886D0014"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RetryAbortMessage"
+				quid       	"37BA887C005C"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			language   	"C++")
+		    (object Class "CFaxServerMTM"
+			quid       	"37BA871602B0"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"383139D200C0"
+				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
+				quidu      	"38312BAA0304"))
+			operations 	(list Operations
+			    (object Operation "DoRunL"
+				quid       	"37BA879B035C"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SendFaxesL"
+				quid       	"37BA8931005C"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "ReceiveFaxesL"
+				quid       	"37BA893202D5"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0))
+			language   	"C++")
+		    (object Class "CFaxScheduleSend"
+			quid       	"383270B50049"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"383271F9032A"
+				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
+				quidu      	"37CAB901016F")))
+		    (object Class "CFaxScheduledEntry"
+			quid       	"383270CC0331"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"3832723F0353"
+				supplier   	"Logical View::SCHSEND::CMsvScheduledEntry"
+				quidu      	"3831245B0050")))
+		    (object Association "$UNNAMED$15"
+			quid       	"383271C00101"
+			roles      	(list role_list
+			    (object Role "$UNNAMED$16"
+				quid       	"383271C0027E"
+				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
+				quidu      	"38312BAA0304"
+				is_navigable 	TRUE)
+			    (object Role "$UNNAMED$17"
+				quid       	"383271C00288"
+				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
+				quidu      	"37CAB901016F"
+				is_navigable 	TRUE
+				is_aggregate 	TRUE)))
+		    (object Association "$UNNAMED$18"
+			quid       	"383271D50238"
+			roles      	(list role_list
+			    (object Role "$UNNAMED$19"
+				quid       	"383271D503AA"
+				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
+				quidu      	"37CAB901016F")
+			    (object Role "$UNNAMED$20"
+				quid       	"383271D503DC"
+				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
+				quidu      	"38312BAA0304"
+				is_aggregate 	TRUE)))
+		    (object Mechanism @1
+			logical_models 	(list unit_reference_list
+			    (object Object "$UNNAMED$21"
+				quid       	"37BA8ACF022E"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"37BA8BB5015D"
+					supplier   	"$UNNAMED$21"
+					quidu      	"37BA8ACF022E"
+					messages   	(list Messages
+					    (object Message "SendFaxesL ( )"
+						quid       	"37BA8BB5015E"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"2"
+						ordinal    	1
+						Operation  	"SendFaxesL( )"
+						quidu      	"37BA8931005C")
+					    (object Message "SetActive ( )"
+						quid       	"37BA8C2D0386"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"13"
+						ordinal    	12
+						Operation  	"SetActive( )"
+						quidu      	"37BA87BA0388")))
+				    (object Link
+					quid       	"37BA8C11028C"
+					supplier   	"$UNNAMED$22"
+					quidu      	"37BA8B07009E"
+					messages   	(list Messages
+					    (object Message "NewLC ( )"
+						quid       	"37BA8C11028D"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"3"
+						ordinal    	2
+						Operation  	"NewLC( )"
+						quidu      	"37BA8BEF0369")
+					    (object Message "StartL ( )"
+						quid       	"37BA8C200048"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"4"
+						ordinal    	3
+						Operation  	"StartL( )"
+						quidu      	"37BA885A000D")
+					    (object Message "DoRunL ( )"
+						quid       	"37BA8FD1017E"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"ToClientFromSupplier"
+						sequence   	"15"
+						ordinal    	14
+						Operation  	"DoRunL( )"
+						quidu      	"37BA879B035C"))))
+				class      	"Logical View::FAXS::CFaxServerMTM"
+				quidu      	"37BA871602B0"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$22"
+				quid       	"37BA8B07009E"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"37BA8C6B026D"
+					supplier   	"$UNNAMED$22"
+					quidu      	"37BA8B07009E"
+					messages   	(list Messages
+					    (object Message "SetSendMaskL ( )"
+						quid       	"37BA8C6B026E"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"5"
+						ordinal    	4
+						Operation  	"SetSendMaskL( )"
+						quidu      	"37BA869301FE")
+					    (object Message "TransferNextFaxL ( )"
+						quid       	"37BA8C7A02E7"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"6"
+						ordinal    	5
+						Operation  	"TransferNextFaxL( )"
+						quidu      	"37BA863B019D")
+					    (object Message "NextFaxFromSelectionL ( )"
+						quid       	"37BA8C96000C"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"7"
+						ordinal    	6
+						Operation  	"NextFaxFromSelectionL( )"
+						quidu      	"37BA86080262")
+					    (object Message "SendToNextRecipientL ( )"
+						quid       	"37BA8CDF0147"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"8"
+						ordinal    	7
+						Operation  	"SendToNextRecipientL( )"
+						quidu      	"37BA863A021E")
+					    (object Message "SetUpTransferL ( )"
+						quid       	"37BA8D0101AA"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"9"
+						ordinal    	8
+						Operation  	"SetUpTransferL( )"
+						quidu      	"37BA863E0378")
+					    (object Message "SetPhoneNumberL ( )"
+						quid       	"37BA8D1003AB"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"10"
+						ordinal    	9
+						Operation  	"SetPhoneNumberL( )"
+						quidu      	"37BA8D3400C7")
+					    (object Message "SetActive ( )"
+						quid       	"37BA8D970355"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"12"
+						ordinal    	11
+						Operation  	"SetActive( )"
+						quidu      	"37BA87BA0388")))
+				    (object Link
+					quid       	"37BA8D650317"
+					supplier   	"$UNNAMED$23"
+					quidu      	"37BA8B0E0062"
+					messages   	(list Messages
+					    (object Message "Start ( )"
+						quid       	"37BA8D650318"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"11"
+						ordinal    	10
+						Operation  	"Start( )"
+						quidu      	"37BA8D6F02CB")
+					    (object Message "DoRunL ( )"
+						quid       	"37BA8DA70271"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"ToClientFromSupplier"
+						sequence   	"14"
+						ordinal    	13
+						Operation  	"DoRunL( )"
+						quidu      	"37BA86A700B2"))))
+				class      	"Logical View::FAXS::CSendFaxSession"
+				quidu      	"37BA84030272"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$23"
+				quid       	"37BA8B0E0062"
+				class      	"Logical View::ETel::CFaxTransfer"
+				quidu      	"37BA852C0067"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "Client"
+				quid       	"37BA8B1F0251"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"37BA8B38032A"
+					supplier   	"$UNNAMED$21"
+					quidu      	"37BA8ACF022E"
+					messages   	(list Messages
+					    (object Message "CopyFromLocalL ( )"
+						quid       	"37BA8B38032B"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"1"
+						ordinal    	0
+						Operation  	"CopyFromLocalL( )"
+						quidu      	"37BA88AA0347"))))
+				persistence 	"Transient"
+				multi      	FALSE)))
+		    (object Mechanism @2
+			logical_models 	(list unit_reference_list))
+		    (object Mechanism @3
+			logical_models 	(list unit_reference_list
+			    (object Object "Client"
+				quid       	"37C4181D031D"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"37C4184102B1"
+					supplier   	"$UNNAMED$24"
+					quidu      	"37C418360020"
+					messages   	(list Messages
+					    (object Message "DeleteScheduleL()"
+						quid       	"37C4184102B2"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"2"
+						ordinal    	1
+						Operation  	"DeleteScheduleL"
+						quidu      	"37C411CC003D")
+					    (object Message "ScheduleEntryL ( )"
+						quid       	"37C4188A0071"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"5"
+						ordinal    	4
+						Operation  	"ScheduleEntryL"
+						quidu      	"37C4116A00FA")
+					    (object Message "GetScheduleL ( )"
+						quid       	"37C419E6008F"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"1"
+						ordinal    	0
+						Operation  	"GetScheduleL"
+						quidu      	"37C4119801FB"))))
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$25"
+				quid       	"37C41829018A"
+				class      	"Logical View::FAXS::CFaxServerMTM"
+				quidu      	"37BA871602B0"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$26"
+				quid       	"37C4182C0351"
+				class      	"Logical View::FAXS::CFaxServerMTM"
+				quidu      	"37BA871602B0"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$27"
+				quid       	"37C418300325"
+				class      	"Logical View::FAXS::CFaxServerMTM"
+				quidu      	"37BA871602B0"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$24"
+				quid       	"37C418360020"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"37C418810032"
+					supplier   	"$UNNAMED$28"
+					quidu      	"37C4183C028C"
+					messages   	(list Messages
+					    (object Message "DeleteSchedule()"
+						quid       	"37C418810033"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"3"
+						ordinal    	2
+						Operation  	"DeleteSchedule( )"
+						quidu      	"37C4128401D2")))
+				    (object Link
+					quid       	"37C418B30070"
+					supplier   	"$UNNAMED$29"
+					quidu      	"37C418AC011A"
+					messages   	(list Messages
+					    (object Message "SetStatus(KStatusWaiting)"
+						quid       	"37C418B30071"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"4"
+						ordinal    	3
+						Operation  	"SetStatus(KStatusNone)")
+					    (object Message "SetStatus(KStatusScheduled)"
+						quid       	"37C4194D0162"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"6"
+						ordinal    	5))))
+				class      	"Logical View::FAXS::CFaxServerMTM"
+				quidu      	"37BA871602B0"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$28"
+				quid       	"37C4183C028C"
+				class      	"Logical View::schsvr::RScheduler"
+				quidu      	"37C412680178"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$29"
+				quid       	"37C418AC011A"
+				class      	"Logical View::MSG::TMsvEntry"
+				quidu      	"37C414BE03D1"
+				persistence 	"Transient"
+				multi      	FALSE))))
+		logical_presentations 	(list unit_reference_list
+		    (object ClassDiagram "Fax Class Diagram"
+			quid       	"37BA832F00BF"
+			title      	"Fax Class Diagram"
+			zoom       	75
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::FAXS::CFaxServerMTM" @4
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(403, 2294)
+				label      	(object ItemLabel
+				    Parent_View 	@4
+				    location   	(141, 2152)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	524
+				    justify    	0
+				    label      	"CFaxServerMTM")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA871602B0"
+				width      	542
+				height     	308
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::MSG::CBaseServerMTM" @5
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(372, 837)
+				label      	(object ItemLabel
+				    Parent_View 	@5
+				    location   	(152, 408)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	440
+				    justify    	0
+				    label      	"CBaseServerMTM")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA8720023C"
+				width      	458
+				height     	882
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::FAXS::CSendFaxSession" @6
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1085, 1085)
+				label      	(object ItemLabel
+				    Parent_View 	@6
+				    location   	(828, 704)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	514
+				    justify    	0
+				    label      	"CSendFaxSession")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA84030272"
+				width      	532
+				height     	786
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::FAXS::CRecvFaxSession" @7
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1767, 961)
+				label      	(object ItemLabel
+				    Parent_View 	@7
+				    location   	(1580, 915)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	374
+				    justify    	0
+				    label      	"CRecvFaxSession")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA851502B3"
+				width      	392
+				height     	114
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::ETel::CFaxTransfer" @8
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1953, 372)
+				label      	(object ItemLabel
+				    Parent_View 	@8
+				    location   	(1815, 276)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	276
+				    justify    	0
+				    label      	"CFaxTransfer")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA852C0067"
+				width      	294
+				height     	216
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::FAXS::CFaxSession" @9
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1395, 372)
+				label      	(object ItemLabel
+				    Parent_View 	@9
+				    location   	(1186, 241)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	418
+				    justify    	0
+				    label      	"CFaxSession")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA850E019A"
+				width      	436
+				height     	286
+				annotation 	8
+				autoResize 	TRUE)
+			    (object InheritView "" @10
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"37BA85660038"
+				client     	@7
+				supplier   	@9
+				line_style 	0)
+			    (object InheritView "" @11
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"37BA85690277"
+				client     	@6
+				supplier   	@9
+				line_style 	0)
+			    (object AssociationViewNew "$UNNAMED$0" @12
+				location   	(1709, 372)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"37BA858003B1"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$2" @13
+					Parent_View 	@12
+					location   	(841, -279)
+					label      	(object SegLabel @14
+					    Parent_View 	@13
+					    location   	(1790, 331)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	0)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"37BA858102E1"
+					client     	@12
+					supplier   	@8
+					line_style 	0)
+				    (object RoleView "$UNNAMED$1" @15
+					Parent_View 	@12
+					location   	(841, -279)
+					label      	(object SegLabel @16
+					    Parent_View 	@15
+					    location   	(1628, 331)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	1)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"37BA858102E0"
+					client     	@12
+					supplier   	@9
+					line_style 	0)))
+			    (object ClassView "Class" "Logical View::Epoc Generic::CActive" @17
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(713, 155)
+				label      	(object ItemLabel
+				    Parent_View 	@17
+				    location   	(564, 58)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	298
+				    justify    	0
+				    label      	"CActive")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA85360133"
+				width      	316
+				height     	216
+				annotation 	8)
+			    (object InheritView "" @18
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"37BA855E01F9"
+				client     	@9
+				supplier   	@17
+				line_style 	0)
+			    (object InheritView "" @19
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"37BA87F30109"
+				client     	@5
+				supplier   	@17
+				line_style 	0)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @20
+				ShowCompartmentStereotypes 	TRUE
+				location   	(1116, 1705)
+				label      	(object ItemLabel
+				    Parent_View 	@20
+				    location   	(915, 1635)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	402
+				    justify    	0
+				    label      	"CMsvScheduleSend")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37CAB901016F"
+				width      	420
+				height     	162
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::SCHSEND::CScheduleBaseServerMtm" @21
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(372, 1705)
+				label      	(object ItemLabel
+				    Parent_View 	@21
+				    location   	(10, 1501)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	724
+				    justify    	0
+				    label      	"CScheduleBaseServerMtm")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"38312BAA0304"
+				width      	742
+				height     	432
+				annotation 	8
+				autoResize 	TRUE)
+			    (object InheritView "" @22
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383139D200C0"
+				client     	@4
+				supplier   	@21
+				line_style 	0)
+			    (object InheritView "" @23
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383139DD022E"
+				client     	@21
+				supplier   	@5
+				line_style 	0)
+			    (object AssociationViewNew "$UNNAMED$18" @24
+				location   	(824, 1705)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383271D50238"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$19" @25
+					Parent_View 	@24
+					location   	(483, 31)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"383271D503AA"
+					client     	@24
+					supplier   	@20
+					line_style 	0)
+				    (object RoleView "$UNNAMED$20" @26
+					Parent_View 	@24
+					location   	(483, 31)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"383271D503DC"
+					client     	@24
+					supplier   	@21
+					line_style 	0)))
+			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduledEntry" @27
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1767, 2201)
+				label      	(object ItemLabel
+				    Parent_View 	@27
+				    location   	(1555, 2155)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	424
+				    justify    	0
+				    label      	"CFaxScheduledEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"383270CC0331"
+				width      	442
+				height     	114
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduleSend" @28
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1116, 2201)
+				label      	(object ItemLabel
+				    Parent_View 	@28
+				    location   	(921, 2155)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	390
+				    justify    	0
+				    label      	"CFaxScheduleSend")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"383270B50049"
+				width      	408
+				height     	114
+				annotation 	8)
+			    (object InheritView "" @29
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383271F9032A"
+				client     	@28
+				supplier   	@20
+				line_style 	0)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @30
+				ShowCompartmentStereotypes 	TRUE
+				location   	(1767, 1705)
+				label      	(object ItemLabel
+				    Parent_View 	@30
+				    location   	(1556, 1635)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	422
+				    justify    	0
+				    label      	"CMsvScheduledEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3831245B0050"
+				width      	440
+				height     	162
+				annotation 	8
+				autoResize 	TRUE)
+			    (object InheritView "" @31
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832723F0353"
+				client     	@27
+				supplier   	@30
+				line_style 	0)))
+		    (object InteractionDiagram "SendingSequence"
+			mechanism_ref 	@1
+			quid       	"37BA86E60329"
+			title      	"SendingSequence"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	143
+			items      	(list diagram_item_list
+			    (object InterObjView "$UNNAMED$21" @32
+				location   	(806, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@32
+				    location   	(806, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	328
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				quidu      	"37BA8ACF022E"
+				width      	346
+				height     	4015
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @33
+				    location   	(806, 403)
+				    InterObjView 	@32
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @34
+				    location   	(806, 527)
+				    InterObjView 	@32
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @35
+				    location   	(806, 558)
+				    InterObjView 	@32
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @36
+				    location   	(806, 713)
+				    InterObjView 	@32
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @37
+				    location   	(806, 899)
+				    InterObjView 	@32
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @38
+				    location   	(806, 2976)
+				    InterObjView 	@32
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @39
+				    location   	(806, 2976)
+				    InterObjView 	@32
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @40
+				    location   	(806, 4030)
+				    InterObjView 	@32
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$22" @41
+				location   	(1302, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@41
+				    location   	(1302, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				quidu      	"37BA8B07009E"
+				width      	300
+				height     	4015
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @42
+				    location   	(1302, 713)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @43
+				    location   	(1302, 899)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @44
+				    location   	(1302, 1054)
+				    InterObjView 	@41
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @45
+				    location   	(1302, 1085)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @46
+				    location   	(1302, 1240)
+				    InterObjView 	@41
+				    height     	244
+				    y_coord    	184
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @47
+				    location   	(1302, 1364)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @48
+				    location   	(1302, 1519)
+				    InterObjView 	@41
+				    height     	213
+				    y_coord    	153
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @49
+				    location   	(1302, 1612)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @50
+				    location   	(1302, 1767)
+				    InterObjView 	@41
+				    height     	244
+				    y_coord    	184
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @51
+				    location   	(1302, 1891)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @52
+				    location   	(1302, 2077)
+				    InterObjView 	@41
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @53
+				    location   	(1302, 2108)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @54
+				    location   	(1302, 2294)
+				    InterObjView 	@41
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @55
+				    location   	(1302, 2325)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @56
+				    location   	(1302, 2573)
+				    InterObjView 	@41
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @57
+				    location   	(1302, 2759)
+				    InterObjView 	@41
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @58
+				    location   	(1302, 2790)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @59
+				    location   	(1302, 3162)
+				    InterObjView 	@41
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @60
+				    location   	(1302, 4030)
+				    InterObjView 	@41
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$23" @61
+				location   	(1798, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@61
+				    location   	(1798, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				quidu      	"37BA8B0E0062"
+				width      	300
+				height     	4015
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @62
+				    location   	(1798, 2573)
+				    InterObjView 	@61
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @63
+				    location   	(1798, 3162)
+				    InterObjView 	@61
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE))
+			    (object InterObjView "Client" @64
+				location   	(465, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@64
+				    location   	(465, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"Client")
+				icon_style 	"Icon"
+				quidu      	"37BA8B1F0251"
+				width      	300
+				height     	4015
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @65
+				    location   	(465, 403)
+				    InterObjView 	@64
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE))
+			    (object InterMessView "" @66
+				location   	(0, 403)
+				label      	(object SegLabel @67
+				    Parent_View 	@66
+				    location   	(635, 359)
+				    quidu      	"37BA8B38032B"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	403
+				    justify    	0
+				    label      	"CopyFromLocalL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@64
+				supplier   	@32
+				Focus_Src  	@65
+				Focus_Entry 	@33
+				origin     	(480, 403)
+				terminus   	(790, 403)
+				ordinal    	0)
+			    (object SelfMessView "" @68
+				location   	(0, 558)
+				label      	(object SegLabel @69
+				    Parent_View 	@68
+				    location   	(897, 514)
+				    quidu      	"37BA8BB5015E"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	325
+				    justify    	0
+				    label      	"SendFaxesL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@32
+				supplier   	@32
+				Focus_Src  	@34
+				Focus_Entry 	@35
+				origin     	(822, 558)
+				terminus   	(972, 558)
+				ordinal    	1)
+			    (object InterMessView "" @70
+				location   	(0, 713)
+				label      	(object SegLabel @71
+				    Parent_View 	@70
+				    location   	(1053, 669)
+				    quidu      	"37BA8C11028D"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	225
+				    justify    	0
+				    label      	"NewLC ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@32
+				supplier   	@41
+				Focus_Src  	@36
+				Focus_Entry 	@42
+				origin     	(821, 713)
+				terminus   	(1286, 713)
+				ordinal    	2)
+			    (object InterMessView "" @72
+				location   	(0, 899)
+				label      	(object SegLabel @73
+				    Parent_View 	@72
+				    location   	(1053, 855)
+				    quidu      	"37BA8C200048"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	206
+				    justify    	0
+				    label      	"StartL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@32
+				supplier   	@41
+				Focus_Src  	@37
+				Focus_Entry 	@43
+				origin     	(821, 899)
+				terminus   	(1286, 899)
+				ordinal    	3)
+			    (object SelfMessView "" @74
+				location   	(0, 2976)
+				label      	(object SegLabel @75
+				    Parent_View 	@74
+				    location   	(897, 2932)
+				    quidu      	"37BA8C2D0386"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	291
+				    justify    	0
+				    label      	"SetActive ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@32
+				supplier   	@32
+				Focus_Src  	@38
+				Focus_Entry 	@39
+				origin     	(822, 2976)
+				terminus   	(972, 2976)
+				ordinal    	12)
+			    (object SelfMessView "" @76
+				location   	(0, 1085)
+				label      	(object SegLabel @77
+				    Parent_View 	@76
+				    location   	(1393, 1041)
+				    quidu      	"37BA8C6B026E"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	375
+				    justify    	0
+				    label      	"SetSendMaskL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@41
+				supplier   	@41
+				Focus_Src  	@44
+				Focus_Entry 	@45
+				origin     	(1318, 1085)
+				terminus   	(1468, 1085)
+				ordinal    	4)
+			    (object SelfMessView "" @78
+				location   	(0, 1364)
+				label      	(object SegLabel @79
+				    Parent_View 	@78
+				    location   	(1393, 1320)
+				    quidu      	"37BA8C7A02E7"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	415
+				    justify    	0
+				    label      	"TransferNextFaxL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@41
+				supplier   	@41
+				Focus_Src  	@46
+				Focus_Entry 	@47
+				origin     	(1318, 1364)
+				terminus   	(1468, 1364)
+				ordinal    	5)
+			    (object SelfMessView "" @80
+				location   	(0, 1612)
+				label      	(object SegLabel @81
+				    Parent_View 	@80
+				    location   	(1361, 1569)
+				    quidu      	"37BA8C96000C"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	534
+				    justify    	0
+				    label      	"NextFaxFromSelectionL ( )"
+				    pctDist    	0.286667
+				    height     	44
+				    orientation 	0)
+				client     	@41
+				supplier   	@41
+				Focus_Src  	@48
+				Focus_Entry 	@49
+				origin     	(1318, 1612)
+				terminus   	(1468, 1612)
+				ordinal    	6)
+			    (object SelfMessView "" @82
+				location   	(0, 1891)
+				label      	(object SegLabel @83
+				    Parent_View 	@82
+				    location   	(1393, 1847)
+				    quidu      	"37BA8CDF0147"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	509
+				    justify    	0
+				    label      	"SendToNextRecipientL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@41
+				supplier   	@41
+				Focus_Src  	@50
+				Focus_Entry 	@51
+				origin     	(1318, 1891)
+				terminus   	(1468, 1891)
+				ordinal    	7)
+			    (object SelfMessView "" @84
+				location   	(0, 2108)
+				label      	(object SegLabel @85
+				    Parent_View 	@84
+				    location   	(1393, 2064)
+				    quidu      	"37BA8D0101AA"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	375
+				    justify    	0
+				    label      	"SetUpTransferL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@41
+				supplier   	@41
+				Focus_Src  	@52
+				Focus_Entry 	@53
+				origin     	(1318, 2108)
+				terminus   	(1468, 2108)
+				ordinal    	8)
+			    (object SelfMessView "" @86
+				location   	(0, 2325)
+				label      	(object SegLabel @87
+				    Parent_View 	@86
+				    location   	(1393, 2281)
+				    quidu      	"37BA8D1003AB"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	459
+				    justify    	0
+				    label      	"SetPhoneNumberL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@41
+				supplier   	@41
+				Focus_Src  	@54
+				Focus_Entry 	@55
+				origin     	(1318, 2325)
+				terminus   	(1468, 2325)
+				ordinal    	9)
+			    (object InterMessView "" @88
+				location   	(0, 2573)
+				label      	(object SegLabel @89
+				    Parent_View 	@88
+				    location   	(1550, 2529)
+				    quidu      	"37BA8D650318"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	206
+				    justify    	0
+				    label      	"Start ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@41
+				supplier   	@61
+				Focus_Src  	@56
+				Focus_Entry 	@62
+				origin     	(1317, 2573)
+				terminus   	(1782, 2573)
+				ordinal    	10)
+			    (object SelfMessView "" @90
+				location   	(0, 2790)
+				label      	(object SegLabel @91
+				    Parent_View 	@90
+				    location   	(1393, 2746)
+				    quidu      	"37BA8D970355"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	291
+				    justify    	0
+				    label      	"SetActive ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@41
+				supplier   	@41
+				Focus_Src  	@57
+				Focus_Entry 	@58
+				origin     	(1318, 2790)
+				terminus   	(1468, 2790)
+				ordinal    	11)
+			    (object InterMessView "" @92
+				location   	(0, 3162)
+				label      	(object SegLabel @93
+				    Parent_View 	@92
+				    location   	(1550, 3118)
+				    quidu      	"37BA8DA70271"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	262
+				    justify    	0
+				    label      	"DoRunL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	1)
+				client     	@61
+				supplier   	@41
+				Focus_Src  	@63
+				Focus_Entry 	@59
+				origin     	(1782, 3162)
+				terminus   	(1318, 3162)
+				ordinal    	13)
+			    (object InterMessView "" @94
+				location   	(0, 4030)
+				label      	(object SegLabel @95
+				    Parent_View 	@94
+				    location   	(1052, 3986)
+				    quidu      	"37BA8FD1017E"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	262
+				    justify    	0
+				    label      	"DoRunL ( )"
+				    pctDist    	0.504630
+				    height     	45
+				    orientation 	1)
+				client     	@41
+				supplier   	@32
+				Focus_Src  	@60
+				Focus_Entry 	@40
+				origin     	(1286, 4030)
+				terminus   	(822, 4030)
+				ordinal    	14)
+			    (object NoteView @96
+				location   	(1302, 3503)
+				label      	(object ItemLabel
+				    Parent_View 	@96
+				    location   	(902, 3262)
+				    nlines     	9
+				    max_width  	765
+				    label      	
+|- Stops fax transfer (calls StopFaxTransfer())
+|- Retries sending if it failed (calls TransferNextFaxL)
+|- Sends the last fax to the next recipient (calls SendToNextRecipient())
+|- If no more recipients, sends any remaining faxes in the selection (calls TransferNextFaxL())
+				    )
+				width      	825
+				height     	494)
+			    (object NoteView @97
+				location   	(1798, 2759)
+				label      	(object ItemLabel
+				    Parent_View 	@97
+				    location   	(1645, 2665)
+				    nlines     	3
+				    max_width  	271
+				    label      	"Sends a single fax to one recipient")
+				width      	331
+				height     	200)))
+		    (object InteractionDiagram "ReceivingSequence"
+			mechanism_ref 	@2
+			quid       	"37BA870803AA"
+			title      	"ReceivingSequence"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list))
+		    (object InteractionDiagram "ClientEditsAScheduledFax"
+			mechanism_ref 	@3
+			quid       	"37C418070091"
+			title      	"ClientEditsAScheduledFax"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object InterObjView "Client" @98
+				location   	(465, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@98
+				    location   	(465, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"Client")
+				icon_style 	"Icon"
+				quidu      	"37C4181D031D"
+				width      	300
+				height     	1070
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @99
+				    location   	(465, 341)
+				    InterObjView 	@98
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @100
+				    location   	(465, 403)
+				    InterObjView 	@98
+				    height     	182
+				    y_coord    	122
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @101
+				    location   	(465, 806)
+				    InterObjView 	@98
+				    height     	244
+				    y_coord    	184
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$24" @102
+				location   	(806, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@102
+				    location   	(806, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	328
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				quidu      	"37C418360020"
+				width      	346
+				height     	1070
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @103
+				    location   	(806, 341)
+				    InterObjView 	@102
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @104
+				    location   	(806, 465)
+				    InterObjView 	@102
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @105
+				    location   	(806, 558)
+				    InterObjView 	@102
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @106
+				    location   	(806, 713)
+				    InterObjView 	@102
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @107
+				    location   	(806, 930)
+				    InterObjView 	@102
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @108
+				    location   	(806, 1023)
+				    InterObjView 	@102
+				    height     	182
+				    y_coord    	122
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$28" @109
+				location   	(1488, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@109
+				    location   	(1488, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				quidu      	"37C4183C028C"
+				width      	300
+				height     	1070
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @110
+				    location   	(1488, 589)
+				    InterObjView 	@109
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$29" @111
+				location   	(1147, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@111
+				    location   	(1147, 217)
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				quidu      	"37C418AC011A"
+				width      	300
+				height     	1070
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @112
+				    location   	(1147, 713)
+				    InterObjView 	@111
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @113
+				    location   	(1147, 1085)
+				    InterObjView 	@111
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE))
+			    (object InterMessView "" @114
+				location   	(0, 465)
+				label      	(object SegLabel @115
+				    Parent_View 	@114
+				    location   	(633, 422)
+				    quidu      	"37C4184102B2"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	378
+				    justify    	0
+				    label      	"DeleteScheduleL()"
+				    pctDist    	0.495146
+				    height     	44
+				    orientation 	0)
+				client     	@98
+				supplier   	@102
+				Focus_Src  	@100
+				Focus_Entry 	@104
+				origin     	(480, 465)
+				terminus   	(790, 465)
+				ordinal    	1)
+			    (object InterMessView "" @116
+				location   	(0, 589)
+				label      	(object SegLabel @117
+				    Parent_View 	@116
+				    location   	(1146, 545)
+				    quidu      	"37C418810033"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	356
+				    justify    	0
+				    label      	"DeleteSchedule()"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@102
+				supplier   	@109
+				Focus_Src  	@105
+				Focus_Entry 	@110
+				origin     	(821, 589)
+				terminus   	(1472, 589)
+				ordinal    	2)
+			    (object InterMessView "" @118
+				location   	(0, 930)
+				label      	(object SegLabel @119
+				    Parent_View 	@118
+				    location   	(635, 886)
+				    quidu      	"37C4188A0071"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	384
+				    justify    	0
+				    label      	"ScheduleEntryL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@98
+				supplier   	@102
+				Focus_Src  	@101
+				Focus_Entry 	@107
+				origin     	(480, 930)
+				terminus   	(790, 930)
+				ordinal    	4)
+			    (object InterMessView "" @120
+				location   	(0, 713)
+				label      	(object SegLabel @121
+				    Parent_View 	@120
+				    location   	(976, 669)
+				    quidu      	"37C418B30071"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	537
+				    justify    	0
+				    label      	"SetStatus(KStatusWaiting)"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@102
+				supplier   	@111
+				Focus_Src  	@106
+				Focus_Entry 	@112
+				origin     	(821, 713)
+				terminus   	(1131, 713)
+				ordinal    	3)
+			    (object InterMessView "" @122
+				location   	(0, 1085)
+				label      	(object SegLabel @123
+				    Parent_View 	@122
+				    location   	(976, 1041)
+				    quidu      	"37C4194D0162"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	590
+				    justify    	0
+				    label      	"SetStatus(KStatusScheduled)"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@102
+				supplier   	@111
+				Focus_Src  	@108
+				Focus_Entry 	@113
+				origin     	(821, 1085)
+				terminus   	(1131, 1085)
+				ordinal    	5)
+			    (object InterMessView "" @124
+				location   	(0, 341)
+				label      	(object SegLabel @125
+				    Parent_View 	@124
+				    location   	(635, 297)
+				    quidu      	"37C419E6008F"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	353
+				    justify    	0
+				    label      	"GetScheduleL ( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				client     	@98
+				supplier   	@102
+				Focus_Src  	@99
+				Focus_Entry 	@103
+				origin     	(480, 341)
+				terminus   	(790, 341)
+				ordinal    	0)
+			    (object NoteView @126
+				location   	(992, 1302)
+				label      	(object ItemLabel
+				    Parent_View 	@126
+				    location   	(839, 1243)
+				    nlines     	2
+				    max_width  	271
+				    label      	"Etc...")
+				width      	331
+				height     	131)))))
+	    (object Class_Category "MSG"
+		quid       	"37BA8AAA0312"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "CBaseServerMTM"
+			quid       	"37BA8720023C"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"37BA87F30109"
+				supplier   	"Logical View::Epoc Generic::CActive"
+				quidu      	"37BA85360133"))
+			operations 	(list Operations
+			    (object Operation "CopyFromLocalL"
+				quid       	"37BA88AA0347"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CopyToLocalL"
+				quid       	"37BA88AC010F"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CopyWithinServiceL"
+				quid       	"37BA88AE01BD"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "MoveToLocalL"
+				quid       	"37BA88AE0267"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "MoveFromLocalL"
+				quid       	"37BA88AE0339"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "MoveWithinServiceL"
+				quid       	"37BA88AE03E3"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "DeleteL"
+				quid       	"37BA88AF00B0"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "DeleteAllL"
+				quid       	"37BA88AF016E"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CreateL"
+				quid       	"37BA88EA032B"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ChangeL"
+				quid       	"37BA88F6008A"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "StartCommandL"
+				quid       	"37BA88F701E0"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Progress"
+				quid       	"37BA88F7032A"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CommandExpected"
+				quid       	"37BA88F80014"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetInitialEntry"
+				quid       	"37BA88F80169"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			language   	"C++")
+		    (object Class "CClient"
+			quid       	"37C411E603B6"
+			language   	"C++")
+		    (object Class "TMsvEntry"
+			quid       	"37C414BE03D1"
+			operations 	(list Operations
+			    (object Operation "SetOffPeak"
+				quid       	"37D5207A01FA"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "OffPeak"
+				quid       	"37D5208201A1"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetScheduled"
+				quid       	"37D52087005E"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Scheduled"
+				quid       	"37D5208F0006"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetSendState"
+				quid       	"37D52092038F"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SendState"
+				quid       	"37D5209A012E"
+				result     	"TInt"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			language   	"C++")
+		    (object Class "CMsvSession"
+			quid       	"3833D3690344"
+			operations 	(list Operations
+			    (object Operation "TransferCommandL"
+				quid       	"3833D37A0366"
+				parameters 	(list Parameters
+				    (object Parameter "aSelection"
+					type       	"CMsvEntrySelection&")
+				    (object Parameter "aCommandId"
+					type       	"TInt")
+				    (object Parameter "aParameter"
+					type       	"TDesC8&")
+				    (object Parameter "aStatus"
+					type       	"TRequestStatus"))
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "OpenL"
+				quid       	"3833D3840003"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))))
+		logical_presentations 	(list unit_reference_list))
+	    (object Class_Category "SCHSEND"
+		quid       	"38170EC30072"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "TMsvSendErrorAction"
+			quid       	"380ACFBF02B6"
+			operations 	(list Operations
+			    (object Operation "ExternalizeL"
+				quid       	"380AD17001BF"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "InternalizeL"
+				quid       	"380AD175032E"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "TMsvSendErrorAction"
+				quid       	"380AD1850088"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Reset"
+				quid       	"380AD1CB00F7"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iError"
+				quid       	"380ACFD9017D"
+				type       	"TInt"
+				exportControl 	"Public")
+			    (object ClassAttribute "iAction"
+				quid       	"380ACFF30012"
+				type       	"TMsvSendAction"
+				exportControl 	"Public")
+			    (object ClassAttribute "iAttempts"
+				quid       	"380AD11C031C"
+				type       	"TMsvSendAttempts"
+				exportControl 	"Public")
+			    (object ClassAttribute "iAttemptSpacing"
+				quid       	"380AD1280265"
+				type       	"TMsvSendAttemptSpacing"
+				exportControl 	"Public")
+			    (object ClassAttribute "iMaxAttempts"
+				quid       	"380AD15503AA"
+				type       	"TUint"
+				exportControl 	"Public")
+			    (object ClassAttribute "iVersion"
+				quid       	"380AD1620327"
+				type       	"TUint16"
+				exportControl 	"Public"))
+			language   	"C++")
+		    (object Class "TMsvOffPeakTime"
+			quid       	"380ACD9B034F"
+			operations 	(list Operations
+			    (object Operation "Hour"
+				quid       	"380ACF010104"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetHour"
+				quid       	"380ACF0503D1"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Minute"
+				quid       	"380ACF09011A"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetMinute"
+				quid       	"380ACF0E0027"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ValidityPeriod"
+				quid       	"380ACF120131"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetValidityPeriod"
+				quid       	"380ACF1603AE"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Day"
+				quid       	"380ACF1C0366"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetDay"
+				quid       	"380ACF350195"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Version"
+				quid       	"380ACF3A01ED"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetVersion"
+				quid       	"380ACF430005"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "NextTimeInclusive"
+				quid       	"380AD29E00AA"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iHour"
+				quid       	"380ACDF20105"
+				type       	"TUint8")
+			    (object ClassAttribute "iMinute"
+				quid       	"380ACE070141"
+				type       	"TUint8")
+			    (object ClassAttribute "iDay"
+				quid       	"380ACE110358"
+				type       	"TDay")
+			    (object ClassAttribute "iValidityPeriod"
+				quid       	"380ACE3F01BA"
+				type       	"TTimeIntervalMinutes"))
+			language   	"C++")
+		    (object Class "TMsvScheduledSendData"
+			quid       	"37D52D630383"
+			used_nodes 	(list uses_relationship_list
+			    (object Uses_Relationship
+				quid       	"383138FC00EA"
+				supplier   	"Logical View::SCHSEND::CMsvScheduledEntry"
+				quidu      	"3831245B0050"))
+			operations 	(list Operations
+			    (object Operation "Reset"
+				quid       	"380F12150076"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "StoreL"
+				quid       	"380F121D0352"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RestoreL"
+				quid       	"380F12220060"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RemoveL"
+				quid       	"380F12350021"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Retries"
+				quid       	"383128750209"
+				result     	"TInt"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "IncreaseRetries"
+				quid       	"3831288102EC"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ResetRetries"
+				quid       	"3831288A021D"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "IsReset"
+				quid       	"383128B1034F"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iTaskID"
+				quid       	"37D52D790276"
+				type       	"TInt"
+				exportControl 	"Public")
+			    (object ClassAttribute "iRef"
+				quid       	"37D52D80029E"
+				type       	"TSchedulerItemRef"
+				exportControl 	"Public")
+			    (object ClassAttribute "iRetryCount"
+				quid       	"37D52D850288"
+				type       	"TInt"
+				exportControl 	"Protected"))
+			language   	"C++")
+		    (object Class "CMsvScheduleSettings"
+			quid       	"37D5214C0300"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"38327E410367"
+				supplier   	"Logical View::Epoc Generic::CBase"
+				quidu      	"3832725B0367"))
+			operations 	(list Operations
+			    (object Operation "NewL"
+				quid       	"3831282D00B1"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Reset"
+				quid       	"380AD27501C4"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetSendExe"
+				quid       	"37D521C1001A"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SendExe"
+				quid       	"37D521CA0167"
+				result     	"TFileName"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetIntervalType"
+				quid       	"37F48F1102B4"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "IntervalType"
+				quid       	"37F48F2C015E"
+				result     	"TIntervalType"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetPriority"
+				quid       	"37F48F38031E"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Priority"
+				quid       	"37F48F440362"
+				result     	"TInt"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetValidityPeriod"
+				quid       	"380F11A7009F"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ValidityPeriod"
+				quid       	"380F11AD0397"
+				result     	"TTimeIntervalMinutes"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetLongInterval"
+				quid       	"3831262D024F"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "LongInterval"
+				quid       	"3831262D026D"
+				result     	"TTimeIntervalSeconds"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetShortInterval"
+				quid       	"3831262D0281"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ShortInterval"
+				quid       	"3831262D029F"
+				result     	"TTimeIntervalSeconds"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetVariableIntervalsL"
+				quid       	"3831262D02B3"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "VariableIntervals"
+				quid       	"3831262D02D1"
+				result     	"CArrayFixFlat<TTimeIntervalSeconds>"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Latency"
+				quid       	"3831290C0133"
+				result     	"TTimeIntervalSeconds"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetLatency"
+				quid       	"3831291001D9"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "StoreL"
+				quid       	"3831293603C9"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RestoreL"
+				quid       	"3831293B020D"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iSendExe"
+				quid       	"37D521D30124"
+				type       	"TFileName")
+			    (object ClassAttribute "iValidityPeriod"
+				quid       	"37F489FF002D"
+				type       	"TTimeIntervalMinutes")
+			    (object ClassAttribute "iIntervalType"
+				quid       	"37F48A19030F"
+				type       	"TIntervalType")
+			    (object ClassAttribute "iPriority"
+				quid       	"37F48EC3037A"
+				type       	"TInt")
+			    (object ClassAttribute "iVariableIntervals"
+				quid       	"383127AA0008"
+				type       	"CArrayFixFlat<TTimeIntervalSeconds>")
+			    (object ClassAttribute "iDefault"
+				quid       	"383127AA001C"
+				type       	"TMsvSendErrorAction")
+			    (object ClassAttribute "iLongInterval"
+				quid       	"383127AA003A"
+				type       	"TTimeIntervalSeconds")
+			    (object ClassAttribute "iShortInterval"
+				quid       	"383127AA004E"
+				type       	"TTimeIntervalSeconds"))
+			language   	"C++")
+		    (object Class "CMsvScheduleSend"
+			quid       	"37CAB901016F"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"3832736C019D"
+				supplier   	"Logical View::Epoc Generic::CBase"
+				quidu      	"3832725B0367"))
+			operations 	(list Operations
+			    (object Operation "ScheduleL"
+				quid       	"37CAB92302AF"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ReScheduleL"
+				quid       	"37CAB93A03AC"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "DeleteScheduleL"
+				quid       	"37CAB9400061"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CheckScheduleL"
+				quid       	"37CAB92900EB"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SendingCompleteL"
+				quid       	"380ED7670011"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ScheduleSettings"
+				quid       	"380ED77B036D"
+				result     	"TMsvScheduleSettings&"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "OffPeakTimes"
+				quid       	"3831210603E3"
+				result     	"CMsvOffPeakTimes"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SendErrorActions"
+				quid       	"3831210C01D9"
+				result     	"CMsvSendErrorActions"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RestoreL"
+				quid       	"383123A90181"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "GetMessageL"
+				quid       	"383123C802B2"
+				parameters 	(list Parameters
+				    (object Parameter "aId"
+					type       	"TMsvId"))
+				result     	"CMsvScheduledEntry"
+				qualification 	"const"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "GetNextAttempt"
+				quid       	"383294FC0129"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "ScheduleEntryL"
+				quid       	"3833C91300A0"
+				concurrency 	"Sequential"
+				opExportControl 	"Private"
+				uid        	0)
+			    (object Operation "CreateScheduleL"
+				quid       	"3833C993019F"
+				concurrency 	"Sequential"
+				opExportControl 	"Private"
+				uid        	0)
+			    (object Operation "DeleteScheduleForEntryL"
+				quid       	"3833CD430228"
+				concurrency 	"Sequential"
+				opExportControl 	"Private"
+				uid        	0)
+			    (object Operation "DoScheduleL"
+				quid       	"3833CEBB035F"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "GetOffPeakL"
+				quid       	"3833D0C400DD"
+				concurrency 	"Sequential"
+				opExportControl 	"Private"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iRegistered"
+				quid       	"37D5215D028D"
+				type       	"TBool"
+				initv      	"EFalse"
+				exportControl 	"Protected")
+			    (object ClassAttribute "iSettings"
+				quid       	"37D522110245"
+				type       	"TMsvScheduleSettings"
+				exportControl 	"Protected")
+			    (object ClassAttribute "iScheduler"
+				quid       	"37F490AC03C3"
+				type       	"RScheduler"
+				exportControl 	"Protected")
+			    (object ClassAttribute "iOffPeakTimes"
+				quid       	"380B371C0111"
+				type       	"CMsvOffPeakTimes"
+				exportControl 	"Protected")
+			    (object ClassAttribute "iErrorActions"
+				quid       	"383129EB02F7"
+				type       	"CMsvSendErrorActions"
+				exportControl 	"Protected")
+			    (object ClassAttribute "iServerEntry"
+				quid       	"38312A0A012F"
+				type       	"CMsvServerEntry"
+				exportControl 	"Protected"))
+			language   	"C++")
+		    (object Class "CMsvSendErrorActions"
+			quid       	"380ACFCA026C"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"38329DE601F3"
+				supplier   	"Logical View::Epoc Generic::CBase"
+				quidu      	"3832725B0367"))
+			operations 	(list Operations
+			    (object Operation "NewL"
+				quid       	"380AD33E023B"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "AddSendErrorActionL"
+				quid       	"380AD3550298"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RemoveSendErrorActionL"
+				quid       	"380AD366038D"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "GetSendErrorActionL"
+				quid       	"380AD373004D"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "StoreL"
+				quid       	"380AD37A0007"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RestoreL"
+				quid       	"380AD37D023C"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Default"
+				quid       	"381435F50305"
+				result     	"TMsvSendErrorAction"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetDefault"
+				quid       	"381435FE009C"
+				parameters 	(list Parameters
+				    (object Parameter "aAction"
+					type       	"TMsvSendErrorAction"))
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RestoreFromResourceL"
+				quid       	"383127450324"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetErrorsL"
+				quid       	"3831275E02E4"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Errors"
+				quid       	"3831276B03C9"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iErrors"
+				quid       	"380AD1950226"
+				type       	"CArrayFixFlat<TMsvSendErrorAction>")
+			    (object ClassAttribute "iDefault"
+				quid       	"383127B4028D"
+				type       	"TMsvSendErrorAction"))
+			language   	"C++")
+		    (object Class "CMsvOffPeakTimes"
+			quid       	"380ACDA80072"
+			operations 	(list Operations
+			    (object Operation "CMsvOffPeakTimes"
+				quid       	"380ACEA70227"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "StoreL"
+				quid       	"380ACEB50083"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RestoreL"
+				quid       	"380ACED003DF"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "GetNextOffPeakTime"
+				quid       	"380ACEDD0370"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Version"
+				quid       	"380ACEED02A0"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetVersion"
+				quid       	"380ACEF1031E"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			language   	"C++")
+		    (object Class "CMsvScheduledEntry"
+			quid       	"3831245B0050"
+			documentation 	
+|Abstract base class.
+|Must be implemented by the server Mtm.
+			
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"3832884602CF"
+				supplier   	"Logical View::Epoc Generic::CBase"
+				quidu      	"3832725B0367"))
+			used_nodes 	(list uses_relationship_list
+			    (object Uses_Relationship
+				quid       	"383138B70376"
+				supplier   	"Logical View::SCHSEND::TMsvScheduledSendData"
+				quidu      	"37D52D630383"))
+			operations 	(list Operations
+			    (object Operation "CanSendToAnyRecipients"
+				quid       	"383124B6003D"
+				documentation 	"Pure Virtual"
+				result     	"TBool"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RecipientsResetRetries"
+				quid       	"383125230301"
+				documentation 	"Pure Virtual"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RecipientsIncreaseRetries"
+				quid       	"3831253502AD"
+				documentation 	"Pure Virtual"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "StoreL"
+				quid       	"3831255803B1"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RestoreL"
+				quid       	"3831255C03CB"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Entry"
+				quid       	"383125700171"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Scheduled"
+				quid       	"3831257302DE"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetScheduled"
+				quid       	"3831257D0057"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "Id"
+				quid       	"3831258102E8"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "OffPeak"
+				quid       	"3831258A02F5"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ScheduleDate"
+				quid       	"3831258E028C"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetScheduleDate"
+				quid       	"38312598015A"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SendingState"
+				quid       	"3832A62C01F8"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "SetSendingState"
+				quid       	"3832A6320305"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iEntry"
+				quid       	"383125AB0071"
+				type       	"TMsvEntry")
+			    (object ClassAttribute "iData"
+				quid       	"383125B801C5"
+				type       	"TMsvEntryScheduleData")))
+		    (object Class "TMsvSchedulePackage"
+			quid       	"3831294C0208"
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iId"
+				quid       	"383129620386"
+				type       	"TMsvId"
+				exportControl 	"Public")
+			    (object ClassAttribute "iCommandId"
+				quid       	"3831297401AB"
+				exportControl 	"Public")
+			    (object ClassAttribute "iParameter"
+				quid       	"38312981029A"
+				type       	"TBufC8<KMaxParameterLength>"
+				exportControl 	"Public")))
+		    (object Class "CScheduleBaseServerMtm"
+			quid       	"38312BAA0304"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"383139DD022E"
+				supplier   	"Logical View::MSG::CBaseServerMTM"
+				quidu      	"37BA8720023C"))
+			operations 	(list Operations
+			    (object Operation "SendScheduledL"
+				quid       	"383137BF02BB"
+				documentation 	"Pure Virtual"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "ScheduleL"
+				quid       	"383137C802DC"
+				documentation 	"Pure Virtual"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "RestoreScheduleSettingsL"
+				quid       	"383137D100C2"
+				documentation 	"Pure Virtual"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0)
+			    (object Operation "ConstructL"
+				quid       	"38313807011A"
+				documentation 	"Pure Virtual"
+				concurrency 	"Sequential"
+				opExportControl 	"Protected"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iScheduleSend"
+				quid       	"383137DF032F"
+				type       	"CMsvScheduleSend"
+				exportControl 	"Protected")))
+		    (object Association "$UNNAMED$30"
+			quid       	"383139630034"
+			roles      	(list role_list
+			    (object Role "$UNNAMED$31"
+				quid       	"3831396303A5"
+				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
+				quidu      	"37CAB901016F"
+				is_aggregate 	TRUE)
+			    (object Role "$UNNAMED$32"
+				quid       	"3831396303C3"
+				supplier   	"Logical View::SCHSEND::CMsvSendErrorActions"
+				quidu      	"380ACFCA026C")))
+		    (object Association "$UNNAMED$33"
+			quid       	"3832882603D7"
+			roles      	(list role_list
+			    (object Role "$UNNAMED$34"
+				quid       	"383288270194"
+				supplier   	"Logical View::SCHSEND::CMsvScheduledEntry"
+				quidu      	"3831245B0050"
+				is_aggregate 	TRUE)
+			    (object Role "$UNNAMED$35"
+				quid       	"3832882701B2"
+				supplier   	"Logical View::SCHSEND::TMsvScheduledSendData"
+				quidu      	"37D52D630383")))
+		    (object Association "$UNNAMED$36"
+			quid       	"3832B2AB018A"
+			roles      	(list role_list
+			    (object Role "$UNNAMED$37"
+				quid       	"3832B2AB02FD"
+				supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
+				quidu      	"38312BAA0304"
+				is_navigable 	TRUE
+				is_aggregate 	TRUE)
+			    (object Role "$UNNAMED$38"
+				quid       	"3832B2AB031B"
+				supplier   	"Logical View::SCHSEND::CMsvScheduleSend"
+				quidu      	"37CAB901016F"
+				is_navigable 	TRUE)))
+		    (object Mechanism @127
+			logical_models 	(list unit_reference_list
+			    (object Object "Client"
+				quid       	"3833C72F019F"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"3833C757003E"
+					supplier   	"$UNNAMED$39"
+					quidu      	"3833C74503C7"
+					messages   	(list Messages
+					    (object Message "StartCommandL( )"
+						quid       	"3833C757003F"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"1"
+						ordinal    	0
+						quidu      	"37BA88F701E0"))))
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$39"
+				quid       	"3833C74503C7"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"3833C7620274"
+					supplier   	"$UNNAMED$40"
+					quidu      	"3833C7510374"
+					messages   	(list Messages
+					    (object Message "ScheduleL( )"
+						quid       	"3833C77A00CA"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"3"
+						ordinal    	2
+						quidu      	"37CAB92302AF")))
+				    (object Link
+					quid       	"3833C76B028B"
+					supplier   	"$UNNAMED$39"
+					quidu      	"3833C74503C7"
+					messages   	(list Messages
+					    (object Message "ScheduleL( )"
+						quid       	"3833C76B028C"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"2"
+						ordinal    	1
+						quidu      	"383137C802DC"))))
+				class      	"Logical View::SCHSEND::CScheduleBaseServerMtm"
+				quidu      	"38312BAA0304"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$40"
+				quid       	"3833C7510374"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"3833C7C4015D"
+					supplier   	"$UNNAMED$40"
+					quidu      	"3833C7510374"
+					messages   	(list Messages
+					    (object Message "GetMessageL(TMsvId)"
+						quid       	"3833C7C4015E"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"4"
+						ordinal    	3
+						quidu      	"383123C802B2")
+					    (object Message "DeleteScheduleForEntryL( )"
+						quid       	"3833CD33008B"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"5"
+						ordinal    	4
+						quidu      	"3833CD430228")
+					    (object Message "SendingCompleteL( )"
+						quid       	"3833CD6C030D"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"7"
+						ordinal    	6
+						quidu      	"380ED7670011")
+					    (object Message "DoScheduleL( )"
+						quid       	"3833CECF0119"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"8"
+						ordinal    	7
+						quidu      	"3833CEBB035F")
+					    (object Message "CreateScheduleL( )"
+						quid       	"3833D1A402C0"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"9"
+						ordinal    	8
+						quidu      	"3833C993019F")
+					    (object Message "ScheduleEntryL( )"
+						quid       	"3833D1B40205"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"11"
+						ordinal    	10
+						quidu      	"3833C91300A0")))
+				    (object Link
+					quid       	"3833C87E0236"
+					supplier   	"$UNNAMED$41"
+					quidu      	"3833C80E025D"
+					messages   	(list Messages
+					    (object Message "DeleteTask( )"
+						quid       	"3833CDA602A3"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"6"
+						ordinal    	5
+						quidu      	"37C412850039")
+					    (object Message "CreatePersistentSchedule( )"
+						quid       	"3833D1AD0129"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"10"
+						ordinal    	9
+						quidu      	"37C4128400A6")
+					    (object Message "ScheduleTask( )"
+						quid       	"3833D1BB0183"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"12"
+						ordinal    	11
+						quidu      	"37C4137A01AE"))))
+				class      	"Logical View::SCHSEND::CMsvScheduleSend"
+				quidu      	"37CAB901016F"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$41"
+				quid       	"3833C80E025D"
+				class      	"Logical View::schsvr::RScheduler"
+				quidu      	"37C412680178"
+				persistence 	"Transient"
+				multi      	FALSE))))
+		logical_presentations 	(list unit_reference_list
+		    (object ClassDiagram "Scheduled Sending"
+			quid       	"37D522B800D3"
+			title      	"Scheduled Sending"
+			zoom       	75
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	519
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::MSG::TMsvEntry" @128
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(2449, 3069)
+				label      	(object ItemLabel
+				    Parent_View 	@128
+				    location   	(2287, 2845)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	324
+				    justify    	0
+				    label      	"TMsvEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37C414BE03D1"
+				width      	342
+				height     	472
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::TMsvScheduledSendData" @129
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(527, 3162)
+				label      	(object ItemLabel
+				    Parent_View 	@129
+				    location   	(274, 2838)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	506
+				    justify    	0
+				    label      	"TMsvScheduledSendData")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37D52D630383"
+				width      	524
+				height     	672
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @130
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1643, 3162)
+				label      	(object ItemLabel
+				    Parent_View 	@130
+				    location   	(1335, 2737)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	616
+				    justify    	0
+				    label      	"CMsvScheduledEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3831245B0050"
+				width      	634
+				height     	874
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::TMsvOffPeakTime" @131
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(2542, 2232)
+				label      	(object ItemLabel
+				    Parent_View 	@131
+				    location   	(2178, 1801)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	728
+				    justify    	0
+				    label      	"TMsvOffPeakTime")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACD9B034F"
+				width      	746
+				height     	886
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvOffPeakTimes" @132
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1612, 2232)
+				label      	(object ItemLabel
+				    Parent_View 	@132
+				    location   	(1270, 2003)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	684
+				    justify    	0
+				    label      	"CMsvOffPeakTimes")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACDA80072"
+				width      	702
+				height     	482
+				annotation 	8)
+			    (object AssociationViewNew "$UNNAMED$6" @133
+				location   	(2065, 2232)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"380ACF7A0195"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$8" @134
+					Parent_View 	@133
+					location   	(1445, -868)
+					label      	(object SegLabel @135
+					    Parent_View 	@134
+					    location   	(2147, 2191)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	0)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380ACF7B03E5"
+					client     	@133
+					supplier   	@131
+					line_style 	0)
+				    (object RoleView "$UNNAMED$7" @136
+					Parent_View 	@133
+					location   	(1445, -868)
+					label      	(object SegLabel @137
+					    Parent_View 	@136
+					    location   	(1983, 2191)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	1)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380ACF7B03BD"
+					client     	@133
+					supplier   	@132
+					line_style 	0)))
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSettings" @138
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(558, 806)
+				label      	(object ItemLabel
+				    Parent_View 	@138
+				    location   	(31, 38)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	1054
+				    justify    	0
+				    label      	"CMsvScheduleSettings")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37D5214C0300"
+				width      	1072
+				height     	1560
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::TMsvSendErrorAction" @139
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1674, 341)
+				label      	(object ItemLabel
+				    Parent_View 	@139
+				    location   	(1261, 42)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	826
+				    justify    	0
+				    label      	"TMsvSendErrorAction")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACFBF02B6"
+				width      	844
+				height     	622
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @140
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(558, 2232)
+				label      	(object ItemLabel
+				    Parent_View 	@140
+				    location   	(202, 1758)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	712
+				    justify    	0
+				    label      	"CMsvScheduleSend")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37CAB901016F"
+				width      	730
+				height     	972
+				annotation 	8)
+			    (object AssociationViewNew "$UNNAMED$9" @141
+				location   	(1091, 2232)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"380ACF86025A"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$11" @142
+					Parent_View 	@141
+					location   	(657, -31)
+					label      	(object SegLabel @143
+					    Parent_View 	@142
+					    location   	(1225, 2274)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	1)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380ACF870111"
+					client     	@141
+					supplier   	@132
+					line_style 	0)
+				    (object RoleView "$UNNAMED$10" @144
+					Parent_View 	@141
+					location   	(657, -31)
+					label      	(object SegLabel @145
+					    Parent_View 	@144
+					    location   	(958, 2274)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	0)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380ACF8700D5"
+					client     	@141
+					supplier   	@140
+					line_style 	0)))
+			    (object AssociationViewNew "$UNNAMED$3" @146
+				location   	(558, 1665)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"37D521FE03E3"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$5" @147
+					Parent_View 	@146
+					location   	(124, -598)
+					label      	(object SegLabel @148
+					    Parent_View 	@147
+					    location   	(517, 1602)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	0)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"37D52200006A"
+					client     	@146
+					supplier   	@138
+					line_style 	0)
+				    (object RoleView "$UNNAMED$4" @149
+					Parent_View 	@146
+					location   	(124, -598)
+					label      	(object SegLabel @150
+					    Parent_View 	@149
+					    location   	(517, 1729)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	1)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"37D522000038"
+					client     	@146
+					supplier   	@140
+					line_style 	0)))
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvSendErrorActions" @151
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1674, 1302)
+				label      	(object ItemLabel
+				    Parent_View 	@151
+				    location   	(1245, 877)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	858
+				    justify    	0
+				    label      	"CMsvSendErrorActions")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACFCA026C"
+				width      	876
+				height     	874
+				annotation 	8)
+			    (object AssociationViewNew "$UNNAMED$12" @152
+				location   	(1674, 758)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"380B36C9011B"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$14" @153
+					Parent_View 	@152
+					location   	(186, -327)
+					label      	(object SegLabel @154
+					    Parent_View 	@153
+					    location   	(1716, 673)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	1)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380B36C902AC"
+					client     	@152
+					supplier   	@139
+					line_style 	0)
+				    (object RoleView "$UNNAMED$13" @155
+					Parent_View 	@152
+					location   	(186, -327)
+					label      	(object SegLabel @156
+					    Parent_View 	@155
+					    location   	(1716, 843)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	0)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380B36C90266"
+					client     	@152
+					supplier   	@151
+					line_style 	0)))
+			    (object AssociationViewNew "$UNNAMED$30" @157
+				location   	(1079, 1795)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383139630034"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$31" @158
+					Parent_View 	@157
+					location   	(-688, 307)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3831396303A5"
+					client     	@157
+					supplier   	@140
+					line_style 	0)
+				    (object RoleView "$UNNAMED$32" @159
+					Parent_View 	@157
+					location   	(-688, 307)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3831396303C3"
+					client     	@157
+					supplier   	@151
+					line_style 	0)))))
+		    (object ClassDiagram "CMsvScheduleSend"
+			quid       	"3832735803C5"
+			title      	"CMsvScheduleSend"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @160
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(589, 899)
+				label      	(object ItemLabel
+				    Parent_View 	@160
+				    location   	(218, 418)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	742
+				    justify    	0
+				    label      	"CMsvScheduleSend")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37CAB901016F"
+				width      	760
+				height     	986
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @161
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(589, 155)
+				label      	(object ItemLabel
+				    Parent_View 	@161
+				    location   	(441, 81)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	296
+				    justify    	0
+				    label      	"CBase")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3832725B0367"
+				width      	314
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @162
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832736C019D"
+				client     	@160
+				supplier   	@161
+				line_style 	0)
+			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduleSend" @163
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1488, 899)
+				label      	(object ItemLabel
+				    Parent_View 	@163
+				    location   	(1290, 825)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	396
+				    justify    	0
+				    label      	"CFaxScheduleSend")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"383270B50049"
+				width      	414
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @164
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383271F9032A"
+				client     	@163
+				supplier   	@160
+				line_style 	0)))
+		    (object ClassDiagram "CMsvScheduleSettings"
+			quid       	"38327E2602FA"
+			title      	"CMsvScheduleSettings"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSettings" @165
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1302, 806)
+				label      	(object ItemLabel
+				    Parent_View 	@165
+				    location   	(759, 50)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	1086
+				    justify    	0
+				    label      	"CMsvScheduleSettings")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37D5214C0300"
+				width      	1104
+				height     	1536
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @166
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(341, 806)
+				label      	(object ItemLabel
+				    Parent_View 	@166
+				    location   	(193, 732)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	296
+				    justify    	0
+				    label      	"CBase")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3832725B0367"
+				width      	314
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @167
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"38327E410367"
+				client     	@165
+				supplier   	@166
+				line_style 	0)))
+		    (object ClassDiagram "ScheduleData and ScheduledEntry"
+			quid       	"383287E102CA"
+			title      	"ScheduleData and ScheduledEntry"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	600
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @168
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1240, 775)
+				label      	(object ItemLabel
+				    Parent_View 	@168
+				    location   	(926, 369)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	628
+				    justify    	0
+				    label      	"CMsvScheduledEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3831245B0050"
+				width      	646
+				height     	836
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::TMsvScheduledSendData" @169
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(403, 775)
+				label      	(object ItemLabel
+				    Parent_View 	@169
+				    location   	(150, 444)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	506
+				    justify    	0
+				    label      	"TMsvScheduledSendData")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37D52D630383"
+				width      	524
+				height     	686
+				annotation 	8)
+			    (object AssociationViewNew "$UNNAMED$33" @170
+				location   	(790, 775)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832882603D7"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$34" @171
+					Parent_View 	@170
+					location   	(449, 279)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"383288270194"
+					client     	@170
+					supplier   	@168
+					line_style 	0)
+				    (object RoleView "$UNNAMED$35" @172
+					Parent_View 	@170
+					location   	(449, 279)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3832882701B2"
+					client     	@170
+					supplier   	@169
+					line_style 	0)))
+			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @173
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1240, 124)
+				label      	(object ItemLabel
+				    Parent_View 	@173
+				    location   	(1092, 50)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	296
+				    justify    	0
+				    label      	"CBase")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3832725B0367"
+				width      	314
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @174
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832884602CF"
+				client     	@168
+				supplier   	@173
+				line_style 	0)
+			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduledEntry" @175
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(2015, 775)
+				label      	(object ItemLabel
+				    Parent_View 	@175
+				    location   	(1807, 701)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	416
+				    justify    	0
+				    label      	"CFaxScheduledEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"383270CC0331"
+				width      	434
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @176
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832723F0353"
+				client     	@175
+				supplier   	@168
+				line_style 	0)))
+		    (object ClassDiagram "CMsvOffPeakTime"
+			quid       	"383292A602EC"
+			title      	"CMsvOffPeakTime"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::SCHSEND::TMsvOffPeakTime" @177
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1364, 806)
+				label      	(object ItemLabel
+				    Parent_View 	@177
+				    location   	(1000, 375)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	728
+				    justify    	0
+				    label      	"TMsvOffPeakTime")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACD9B034F"
+				width      	746
+				height     	886
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvOffPeakTimes" @178
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(465, 806)
+				label      	(object ItemLabel
+				    Parent_View 	@178
+				    location   	(236, 600)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	458
+				    justify    	0
+				    label      	"CMsvOffPeakTimes")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACDA80072"
+				width      	476
+				height     	436
+				annotation 	8)
+			    (object AssociationViewNew "$UNNAMED$6" @179
+				location   	(846, 806)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"380ACF7A0195"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$8" @180
+					Parent_View 	@179
+					location   	(381, 0)
+					label      	(object SegLabel @181
+					    Parent_View 	@180
+					    location   	(983, 765)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	0)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380ACF7B03E5"
+					client     	@179
+					supplier   	@177
+					line_style 	0)
+				    (object RoleView "$UNNAMED$7" @182
+					Parent_View 	@179
+					location   	(381, 0)
+					label      	(object SegLabel @183
+					    Parent_View 	@182
+					    location   	(709, 765)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	1)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380ACF7B03BD"
+					client     	@179
+					supplier   	@178
+					line_style 	0)))))
+		    (object ClassDiagram "CMsvSendErrorAction"
+			quid       	"38329DD00332"
+			title      	"CMsvSendErrorAction"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::SCHSEND::TMsvSendErrorAction" @184
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1550, 806)
+				label      	(object ItemLabel
+				    Parent_View 	@184
+				    location   	(1116, 500)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	868
+				    justify    	0
+				    label      	"TMsvSendErrorAction")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACFBF02B6"
+				width      	886
+				height     	636
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvSendErrorActions" @185
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(465, 806)
+				label      	(object ItemLabel
+				    Parent_View 	@185
+				    location   	(15, 425)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	900
+				    justify    	0
+				    label      	"CMsvSendErrorActions")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"380ACFCA026C"
+				width      	918
+				height     	786
+				annotation 	8)
+			    (object AssociationViewNew "$UNNAMED$12" @186
+				location   	(1015, 806)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"380B36C9011B"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$14" @187
+					Parent_View 	@186
+					location   	(519, 0)
+					label      	(object SegLabel @188
+					    Parent_View 	@187
+					    location   	(1091, 765)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	0)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380B36C902AC"
+					client     	@186
+					supplier   	@184
+					line_style 	0)
+				    (object RoleView "$UNNAMED$13" @189
+					Parent_View 	@186
+					location   	(519, 0)
+					label      	(object SegLabel @190
+					    Parent_View 	@189
+					    location   	(938, 765)
+					    hidden     	TRUE
+					    anchor     	1
+					    anchor_loc 	1
+					    nlines     	1
+					    max_width  	450
+					    justify    	0
+					    label      	""
+					    pctDist    	0.800000
+					    height     	42
+					    orientation 	1)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"380B36C90266"
+					client     	@186
+					supplier   	@185
+					line_style 	0)))
+			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @191
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(465, 124)
+				label      	(object ItemLabel
+				    Parent_View 	@191
+				    location   	(317, 50)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	296
+				    justify    	0
+				    label      	"CBase")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3832725B0367"
+				width      	314
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @192
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"38329DE601F3"
+				client     	@185
+				supplier   	@191
+				line_style 	0)))
+		    (object ClassDiagram "MsvScheduledEntry"
+			quid       	"3832A24C03E7"
+			title      	"MsvScheduledEntry"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduledEntry" @193
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(496, 837)
+				label      	(object ItemLabel
+				    Parent_View 	@193
+				    location   	(182, 381)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	628
+				    justify    	0
+				    label      	"CMsvScheduledEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3831245B0050"
+				width      	646
+				height     	936
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::Epoc Generic::CBase" @194
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(496, 155)
+				label      	(object ItemLabel
+				    Parent_View 	@194
+				    location   	(348, 81)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	296
+				    justify    	0
+				    label      	"CBase")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3832725B0367"
+				width      	314
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @195
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832884602CF"
+				client     	@193
+				supplier   	@194
+				line_style 	0)
+			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduledEntry" @196
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1333, 837)
+				label      	(object ItemLabel
+				    Parent_View 	@196
+				    location   	(1125, 763)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	416
+				    justify    	0
+				    label      	"CFaxScheduledEntry")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"383270CC0331"
+				width      	434
+				height     	172
+				annotation 	8)
+			    (object InheritView "" @197
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832723F0353"
+				client     	@196
+				supplier   	@193
+				line_style 	0)))
+		    (object ClassDiagram "ScheduleBaseServerMtm"
+			quid       	"3832B22700F4"
+			title      	"ScheduleBaseServerMtm"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::FAXS::CFaxScheduleSend" @198
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(1333, 1054)
+				label      	(object ItemLabel
+				    Parent_View 	@198
+				    location   	(1135, 980)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	396
+				    justify    	0
+				    label      	"CFaxScheduleSend")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"383270B50049"
+				width      	414
+				height     	172
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::FAXS::CFaxServerMTM" @199
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				location   	(496, 1054)
+				label      	(object ItemLabel
+				    Parent_View 	@199
+				    location   	(331, 979)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	330
+				    justify    	0
+				    label      	"CFaxServerMTM")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA871602B0"
+				width      	348
+				height     	174
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::MSG::CBaseServerMTM" @200
+				ShowCompartmentStereotypes 	TRUE
+				location   	(496, 248)
+				label      	(object ItemLabel
+				    Parent_View 	@200
+				    location   	(310, 173)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	372
+				    justify    	0
+				    label      	"CBaseServerMTM")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA8720023C"
+				width      	390
+				height     	174
+				annotation 	8
+				autoResize 	TRUE)
+			    (object ClassView "Class" "Logical View::SCHSEND::CScheduleBaseServerMtm" @201
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(496, 651)
+				label      	(object ItemLabel
+				    Parent_View 	@201
+				    location   	(134, 470)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	724
+				    justify    	0
+				    label      	"CScheduleBaseServerMtm")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"38312BAA0304"
+				width      	742
+				height     	386
+				annotation 	8)
+			    (object InheritView "" @202
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383139D200C0"
+				client     	@199
+				supplier   	@201
+				line_style 	0)
+			    (object InheritView "" @203
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383139DD022E"
+				client     	@201
+				supplier   	@200
+				line_style 	0)
+			    (object ClassView "Class" "Logical View::SCHSEND::CMsvScheduleSend" @204
+				ShowCompartmentStereotypes 	TRUE
+				location   	(1333, 651)
+				label      	(object ItemLabel
+				    Parent_View 	@204
+				    location   	(1129, 599)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	408
+				    justify    	0
+				    label      	"CMsvScheduleSend")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37CAB901016F"
+				width      	426
+				height     	128
+				annotation 	8
+				autoResize 	TRUE)
+			    (object InheritView "" @205
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"383271F9032A"
+				client     	@198
+				supplier   	@204
+				line_style 	0)
+			    (object AssociationViewNew "$UNNAMED$36" @206
+				location   	(993, 651)
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3832B2AB018A"
+				roleview_list 	(list RoleViews
+				    (object RoleView "$UNNAMED$37" @207
+					Parent_View 	@206
+					location   	(466, -496)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3832B2AB02FD"
+					client     	@206
+					supplier   	@201
+					line_style 	0)
+				    (object RoleView "$UNNAMED$38" @208
+					Parent_View 	@206
+					location   	(466, -496)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3832B2AB031B"
+					client     	@206
+					supplier   	@204
+					line_style 	0)))))
+		    (object InteractionDiagram "PerfectScheduling"
+			mechanism_ref 	@127
+			quid       	"37C4124D0273"
+			title      	"PerfectScheduling"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	261
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object InterObjView "Client" @209
+				location   	(465, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@209
+				    location   	(465, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"Client")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833C72F019F"
+				width      	300
+				height     	2775
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @210
+				    location   	(465, 496)
+				    line_color 	3342489
+				    InterObjView 	@209
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$39" @211
+				location   	(992, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@211
+				    location   	(992, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	500
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833C74503C7"
+				width      	518
+				height     	2775
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @212
+				    location   	(992, 496)
+				    line_color 	3342489
+				    InterObjView 	@211
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @213
+				    location   	(992, 620)
+				    line_color 	3342489
+				    InterObjView 	@211
+				    height     	213
+				    y_coord    	153
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @214
+				    location   	(992, 713)
+				    line_color 	3342489
+				    InterObjView 	@211
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @215
+				    location   	(992, 961)
+				    line_color 	3342489
+				    InterObjView 	@211
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$40" @216
+				location   	(1519, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@216
+				    location   	(1519, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	372
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833C7510374"
+				width      	390
+				height     	2775
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @217
+				    location   	(1519, 961)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @218
+				    location   	(1519, 1116)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @219
+				    location   	(1519, 1147)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @220
+				    location   	(1519, 1333)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @221
+				    location   	(1519, 1364)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @222
+				    location   	(1519, 1581)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @223
+				    location   	(1519, 1767)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @224
+				    location   	(1519, 1767)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @225
+				    location   	(1519, 1953)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @226
+				    location   	(1519, 1984)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @227
+				    location   	(1519, 2170)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @228
+				    location   	(1519, 2201)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @229
+				    location   	(1519, 2387)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @230
+				    location   	(1519, 2573)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @231
+				    location   	(1519, 2604)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @232
+				    location   	(1519, 2790)
+				    line_color 	3342489
+				    InterObjView 	@216
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$41" @233
+				location   	(2108, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@233
+				    location   	(2108, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833C80E025D"
+				width      	300
+				height     	2775
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @234
+				    location   	(2108, 1581)
+				    line_color 	3342489
+				    InterObjView 	@233
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @235
+				    location   	(2108, 2387)
+				    line_color 	3342489
+				    InterObjView 	@233
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @236
+				    location   	(2108, 2790)
+				    line_color 	3342489
+				    InterObjView 	@233
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE))
+			    (object InterMessView "" @237
+				location   	(31, 496)
+				label      	(object SegLabel @238
+				    Parent_View 	@237
+				    location   	(728, 452)
+				    quidu      	"3833C757003F"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	390
+				    justify    	0
+				    label      	"StartCommandL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@209
+				supplier   	@211
+				Focus_Src  	@210
+				Focus_Entry 	@212
+				origin     	(480, 496)
+				terminus   	(976, 496)
+				ordinal    	0)
+			    (object SelfMessView "" @239
+				location   	(31, 713)
+				label      	(object SegLabel @240
+				    Parent_View 	@239
+				    location   	(1083, 669)
+				    quidu      	"3833C76B028C"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	282
+				    justify    	0
+				    label      	"ScheduleL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@211
+				supplier   	@211
+				Focus_Src  	@213
+				Focus_Entry 	@214
+				origin     	(1008, 713)
+				terminus   	(1158, 713)
+				ordinal    	1)
+			    (object InterMessView "" @241
+				location   	(31, 961)
+				label      	(object SegLabel @242
+				    Parent_View 	@241
+				    location   	(1255, 917)
+				    quidu      	"3833C77A00CA"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	282
+				    justify    	0
+				    label      	"ScheduleL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@211
+				supplier   	@216
+				Focus_Src  	@215
+				Focus_Entry 	@217
+				origin     	(1007, 961)
+				terminus   	(1503, 961)
+				ordinal    	2)
+			    (object SelfMessView "" @243
+				location   	(31, 1147)
+				label      	(object SegLabel @244
+				    Parent_View 	@243
+				    location   	(1610, 1103)
+				    quidu      	"3833C7C4015E"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	462
+				    justify    	0
+				    label      	"GetMessageL(TMsvId)"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@216
+				Focus_Src  	@218
+				Focus_Entry 	@219
+				origin     	(1535, 1147)
+				terminus   	(1685, 1147)
+				ordinal    	3)
+			    (object SelfMessView "" @245
+				location   	(31, 1364)
+				label      	(object SegLabel @246
+				    Parent_View 	@245
+				    location   	(1610, 1320)
+				    quidu      	"3833CD33008B"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	557
+				    justify    	0
+				    label      	"DeleteScheduleForEntryL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@216
+				Focus_Src  	@220
+				Focus_Entry 	@221
+				origin     	(1535, 1364)
+				terminus   	(1685, 1364)
+				ordinal    	4)
+			    (object SelfMessView "" @247
+				location   	(31, 1767)
+				label      	(object SegLabel @248
+				    Parent_View 	@247
+				    location   	(1610, 1723)
+				    quidu      	"3833CD6C030D"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	445
+				    justify    	0
+				    label      	"SendingCompleteL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@216
+				Focus_Src  	@223
+				Focus_Entry 	@224
+				origin     	(1535, 1767)
+				terminus   	(1685, 1767)
+				ordinal    	6)
+			    (object InterMessView "" @249
+				location   	(31, 1581)
+				label      	(object SegLabel @250
+				    Parent_View 	@249
+				    location   	(1813, 1537)
+				    quidu      	"3833CDA602A3"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	295
+				    justify    	0
+				    label      	"DeleteTask( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@233
+				Focus_Src  	@222
+				Focus_Entry 	@234
+				origin     	(1534, 1581)
+				terminus   	(2092, 1581)
+				ordinal    	5)
+			    (object SelfMessView "" @251
+				location   	(31, 1984)
+				label      	(object SegLabel @252
+				    Parent_View 	@251
+				    location   	(1610, 1940)
+				    quidu      	"3833CECF0119"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	336
+				    justify    	0
+				    label      	"DoScheduleL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@216
+				Focus_Src  	@225
+				Focus_Entry 	@226
+				origin     	(1535, 1984)
+				terminus   	(1685, 1984)
+				ordinal    	7)
+			    (object SelfMessView "" @253
+				location   	(31, 2201)
+				label      	(object SegLabel @254
+				    Parent_View 	@253
+				    location   	(1610, 2157)
+				    quidu      	"3833D1A402C0"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	394
+				    justify    	0
+				    label      	"CreateScheduleL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@216
+				Focus_Src  	@227
+				Focus_Entry 	@228
+				origin     	(1535, 2201)
+				terminus   	(1685, 2201)
+				ordinal    	8)
+			    (object InterMessView "" @255
+				location   	(31, 2387)
+				label      	(object SegLabel @256
+				    Parent_View 	@255
+				    location   	(1813, 2343)
+				    quidu      	"3833D1AD0129"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	579
+				    justify    	0
+				    label      	"CreatePersistentSchedule( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@233
+				Focus_Src  	@229
+				Focus_Entry 	@235
+				origin     	(1534, 2387)
+				terminus   	(2092, 2387)
+				ordinal    	9)
+			    (object SelfMessView "" @257
+				location   	(31, 2604)
+				label      	(object SegLabel @258
+				    Parent_View 	@257
+				    location   	(1610, 2560)
+				    quidu      	"3833D1B40205"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	394
+				    justify    	0
+				    label      	"ScheduleEntryL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@216
+				Focus_Src  	@230
+				Focus_Entry 	@231
+				origin     	(1535, 2604)
+				terminus   	(1685, 2604)
+				ordinal    	10)
+			    (object InterMessView "" @259
+				location   	(31, 2790)
+				label      	(object SegLabel @260
+				    Parent_View 	@259
+				    location   	(1813, 2746)
+				    quidu      	"3833D1BB0183"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	363
+				    justify    	0
+				    label      	"ScheduleTask( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@216
+				supplier   	@233
+				Focus_Src  	@232
+				Focus_Entry 	@236
+				origin     	(1534, 2790)
+				terminus   	(2092, 2790)
+				ordinal    	11)))))
+	    (object Class_Category "schsvr"
+		quid       	"38170F130059"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "RScheduler"
+			quid       	"37C412680178"
+			operations 	(list Operations
+			    (object Operation "Register"
+				quid       	"37C4127A0110"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CreatePersistentSchedule"
+				quid       	"37C4128400A6"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "DeleteSchedule"
+				quid       	"37C4128401D2"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "DisableSchedule"
+				quid       	"37C4128402A4"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "EnableSchedule"
+				quid       	"37C412840377"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "DeleteTask"
+				quid       	"37C412850039"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "GetScheduleRefsL"
+				quid       	"37C4128500ED"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "GetScheduleL"
+				quid       	"37C4128501CA"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "GetTaskRefsL"
+				quid       	"37C4128502A6"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "GetTaskDataSizeL"
+				quid       	"37C412850378"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ScheduleTask"
+				quid       	"37C4137A01AE"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			language   	"C++")
+		    (object Class "CScheduledTask"
+			quid       	"3833D3AF029A"
+			operations 	(list Operations
+			    (object Operation "NewLC"
+				quid       	"3833D3C70399"
+				parameters 	(list Parameters
+				    (object Parameter "aReadStream"
+					type       	"RStoreReadStream"))
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))))
+		logical_presentations 	(list unit_reference_list))
+	    (object Class_Category "Epoc Generic"
+		quid       	"38170F220141"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "CActive"
+			quid       	"37BA85360133"
+			operations 	(list Operations
+			    (object Operation "SetActive"
+				quid       	"37BA87BA0388"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iStatus"
+				quid       	"3833D54900EB"
+				type       	"TRequestStatus"))
+			language   	"C++")
+		    (object Class "CArrayFixFlat<TMsvOffPeakTime>"
+			quid       	"380ACDCF0245"
+			language   	"C++")
+		    (object Class "CBase"
+			quid       	"3832725B0367"))
+		logical_presentations 	(list unit_reference_list))
+	    (object Class_Category "SCHEXE"
+		quid       	"3833D2A701C8"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class "CSendEXE"
+			quid       	"37CAB8EA02D5"
+			superclasses 	(list inheritance_relationship_list
+			    (object Inheritance_Relationship
+				quid       	"3833D4910028"
+				supplier   	"Logical View::Epoc Generic::CActive"
+				quidu      	"37BA85360133"))
+			operations 	(list Operations
+			    (object Operation "E32Main"
+				quid       	"37CAB95B01B5"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "ProcessFileL"
+				quid       	"3833D2EB01DA"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "RetrieveMessagesL"
+				quid       	"3833D359025A"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0)
+			    (object Operation "CallMtmL"
+				quid       	"3833D362036C"
+				concurrency 	"Sequential"
+				opExportControl 	"Public"
+				uid        	0))
+			class_attributes 	(list class_attribute_list
+			    (object ClassAttribute "iSendParameter"
+				quid       	"3833D41C0233"
+				type       	"TBufC8<512>")
+			    (object ClassAttribute "iSendCommand"
+				quid       	"3833D42302E7"
+				type       	"TInt")
+			    (object ClassAttribute "iSelection"
+				quid       	"3833D46900DF"
+				type       	"CMsvEntrySelection"))
+			language   	"C++")
+		    (object Mechanism @261
+			logical_models 	(list unit_reference_list
+			    (object Object "$UNNAMED$42"
+				quid       	"3833D4BA01F4"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"3833D4C30161"
+					supplier   	"$UNNAMED$43"
+					quidu      	"3833D4BF0089"
+					messages   	(list Messages
+					    (object Message "E32Main( )"
+						quid       	"3833D4C30162"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"1"
+						ordinal    	0
+						quidu      	"37CAB95B01B5"))))
+				class      	"Logical View::schsvr::RScheduler"
+				quidu      	"37C412680178"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$43"
+				quid       	"3833D4BF0089"
+				collaborators 	(list link_list
+				    (object Link
+					quid       	"3833D4C90123"
+					supplier   	"$UNNAMED$43"
+					quidu      	"3833D4BF0089"
+					messages   	(list Messages
+					    (object Message "ProcessFileL( )"
+						quid       	"3833D4C90124"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"2"
+						ordinal    	1
+						quidu      	"3833D2EB01DA")
+					    (object Message "RetrieveMessagesL( )"
+						quid       	"3833D4CD03B4"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"3"
+						ordinal    	2
+						quidu      	"3833D359025A")
+					    (object Message "CallMtmL( )"
+						quid       	"3833D4E80254"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"5"
+						ordinal    	4
+						quidu      	"3833D362036C")))
+				    (object Link
+					quid       	"3833D4D802E7"
+					supplier   	"$UNNAMED$44"
+					quidu      	"3833D4D400A7"
+					messages   	(list Messages
+					    (object Message "NewLC(RStoreReadStream)"
+						quid       	"3833D4D802E8"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"4"
+						ordinal    	3
+						quidu      	"3833D3C70399")))
+				    (object Link
+					quid       	"3833D4F8027F"
+					supplier   	"$UNNAMED$45"
+					quidu      	"3833D4F402F2"
+					messages   	(list Messages
+					    (object Message "OpenL( )"
+						quid       	"3833D4F80280"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"6"
+						ordinal    	5
+						quidu      	"3833D3840003")
+					    (object Message "TransferCommandL(iSelection, iSendCommandId, iSendParameter, iStatus)"
+						quid       	"3833D4FD02CD"
+						frequency  	"Aperiodic"
+						synchronization 	"Simple"
+						dir        	"FromClientToSupplier"
+						sequence   	"7"
+						ordinal    	6
+						Operation  	"TransferCommandL(CMsvEntrySelection&, TInt, TDesC8&, TRequestStatus)"
+						quidu      	"3833D37A0366"))))
+				class      	"Logical View::SCHEXE::CSendEXE"
+				quidu      	"37CAB8EA02D5"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$44"
+				quid       	"3833D4D400A7"
+				class      	"Logical View::schsvr::CScheduledTask"
+				quidu      	"3833D3AF029A"
+				persistence 	"Transient"
+				multi      	FALSE)
+			    (object Object "$UNNAMED$45"
+				quid       	"3833D4F402F2"
+				class      	"Logical View::MSG::CMsvSession"
+				quidu      	"3833D3690344"
+				persistence 	"Transient"
+				multi      	FALSE))))
+		logical_presentations 	(list unit_reference_list
+		    (object ClassDiagram "SCHEXE"
+			quid       	"3833D47B013F"
+			title      	"SCHEXE"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object ClassView "Class" "Logical View::SCHEXE::CSendEXE" @262
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(744, 837)
+				label      	(object ItemLabel
+				    Parent_View 	@262
+				    location   	(427, 606)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	634
+				    justify    	0
+				    label      	"CSendEXE")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37CAB8EA02D5"
+				width      	652
+				height     	486
+				annotation 	8)
+			    (object ClassView "Class" "Logical View::Epoc Generic::CActive" @263
+				ShowCompartmentStereotypes 	TRUE
+				IncludeAttribute 	TRUE
+				IncludeOperation 	TRUE
+				location   	(744, 217)
+				label      	(object ItemLabel
+				    Parent_View 	@263
+				    location   	(596, 113)
+				    fill_color 	13434879
+				    nlines     	1
+				    max_width  	296
+				    justify    	0
+				    label      	"CActive")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"37BA85360133"
+				width      	314
+				height     	232
+				annotation 	8)
+			    (object InheritView "" @264
+				stereotype 	TRUE
+				line_color 	3342489
+				quidu      	"3833D4910028"
+				client     	@262
+				supplier   	@263
+				line_style 	0)))
+		    (object InteractionDiagram "SCHEXE"
+			mechanism_ref 	@261
+			quid       	"3833D26E00A4"
+			title      	"SCHEXE"
+			zoom       	100
+			max_height 	28350
+			max_width  	21600
+			origin_x   	0
+			origin_y   	0
+			items      	(list diagram_item_list
+			    (object InterObjView "$UNNAMED$42" @265
+				location   	(465, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@265
+				    location   	(465, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833D4BA01F4"
+				width      	300
+				height     	1690
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @266
+				    location   	(465, 434)
+				    line_color 	3342489
+				    InterObjView 	@265
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$43" @267
+				location   	(899, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@267
+				    location   	(899, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833D4BF0089"
+				width      	300
+				height     	1690
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @268
+				    location   	(899, 434)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @269
+				    location   	(899, 620)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @270
+				    location   	(899, 651)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @271
+				    location   	(899, 868)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @272
+				    location   	(899, 899)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @273
+				    location   	(899, 1085)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @274
+				    location   	(899, 1271)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @275
+				    location   	(899, 1302)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	60
+				    y_coord    	0
+				    Nested     	TRUE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @276
+				    location   	(899, 1488)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	120
+				    y_coord    	60
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @277
+				    location   	(899, 1674)
+				    line_color 	3342489
+				    InterObjView 	@267
+				    height     	151
+				    y_coord    	91
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$44" @278
+				location   	(1240, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@278
+				    location   	(1240, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	320
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833D4D400A7"
+				width      	338
+				height     	1690
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @279
+				    location   	(1240, 1085)
+				    line_color 	3342489
+				    InterObjView 	@278
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE))
+			    (object InterObjView "$UNNAMED$45" @280
+				location   	(1581, 217)
+				font       	(object Font
+				    underline  	TRUE)
+				label      	(object ItemLabel
+				    Parent_View 	@280
+				    location   	(1581, 217)
+				    fill_color 	13434879
+				    anchor_loc 	1
+				    nlines     	2
+				    max_width  	282
+				    justify    	0
+				    label      	"")
+				icon_style 	"Icon"
+				line_color 	3342489
+				fill_color 	13434879
+				quidu      	"3833D4F402F2"
+				width      	300
+				height     	1690
+				icon_height 	0
+				icon_width 	0
+				icon_y_offset 	0
+				annotation 	1
+				Focus_Of_Control 	(object Focus_Of_Control "" @281
+				    location   	(1581, 1488)
+				    line_color 	3342489
+				    InterObjView 	@280
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE)
+				Focus_Of_Control 	(object Focus_Of_Control "" @282
+				    location   	(1581, 1705)
+				    line_color 	3342489
+				    InterObjView 	@280
+				    height     	60
+				    y_coord    	0
+				    Nested     	FALSE))
+			    (object InterMessView "" @283
+				location   	(31, 434)
+				label      	(object SegLabel @284
+				    Parent_View 	@283
+				    location   	(681, 390)
+				    quidu      	"3833D4C30162"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	244
+				    justify    	0
+				    label      	"E32Main( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@265
+				supplier   	@267
+				Focus_Src  	@266
+				Focus_Entry 	@268
+				origin     	(480, 434)
+				terminus   	(883, 434)
+				ordinal    	0)
+			    (object SelfMessView "" @285
+				location   	(31, 651)
+				label      	(object SegLabel @286
+				    Parent_View 	@285
+				    location   	(990, 607)
+				    quidu      	"3833D4C90124"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	322
+				    justify    	0
+				    label      	"ProcessFileL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@267
+				supplier   	@267
+				Focus_Src  	@269
+				Focus_Entry 	@270
+				origin     	(915, 651)
+				terminus   	(1065, 651)
+				ordinal    	1)
+			    (object SelfMessView "" @287
+				location   	(31, 899)
+				label      	(object SegLabel @288
+				    Parent_View 	@287
+				    location   	(990, 855)
+				    quidu      	"3833D4CD03B4"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	438
+				    justify    	0
+				    label      	"RetrieveMessagesL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@267
+				supplier   	@267
+				Focus_Src  	@271
+				Focus_Entry 	@272
+				origin     	(915, 899)
+				terminus   	(1065, 899)
+				ordinal    	2)
+			    (object InterMessView "" @289
+				location   	(31, 1085)
+				label      	(object SegLabel @290
+				    Parent_View 	@289
+				    location   	(1069, 1041)
+				    quidu      	"3833D4D802E8"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	551
+				    justify    	0
+				    label      	"NewLC(RStoreReadStream)"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@267
+				supplier   	@278
+				Focus_Src  	@273
+				Focus_Entry 	@279
+				origin     	(914, 1085)
+				terminus   	(1224, 1085)
+				ordinal    	3)
+			    (object SelfMessView "" @291
+				location   	(31, 1302)
+				label      	(object SegLabel @292
+				    Parent_View 	@291
+				    location   	(990, 1258)
+				    quidu      	"3833D4E80254"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	257
+				    justify    	0
+				    label      	"CallMtmL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@267
+				supplier   	@267
+				Focus_Src  	@274
+				Focus_Entry 	@275
+				origin     	(915, 1302)
+				terminus   	(1065, 1302)
+				ordinal    	4)
+			    (object InterMessView "" @293
+				location   	(31, 1488)
+				label      	(object SegLabel @294
+				    Parent_View 	@293
+				    location   	(1239, 1444)
+				    quidu      	"3833D4F80280"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	203
+				    justify    	0
+				    label      	"OpenL( )"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@267
+				supplier   	@280
+				Focus_Src  	@276
+				Focus_Entry 	@281
+				origin     	(914, 1488)
+				terminus   	(1565, 1488)
+				ordinal    	5)
+			    (object InterMessView "" @295
+				location   	(31, 1705)
+				label      	(object SegLabel @296
+				    Parent_View 	@295
+				    location   	(1239, 1661)
+				    quidu      	"3833D4FD02CD"
+				    anchor_loc 	1
+				    nlines     	1
+				    max_width  	1424
+				    justify    	0
+				    label      	"TransferCommandL(iSelection, iSendCommandId, iSendParameter, iStatus)"
+				    pctDist    	0.500000
+				    height     	45
+				    orientation 	0)
+				line_color 	3342489
+				client     	@267
+				supplier   	@280
+				Focus_Src  	@277
+				Focus_Entry 	@282
+				origin     	(914, 1705)
+				terminus   	(1565, 1705)
+				ordinal    	6)))))
+	    (object Class_Category "SMSMTM"
+		quid       	"383994880157"
+		exportControl 	"Public"
+		logical_models 	(list unit_reference_list
+		    (object Class_Category "SMSS"
+			quid       	"3839948E02F1"
+			exportControl 	"Public"
+			logical_models 	(list unit_reference_list
+			    (object Class "CSmsServerMtm"
+				quid       	"3839949603B0"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"3839953501B0"
+					supplier   	"Logical View::SCHSEND::CScheduleBaseServerMtm"
+					quidu      	"38312BAA0304")))
+			    (object Class "CSmsOutboxSend"
+				quid       	"383994A4025C")
+			    (object Class "CSmsSendSession"
+				quid       	"383994AF0244")
+			    (object Class "CSmsSend"
+				quid       	"383994BE01FF")
+			    (object Class "CSmsRecipientSend"
+				quid       	"383994CB0045")
+			    (object Class "CSmsTextRecipientSend"
+				quid       	"383994D5034D"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"3839955A00AF"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
+					quidu      	"383994CB0045")))
+			    (object Class "CSmsWapRecipientSend"
+				quid       	"383994E70168"
+				superclasses 	(list inheritance_relationship_list
+				    (object Inheritance_Relationship
+					quid       	"3839955C012A"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
+					quidu      	"383994CB0045")))
+			    (object Association "$UNNAMED$46"
+				quid       	"38399566019D"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$47"
+					quid       	"3839956603E1"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
+					quidu      	"383994CB0045"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)
+				    (object Role "$UNNAMED$48"
+					quid       	"3839956603E2"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
+					quidu      	"383994AF0244")))
+			    (object Association "$UNNAMED$49"
+				quid       	"3839956F031C"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$50"
+					quid       	"3839957000ED"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
+					quidu      	"383994AF0244"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)
+				    (object Role "$UNNAMED$51"
+					quid       	"3839957000F7"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
+					quidu      	"383994CB0045"
+					is_navigable 	TRUE)))
+			    (object Association "$UNNAMED$52"
+				quid       	"3839958503D2"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$53"
+					quid       	"3839958601DF"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
+					quidu      	"383994BE01FF")
+				    (object Role "$UNNAMED$54"
+					quid       	"3839958601E9"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsRecipientSend"
+					quidu      	"383994CB0045"
+					is_navigable 	TRUE)))
+			    (object Association "$UNNAMED$55"
+				quid       	"383995D90242"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$56"
+					quid       	"383995DA00B3"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
+					quidu      	"383994BE01FF"
+					is_navigable 	TRUE)
+				    (object Role "$UNNAMED$57"
+					quid       	"383995DA00BD"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
+					quidu      	"383994AF0244"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)))
+			    (object Association "$UNNAMED$58"
+				quid       	"383996320088"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$59"
+					quid       	"38399632027C"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
+					quidu      	"383994A4025C"
+					is_navigable 	TRUE)
+				    (object Role "$UNNAMED$60"
+					quid       	"383996320286"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
+					quidu      	"383994AF0244"
+					is_aggregate 	TRUE)))
+			    (object Association "$UNNAMED$61"
+				quid       	"3839963900A6"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$62"
+					quid       	"38399639031D"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
+					quidu      	"383994AF0244"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)
+				    (object Role "$UNNAMED$63"
+					quid       	"383996390331"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
+					quidu      	"383994A4025C"
+					is_navigable 	TRUE)))
+			    (object Association "$UNNAMED$64"
+				quid       	"38399648006B"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$65"
+					quid       	"3839964901A3"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
+					quidu      	"383994AF0244"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)
+				    (object Role "$UNNAMED$66"
+					quid       	"3839964901B7"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
+					quidu      	"383994A4025C")))
+			    (object Association "$UNNAMED$67"
+				quid       	"3839965003A2"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$68"
+					quid       	"38399651026D"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
+					quidu      	"383994A4025C"
+					is_aggregate 	TRUE)
+				    (object Role "$UNNAMED$69"
+					quid       	"383996510281"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSendSession"
+					quidu      	"383994AF0244")))
+			    (object Association "$UNNAMED$70"
+				quid       	"3839966601D7"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$71"
+					quid       	"383996670142"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsServerMtm"
+					quidu      	"3839949603B0"
+					is_navigable 	TRUE)
+				    (object Role "$UNNAMED$72"
+					quid       	"383996670143"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
+					quidu      	"383994A4025C"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)))
+			    (object Association "$UNNAMED$73"
+				quid       	"3839967C00B6"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$74"
+					quid       	"3839967C02FB"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsServerMtm"
+					quidu      	"3839949603B0"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)
+				    (object Role "$UNNAMED$75"
+					quid       	"3839967C0305"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
+					quidu      	"383994A4025C")))
+			    (object Association "$UNNAMED$76"
+				quid       	"3839969E0033"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$77"
+					quid       	"3839969E01D7"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsOutboxSend"
+					quidu      	"383994A4025C")
+				    (object Role "$UNNAMED$78"
+					quid       	"3839969E01F5"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsServerMtm"
+					quidu      	"3839949603B0"
+					is_aggregate 	TRUE)))
+			    (object Association "$UNNAMED$79"
+				quid       	"383996E700A6"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$80"
+					quid       	"383996E702E1"
+					supplier   	"Logical View::SMSMTM::SMCM::CSmsHeader"
+					quidu      	"383996BD00A5"
+					is_navigable 	TRUE
+					is_aggregate 	TRUE)
+				    (object Role "$UNNAMED$81"
+					quid       	"383996E702E2"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
+					quidu      	"383994BE01FF")))
+			    (object Association "$UNNAMED$82"
+				quid       	"383996ED00F5"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$83"
+					quid       	"383996ED02CB"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
+					quidu      	"383994BE01FF"
+					is_navigable 	TRUE)
+				    (object Role "$UNNAMED$84"
+					quid       	"383996ED02DF"
+					supplier   	"Logical View::SMSMTM::SMCM::CSmsHeader"
+					quidu      	"383996BD00A5"
+					is_aggregate 	TRUE)))
+			    (object Association "$UNNAMED$85"
+				quid       	"383996F102F9"
+				roles      	(list role_list
+				    (object Role "$UNNAMED$86"
+					quid       	"383996F2011A"
+					supplier   	"Logical View::SMSMTM::SMCM::CSmsHeader"
+					quidu      	"383996BD00A5")
+				    (object Role "$UNNAMED$87"
+					quid       	"383996F2012E"
+					supplier   	"Logical View::SMSMTM::SMSS::CSmsSend"
+					quidu      	"383994BE01FF"
+					is_aggregate 	TRUE))))
+			logical_presentations 	(list unit_reference_list
+			    (object ClassDiagram "SMSS"
+				quid       	"383994F40102"
+				title      	"SMSS"
+				zoom       	100
+				max_height 	28350
+				max_width  	21600
+				origin_x   	0
+				origin_y   	225
+				items      	(list diagram_item_list
+				    (object ClassView "Class" "Logical View::SCHSEND::CScheduleBaseServerMtm" @297
+					ShowCompartmentStereotypes 	TRUE
+					location   	(930, 465)
+					label      	(object ItemLabel
+					    Parent_View 	@297
+					    location   	(672, 390)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	516
+					    justify    	0
+					    label      	"CScheduleBaseServerMtm")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"38312BAA0304"
+					width      	534
+					height     	174
+					annotation 	8
+					autoResize 	TRUE)
+				    (object ClassView "Class" "Logical View::MSG::CBaseServerMTM" @298
+					ShowCompartmentStereotypes 	TRUE
+					location   	(930, 155)
+					label      	(object ItemLabel
+					    Parent_View 	@298
+					    location   	(744, 80)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	372
+					    justify    	0
+					    label      	"CBaseServerMTM")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"37BA8720023C"
+					width      	390
+					height     	174
+					annotation 	8
+					autoResize 	TRUE)
+				    (object InheritView "" @299
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"383139DD022E"
+					client     	@297
+					supplier   	@298
+					line_style 	0)
+				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsTextRecipientSend" @300
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(341, 2015)
+					label      	(object ItemLabel
+					    Parent_View 	@300
+					    location   	(101, 1964)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	480
+					    justify    	0
+					    label      	"CSmsTextRecipientSend")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"383994D5034D"
+					width      	498
+					height     	126
+					annotation 	8)
+				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsWapRecipientSend" @301
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(992, 2015)
+					label      	(object ItemLabel
+					    Parent_View 	@301
+					    location   	(748, 1964)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	488
+					    justify    	0
+					    label      	"CSmsWapRecipientSend")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"383994E70168"
+					width      	506
+					height     	126
+					annotation 	8)
+				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsServerMtm" @302
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(930, 775)
+					label      	(object ItemLabel
+					    Parent_View 	@302
+					    location   	(753, 724)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	354
+					    justify    	0
+					    label      	"CSmsServerMtm")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"3839949603B0"
+					width      	372
+					height     	126
+					annotation 	8)
+				    (object InheritView "" @303
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3839953501B0"
+					client     	@302
+					supplier   	@297
+					line_style 	0)
+				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsOutboxSend" @304
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(930, 1116)
+					label      	(object ItemLabel
+					    Parent_View 	@304
+					    location   	(747, 1065)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	366
+					    justify    	0
+					    label      	"CSmsOutboxSend")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"383994A4025C"
+					width      	384
+					height     	126
+					annotation 	8)
+				    (object AssociationViewNew "$UNNAMED$76" @305
+					location   	(930, 945)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3839969E0033"
+					roleview_list 	(list RoleViews
+					    (object RoleView "$UNNAMED$77" @306
+						Parent_View 	@305
+						location   	(0, 170)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"3839969E01D7"
+						client     	@305
+						supplier   	@304
+						line_style 	0)
+					    (object RoleView "$UNNAMED$78" @307
+						Parent_View 	@305
+						location   	(0, 170)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"3839969E01F5"
+						client     	@305
+						supplier   	@302
+						line_style 	0)))
+				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsRecipientSend" @308
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(589, 1736)
+					label      	(object ItemLabel
+					    Parent_View 	@308
+					    location   	(387, 1685)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	404
+					    justify    	0
+					    label      	"CSmsRecipientSend")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"383994CB0045"
+					width      	422
+					height     	126
+					annotation 	8)
+				    (object InheritView "" @309
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3839955A00AF"
+					client     	@300
+					supplier   	@308
+					line_style 	0)
+				    (object InheritView "" @310
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3839955C012A"
+					client     	@301
+					supplier   	@308
+					line_style 	0)
+				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsSendSession" @311
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(930, 1426)
+					label      	(object ItemLabel
+					    Parent_View 	@311
+					    location   	(738, 1375)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	384
+					    justify    	0
+					    label      	"CSmsSendSession")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"383994AF0244"
+					width      	402
+					height     	126
+					annotation 	8)
+				    (object AssociationViewNew "$UNNAMED$49" @312
+					location   	(756, 1580)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3839956F031C"
+					roleview_list 	(list RoleViews
+					    (object RoleView "$UNNAMED$50" @313
+						Parent_View 	@312
+						location   	(167, -156)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"3839957000ED"
+						client     	@312
+						supplier   	@311
+						line_style 	0)
+					    (object RoleView "$UNNAMED$51" @314
+						Parent_View 	@312
+						location   	(167, -156)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"3839957000F7"
+						client     	@312
+						supplier   	@308
+						line_style 	0)))
+				    (object AssociationViewNew "$UNNAMED$67" @315
+					location   	(930, 1270)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3839965003A2"
+					roleview_list 	(list RoleViews
+					    (object RoleView "$UNNAMED$68" @316
+						Parent_View 	@315
+						location   	(0, -156)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"38399651026D"
+						client     	@315
+						supplier   	@304
+						line_style 	0)
+					    (object RoleView "$UNNAMED$69" @317
+						Parent_View 	@315
+						location   	(0, -156)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"383996510281"
+						client     	@315
+						supplier   	@311
+						line_style 	0)))
+				    (object ClassView "Class" "Logical View::SMSMTM::SMCM::CSmsHeader" @318
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(1860, 1736)
+					label      	(object ItemLabel
+					    Parent_View 	@318
+					    location   	(1724, 1662)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	272
+					    justify    	0
+					    label      	"CSmsHeader")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"383996BD00A5"
+					width      	290
+					height     	172
+					annotation 	8)
+				    (object ClassView "Class" "Logical View::SMSMTM::SMSS::CSmsSend" @319
+					ShowCompartmentStereotypes 	TRUE
+					IncludeAttribute 	TRUE
+					IncludeOperation 	TRUE
+					location   	(1302, 1736)
+					label      	(object ItemLabel
+					    Parent_View 	@319
+					    location   	(1179, 1685)
+					    fill_color 	13434879
+					    nlines     	1
+					    max_width  	246
+					    justify    	0
+					    label      	"CSmsSend")
+					icon_style 	"Icon"
+					line_color 	3342489
+					fill_color 	13434879
+					quidu      	"383994BE01FF"
+					width      	264
+					height     	126
+					annotation 	8)
+				    (object AssociationViewNew "$UNNAMED$52" @320
+					location   	(984, 1736)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"3839958503D2"
+					roleview_list 	(list RoleViews
+					    (object RoleView "$UNNAMED$53" @321
+						Parent_View 	@320
+						location   	(395, 0)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"3839958601DF"
+						client     	@320
+						supplier   	@319
+						line_style 	0)
+					    (object RoleView "$UNNAMED$54" @322
+						Parent_View 	@320
+						location   	(395, 0)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"3839958601E9"
+						client     	@320
+						supplier   	@308
+						line_style 	0)))
+				    (object AssociationViewNew "$UNNAMED$55" @323
+					location   	(1116, 1580)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"383995D90242"
+					roleview_list 	(list RoleViews
+					    (object RoleView "$UNNAMED$56" @324
+						Parent_View 	@323
+						location   	(186, 154)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"383995DA00B3"
+						client     	@323
+						supplier   	@319
+						line_style 	0)
+					    (object RoleView "$UNNAMED$57" @325
+						Parent_View 	@323
+						location   	(186, 154)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"383995DA00BD"
+						client     	@323
+						supplier   	@311
+						line_style 	0)))
+				    (object AssociationViewNew "$UNNAMED$85" @326
+					location   	(1574, 1736)
+					stereotype 	TRUE
+					line_color 	3342489
+					quidu      	"383996F102F9"
+					roleview_list 	(list RoleViews
+					    (object RoleView "$UNNAMED$86" @327
+						Parent_View 	@326
+						location   	(272, 0)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"383996F2011A"
+						client     	@326
+						supplier   	@318
+						line_style 	0)
+					    (object RoleView "$UNNAMED$87" @328
+						Parent_View 	@326
+						location   	(272, 0)
+						stereotype 	TRUE
+						line_color 	3342489
+						quidu      	"383996F2012E"
+						client     	@326
+						supplier   	@319
+						line_style 	0)))))))
+		    (object Class_Category "SMCM"
+			quid       	"383996B7026A"
+			exportControl 	"Public"
+			logical_models 	(list unit_reference_list
+			    (object Class "CSmsHeader"
+				quid       	"383996BD00A5"))
+			logical_presentations 	(list unit_reference_list)))
+		statemachine 	(object State_Machine "State/Activity Model"
+		    quid       	"3858AFFD00E4"
+		    states     	(list States
+			(object State "$UNNAMED$88"
+			    quid       	"3858B04B0013"
+			    transitions 	(list transition_list
+				(object State_Transition
+				    quid       	"3858B0CE001C"
+				    label      	""
+				    supplier   	"Pending"
+				    quidu      	"3858B0500288"
+				    Event      	(object Event "Delivery Report Requested"
+					quid       	"3858B0CE001D")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B0CE001F"))
+				(object State_Transition
+				    quid       	"3858B0D20126"
+				    label      	""
+				    supplier   	"Sent"
+				    quidu      	"3858B05901D6"
+				    Event      	(object Event "Delivery Report NOT Requested"
+					quid       	"3858B0D20127")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B0D20129"))
+				(object State_Transition
+				    quid       	"3858B0E502BE"
+				    label      	""
+				    supplier   	"Scheduled"
+				    quidu      	"3858B0C00102"
+				    Event      	(object Event "Sending Fails"
+					quid       	"3858B0E502BF")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B0E502C1"))
+				(object State_Transition
+				    quid       	"3858B1760280"
+				    label      	""
+				    supplier   	"Failed"
+				    quidu      	"3858B062021F"
+				    Event      	(object Event "Sending Fails and not scheduled"
+					quid       	"3858B1760281")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B1760283"))
+				(object State_Transition
+				    quid       	"3858B79600AE"
+				    label      	""
+				    supplier   	"Pending"
+				    quidu      	"3858B0500288"
+				    Event      	(object Event "Delivery Report Requested"
+					quid       	"3858B79600AF")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B79600B1"))
+				(object State_Transition
+				    quid       	"3858B79803E6"
+				    label      	""
+				    supplier   	"Sent"
+				    quidu      	"3858B05901D6"
+				    Event      	(object Event "Delivery Report NOT Requested"
+					quid       	"3858B79803E7")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B79803E9")))
+			    type       	"StartState")
+			(object State "Pending"
+			    quid       	"3858B0500288"
+			    transitions 	(list transition_list
+				(object State_Transition
+				    quid       	"3858B0F4011B"
+				    label      	""
+				    supplier   	"Scheduled"
+				    quidu      	"3858B0C00102"
+				    Event      	(object Event "Delivery Report NOT Received"
+					quid       	"3858B0F4011C")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B0F4011E"))
+				(object State_Transition
+				    quid       	"3858B11D0138"
+				    label      	""
+				    supplier   	"Delivered"
+				    quidu      	"3858B1140031"
+				    Event      	(object Event "Delivery Report Received"
+					quid       	"3858B11D0139")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B11D013B"))
+				(object State_Transition
+				    quid       	"3858B11F0271"
+				    label      	""
+				    supplier   	"Failed"
+				    quidu      	"3858B062021F"
+				    Event      	(object Event "Delivery Report NOT Received"
+					quid       	"3858B11F0272")
+				    sendEvent  	(object sendEvent
+					quid       	"3858B11F0274")))
+			    type       	"Normal")
+			(object State "Sent"
+			    quid       	"3858B05901D6"
+			    transitions 	(list transition_list
+				(object State_Transition
+				    quid       	"3858B3390166"
+				    supplier   	"$UNNAMED$89"
+				    quidu      	"3858B33502BF"
+				    sendEvent  	(object sendEvent
+					quid       	"3858B3390169")))
+			    type       	"Normal")
+			(object State "Failed"
+			    quid       	"3858B062021F"
+			    transitions 	(list transition_list
+				(object State_Transition
+				    quid       	"3858B0FF008A"
+				    supplier   	"Scheduled"
+				    quidu      	"3858B0C00102"
+				    sendEvent  	(object sendEvent
+					quid       	"3858B0FF008D"))
+				(object State_Transition
+				    quid       	"3858B3400207"
+				    supplier   	"$UNNAMED$89"
+				    quidu      	"3858B33502BF"
+				    sendEvent  	(object sendEvent
+					quid       	"3858B340020A")))
+			    type       	"Normal")
+			(object State "Scheduled"
+			    quid       	"3858B0C00102"
+			    transitions 	(list transition_list
+				(object State_Transition
+				    quid       	"3858B0F601E6"
+				    supplier   	"Pending"
+				    quidu      	"3858B0500288"
+				    sendEvent  	(object sendEvent
+					quid       	"3858B0F601E9"))
+				(object State_Transition
+				    quid       	"3858B0FA01C4"
+				    supplier   	"Failed"
+				    quidu      	"3858B062021F"
+				    sendEvent  	(object sendEvent
+					quid       	"3858B0FA01C7"))
+				(object State_Transition
+				    quid       	"3858B10502EC"
+				    supplier   	"Sent"
+				    quidu      	"3858B05901D6"
+				    sendEvent  	(object sendEvent
+					quid       	"3858B10502EF")))
+			    type       	"Normal")
+			(object State "Delivered"
+			    quid       	"3858B1140031"
+			    transitions 	(list transition_list
+				(object State_Transition
+				    quid       	"3858B33D0343"
+				    supplier   	"$UNNAMED$89"
+				    quidu      	"3858B33502BF"
+				    sendEvent  	(object sendEvent
+					quid       	"3858B33D0346")))
+			    type       	"Normal")
+			(object State "$UNNAMED$89"
+			    quid       	"3858B33502BF"
+			    type       	"EndState"))
+		    partitions 	(list Partitions)
+		    statediagrams 	(list StateDiagrams
+			(object State_Diagram "SMS Logging"
+			    quid       	"3858AFFD00EE"
+			    title      	"SMS Logging"
+			    zoom       	100
+			    max_height 	28350
+			    max_width  	21600
+			    origin_x   	0
+			    origin_y   	0
+			    items      	(list diagram_item_list
+				(object StateView "StartState" "$UNNAMED$88" @329
+				    location   	(682, 868)
+				    label      	(object ItemLabel
+					Parent_View 	@329
+					location   	(724, 838)
+					nlines     	2
+					max_width  	600
+					label      	"")
+				    icon_style 	"Icon"
+				    line_color 	3342489
+				    fill_color 	13434879
+				    quidu      	"3858B04B0013")
+				(object StateView "Normal" "Pending" @330
+				    location   	(341, 372)
+				    label      	(object ItemLabel
+					Parent_View 	@330
+					location   	(341, 361)
+					fill_color 	13434879
+					anchor_loc 	1
+					nlines     	2
+					max_width  	204
+					justify    	0
+					label      	"Pending")
+				    icon_style 	"Icon"
+				    line_color 	3342489
+				    fill_color 	13434879
+				    quidu      	"3858B0500288")
+				(object StateView "Normal" "Sent" @331
+				    location   	(1395, 1426)
+				    label      	(object ItemLabel
+					Parent_View 	@331
+					location   	(1395, 1415)
+					fill_color 	13434879
+					anchor_loc 	1
+					nlines     	2
+					max_width  	204
+					justify    	0
+					label      	"Sent")
+				    icon_style 	"Icon"
+				    line_color 	3342489
+				    fill_color 	13434879
+				    quidu      	"3858B05901D6")
+				(object StateView "Normal" "Failed" @332
+				    location   	(1519, 868)
+				    label      	(object ItemLabel
+					Parent_View 	@332
+					location   	(1519, 857)
+					fill_color 	13434879
+					anchor_loc 	1
+					nlines     	2
+					max_width  	204
+					justify    	0
+					label      	"Failed")
+				    icon_style 	"Icon"
+				    line_color 	3342489
+				    fill_color 	13434879
+				    quidu      	"3858B062021F")
+				(object StateView "Normal" "Scheduled" @333
+				    location   	(341, 1426)
+				    label      	(object ItemLabel
+					Parent_View 	@333
+					location   	(341, 1415)
+					fill_color 	13434879
+					anchor_loc 	1
+					nlines     	2
+					max_width  	204
+					justify    	0
+					label      	"Scheduled")
+				    icon_style 	"Icon"
+				    line_color 	3342489
+				    fill_color 	13434879
+				    quidu      	"3858B0C00102")
+				(object StateView "Normal" "Delivered" @334
+				    location   	(1395, 372)
+				    label      	(object ItemLabel
+					Parent_View 	@334
+					location   	(1395, 361)
+					fill_color 	13434879
+					anchor_loc 	1
+					nlines     	2
+					max_width  	204
+					justify    	0
+					label      	"Delivered")
+				    icon_style 	"Icon"
+				    line_color 	3342489
+				    fill_color 	13434879
+				    quidu      	"3858B1140031")
+				(object StateView "EndState" "$UNNAMED$89" @335
+				    location   	(1984, 868)
+				    label      	(object ItemLabel
+					Parent_View 	@335
+					location   	(2038, 826)
+					nlines     	2
+					max_width  	600
+					label      	"")
+				    icon_style 	"Icon"
+				    line_color 	3342489
+				    fill_color 	13434879
+				    quidu      	"3858B33502BF")
+				(object TransView "" @336
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B33D0343"
+				    client     	@334
+				    supplier   	@335
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @337
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B3400207"
+				    client     	@332
+				    supplier   	@335
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @338
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B3390166"
+				    client     	@331
+				    supplier   	@335
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @339
+				    label      	(object SegLabel @340
+					Parent_View 	@339
+					location   	(1016, 826)
+					anchor_loc 	1
+					nlines     	1
+					max_width  	589
+					justify    	0
+					label      	"Sending Fails and not scheduled"
+					pctDist    	0.464856
+					height     	43
+					orientation 	0)
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B1760280"
+				    client     	@329
+				    supplier   	@332
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @341
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B0E502BE"
+				    client     	@329
+				    supplier   	@333
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @342
+				    label      	(object SegLabel @343
+					Parent_View 	@342
+					location   	(1203, 1281)
+					anchor_loc 	1
+					nlines     	3
+					max_width  	413
+					justify    	0
+					label      	"Delivery Report NOT Requested"
+					pctDist    	0.826003
+					height     	5
+					orientation 	1)
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B79803E6"
+				    client     	@329
+				    supplier   	@331
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @344
+				    label      	(object SegLabel @345
+					Parent_View 	@344
+					location   	(542, 655)
+					anchor_loc 	1
+					nlines     	3
+					max_width  	250
+					justify    	0
+					label      	"Delivery Report Requested"
+					pctDist    	0.451599
+					height     	6
+					orientation 	1)
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B79600AE"
+				    client     	@329
+				    supplier   	@330
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @346
+				    label      	(object SegLabel @347
+					Parent_View 	@346
+					location   	(868, 328)
+					anchor_loc 	1
+					nlines     	1
+					max_width  	495
+					justify    	0
+					label      	"Delivery Report Received"
+					pctDist    	0.500000
+					height     	45
+					orientation 	0)
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B11D0138"
+				    client     	@330
+				    supplier   	@334
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @348
+				    label      	(object SegLabel @349
+					Parent_View 	@348
+					location   	(1042, 585)
+					anchor_loc 	1
+					nlines     	2
+					max_width  	331
+					justify    	0
+					label      	"Delivery Report NOT Received"
+					pctDist    	0.595652
+					height     	76
+					orientation 	0)
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B11F0271"
+				    client     	@330
+				    supplier   	@332
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @350
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B10502EC"
+				    client     	@333
+				    supplier   	@331
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @351
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B0FA01C4"
+				    client     	@333
+				    supplier   	@332
+				    line_style 	0
+				    x_offset   	FALSE)
+				(object TransView "" @352
+				    stereotype 	TRUE
+				    line_color 	3342489
+				    quidu      	"3858B0F601E6"
+				    client     	@333
+				    supplier   	@330
+				    line_style 	0
+				    x_offset   	FALSE)))))
+		logical_presentations 	(list unit_reference_list)))
+	logical_presentations 	(list unit_reference_list
+	    (object ClassDiagram "Main"
+		quid       	"38172ED70226"
+		title      	"Main"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    root_subsystem 	(object SubSystem "Component View"
+	quid       	"37BA832E012D"
+	physical_models 	(list unit_reference_list)
+	physical_presentations 	(list unit_reference_list
+	    (object Module_Diagram "Main"
+		quid       	"37BA832F00D3"
+		title      	"Main"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    process_structure 	(object Processes
+	quid       	"37BA832E012E"
+	ProcsNDevs 	(list
+	    (object Process_Diagram "Deployment View"
+		quid       	"37BA832F008D"
+		title      	"Deployment View"
+		zoom       	100
+		max_height 	28350
+		max_width  	21600
+		origin_x   	0
+		origin_y   	0
+		items      	(list diagram_item_list))))
+    properties 	(object Properties
+	attributes 	(list Attribute_Set
+	    (object Attribute
+		tool       	"cg"
+		name       	"roseId"
+		value      	"753117540")
+	    (object Attribute
+		tool       	"cg"
+		name       	"propertyId"
+		value      	"809135966")
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Project"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileExtension"
+			value      	"h")
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileBackupExtension"
+			value      	"h~")
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileTemporaryExtension"
+			value      	"h#")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileExtension"
+			value      	"cpp")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileBackupExtension"
+			value      	"cp~")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileTemporaryExtension"
+			value      	"cp#")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CreateMissingDirectories"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"StopOnError"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"ErrorLimit"
+			value      	30)
+		    (object Attribute
+			tool       	"cg"
+			name       	"Directory"
+			value      	"AUTO GENERATE")
+		    (object Attribute
+			tool       	"cg"
+			name       	"PathSeparator"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"FileNameFormat"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BooleanType"
+			value      	"int")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AllowTemplates"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"AllowProtectedInheritance"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"OneByValueContainer"
+			value      	"$targetClass")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OneByReferenceContainer"
+			value      	"$targetClass *")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OptionalByValueContainer"
+			value      	"OptionalByValue<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OptionalByReferenceContainer"
+			value      	"$targetClass *")
+		    (object Attribute
+			tool       	"cg"
+			name       	"FixedByValueContainer"
+			value      	"$targetClass[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedFixedByValueContainer"
+			value      	"$targetClass[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"FixedByReferenceContainer"
+			value      	"$targetClass *[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedFixedByReferenceContainer"
+			value      	"$targetClass *[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedByValueContainer"
+			value      	"BoundedListByValue<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedBoundedByValueContainer"
+			value      	"BoundedSetByValue<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedByReferenceContainer"
+			value      	"BoundedListByReference<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedBoundedByReferenceContainer"
+			value      	"BoundedSetByReference<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnboundedByValueContainer"
+			value      	"UnboundedListByValue<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedUnboundedByValueContainer"
+			value      	"UnboundedSetByValue<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnboundedByReferenceContainer"
+			value      	"UnboundedListByReference<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedUnboundedByReferenceContainer"
+			value      	"UnboundedSetByReference<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedByValueContainer"
+			value      	"AssociationByValue<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedQualifiedByValueContainer"
+			value      	"DictionaryByValue<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedByReferenceContainer"
+			value      	"AssociationByReference<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedQualifiedByReferenceContainer"
+			value      	"DictionaryByReference<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GeneratePreserveRegions"
+			value      	TRUE)))
+	    (object Attribute
+		tool       	"cg"
+		name       	"compiler2.1__Project"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileExtension"
+			value      	"h")
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileBackupExtension"
+			value      	"h~")
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileTemporaryExtension"
+			value      	"h#")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileExtension"
+			value      	"cpp")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileBackupExtension"
+			value      	"cp~")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileTemporaryExtension"
+			value      	"cp#")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CreateMissingDirectories"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"StopOnError"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"ErrorLimit"
+			value      	30)
+		    (object Attribute
+			tool       	"cg"
+			name       	"Directory"
+			value      	"AUTO GENERATE")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BooleanType"
+			value      	"int")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AllowTemplates"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"AllowProtectedInheritance"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"OneByValueContainer"
+			value      	"$targetClass")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OneByReferenceContainer"
+			value      	"$targetClass *")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OptionalByValueContainer"
+			value      	"OptionalByValue(sizeof($targetClass))")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OptionalByReferenceContainer"
+			value      	"$targetClass *")
+		    (object Attribute
+			tool       	"cg"
+			name       	"FixedByValueContainer"
+			value      	"$targetClass[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedFixedByValueContainer"
+			value      	"$targetClass[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"FixedByReferenceContainer"
+			value      	"$targetClass *[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedFixedByReferenceContainer"
+			value      	"$targetClass *[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedByValueContainer"
+			value      	"BoundedListByValue(sizeof($targetClass),$limit)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedBoundedByValueContainer"
+			value      	"BoundedSetByValue(sizeof($targetClass),$limit)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedByReferenceContainer"
+			value      	"BoundedListByReference($limit)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedBoundedByReferenceContainer"
+			value      	"BoundedSetByReference($limit)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnboundedByValueContainer"
+			value      	"UnboundedListByValue(sizeof($targetClass))")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedUnboundedByValueContainer"
+			value      	"UnboundedSetByValue(sizeof($targetClass))")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnboundedByReferenceContainer"
+			value      	"UnboundedListByReference")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedUnboundedByReferenceContainer"
+			value      	"UnboundedSetByReference")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedByValueContainer"
+			value      	"AssociationByValue(sizeof($qualtype), sizeof($qualcont)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedQualifiedByValueContainer"
+			value      	"DictionaryByValue(sizeof($qualtype), sizeof($qualcont)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedByReferenceContainer"
+			value      	"AssociationByReference(sizeof($qualtype), sizeof($qualcont)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedQualifiedByReferenceContainer"
+			value      	"DictionaryByReference(sizeof($qualtype), sizeof($qualcont)")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GeneratePreserveRegions"
+			value      	TRUE)))
+	    (object Attribute
+		tool       	"cg"
+		name       	"compiler3.0__Project"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileExtension"
+			value      	"h")
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileBackupExtension"
+			value      	"h~")
+		    (object Attribute
+			tool       	"cg"
+			name       	"HeaderFileTemporaryExtension"
+			value      	"h#")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileExtension"
+			value      	"cpp")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileBackupExtension"
+			value      	"cp~")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeFileTemporaryExtension"
+			value      	"cp#")
+		    (object Attribute
+			tool       	"cg"
+			name       	"CreateMissingDirectories"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"StopOnError"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"ErrorLimit"
+			value      	30)
+		    (object Attribute
+			tool       	"cg"
+			name       	"Directory"
+			value      	"AUTO GENERATE")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BooleanType"
+			value      	"int")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AllowTemplates"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"AllowProtectedInheritance"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"OneByValueContainer"
+			value      	"$targetClass")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OneByReferenceContainer"
+			value      	"$targetClass *")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OptionalByValueContainer"
+			value      	"OptionalByValue<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OptionalByReferenceContainer"
+			value      	"$targetClass *")
+		    (object Attribute
+			tool       	"cg"
+			name       	"FixedByValueContainer"
+			value      	"$targetClass[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedFixedByValueContainer"
+			value      	"$targetClass[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"FixedByReferenceContainer"
+			value      	"$targetClass *[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedFixedByReferenceContainer"
+			value      	"$targetClass *[$limit]")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedByValueContainer"
+			value      	"BoundedListByValue<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedBoundedByValueContainer"
+			value      	"BoundedSetByValue<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedByReferenceContainer"
+			value      	"BoundedListByReference<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedBoundedByReferenceContainer"
+			value      	"BoundedSetByReference<$targetClass,$limit>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnboundedByValueContainer"
+			value      	"UnboundedListByValue<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedUnboundedByValueContainer"
+			value      	"UnboundedSetByValue<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnboundedByReferenceContainer"
+			value      	"UnboundedListByReference<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedUnboundedByReferenceContainer"
+			value      	"UnboundedSetByReference<$targetClass>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedByValueContainer"
+			value      	"AssociationByValue<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedQualifiedByValueContainer"
+			value      	"DictionaryByValue<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedByReferenceContainer"
+			value      	"AssociationByReference<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"UnorderedQualifiedByReferenceContainer"
+			value      	"DictionaryByReference<$qualtype, $qualcont>")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GeneratePreserveRegions"
+			value      	TRUE)))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Class"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeName"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"ImplementationType"
+			value      	(value Text ""))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateDefaultConstructor"
+			value      	("GenerateSet" 199))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DefaultConstructorVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineDefaultConstructor"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateCopyConstructor"
+			value      	("GenerateSet" 199))
+		    (object Attribute
+			tool       	"cg"
+			name       	"CopyConstructorVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineCopyConstructor"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateDestructor"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"DestructorVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DestructorKind"
+			value      	("ThreeKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineDestructor"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateAssignmentOperation"
+			value      	("GenerateSet" 199))
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssignmentVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssignmentKind"
+			value      	("ThreeKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineAssignmentOperation"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateEqualityOperations"
+			value      	("GenerateSet" 199))
+		    (object Attribute
+			tool       	"cg"
+			name       	"EqualityVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"EqualityKind"
+			value      	("FriendKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineEqualityOperations"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateRelationalOperations"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"RelationalVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"RelationalKind"
+			value      	("FriendKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineRelationalOperations"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateStorageMgmtOperations"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"StorageMgmtVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineStorageMgmtOperations"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateSubscriptOperation"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"SubscriptVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"SubscriptKind"
+			value      	("ThreeKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"SubscriptResultType"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineSubscriptOperation"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateDereferenceOperation"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"DereferenceVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DereferenceKind"
+			value      	("ThreeKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DereferenceResultType"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineDereferenceOperation"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateIndirectionOperation"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"IndirectionVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"IndirectionKind"
+			value      	("ThreeKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"IndirectionResultType"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineIndirectionOperation"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateStreamOperations"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"StreamVisibility"
+			value      	("VisibilitySet" 45))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineStreamOperations"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"ThreeKindSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Common"
+				value      	200)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Virtual"
+				value      	201)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Abstract"
+				value      	202)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"KindSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Common"
+				value      	200)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Virtual"
+				value      	201)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Abstract"
+				value      	202)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Static"
+				value      	203)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"FriendKindSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Common"
+				value      	200)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Virtual"
+				value      	201)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Abstract"
+				value      	202)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Friend"
+				value      	204)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"DeclareAndDefine"
+				value      	199)
+			    (object Attribute
+				tool       	"cg"
+				name       	"DeclareOnly"
+				value      	205)
+			    (object Attribute
+				tool       	"cg"
+				name       	"DoNotDeclare"
+				value      	206)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"VisibilitySet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Public"
+				value      	45)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Protected"
+				value      	44)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Private"
+				value      	43)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Implementation"
+				value      	14)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"ConstValue"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateDefaultSpecifier"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"DefaultSpecifier"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"IDLElement"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"IDLSpecificationType"
+			value      	("IDLSpecSet" 22))
+		    (object Attribute
+			tool       	"cg"
+			name       	"IDLSpecSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Interface"
+				value      	22)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Typedef"
+				value      	54)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Enumeration"
+				value      	8)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Const"
+				value      	71)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Exception"
+				value      	61)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Struct"
+				value      	51)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Union"
+				value      	81)))))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Module-Spec"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"Generate"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"CmIdentification"
+			value      	(value Text "  %X% %Q% %Z% %W%"))
+		    (object Attribute
+			tool       	"cg"
+			name       	"CopyrightNotice"
+			value      	(value Text ""))
+		    (object Attribute
+			tool       	"cg"
+			name       	"FileName"
+			value      	"AUTO GENERATE")
+		    (object Attribute
+			tool       	"cg"
+			name       	"InclusionProtectionSymbol"
+			value      	"AUTO GENERATE")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AdditionalIncludes"
+			value      	(value Text ""))
+		    (object Attribute
+			tool       	"cg"
+			name       	"IncludeBySimpleName"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InliningStyle"
+			value      	("InliningStyleSet" 207))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InliningStyleSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"InClassDeclaration"
+				value      	208)
+			    (object Attribute
+				tool       	"cg"
+				name       	"FollowingClassDeclaration"
+				value      	207)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateIDLModule"
+			value      	FALSE)))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Module-Body"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"Generate"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"CmIdentification"
+			value      	(value Text "  %X% %Q% %Z% %W%"))
+		    (object Attribute
+			tool       	"cg"
+			name       	"CopyrightNotice"
+			value      	(value Text ""))
+		    (object Attribute
+			tool       	"cg"
+			name       	"FileName"
+			value      	"AUTO GENERATE")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AdditionalIncludes"
+			value      	(value Text ""))
+		    (object Attribute
+			tool       	"cg"
+			name       	"IncludeBySimpleName"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InliningStyle"
+			value      	("InliningStyleSet" 207))
+		    (object Attribute
+			tool       	"cg"
+			name       	"InliningStyleSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"InClassDeclaration"
+				value      	208)
+			    (object Attribute
+				tool       	"cg"
+				name       	"FollowingClassDeclaration"
+				value      	207)))))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Operation"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeName"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"OperationKind"
+			value      	("OperationKindSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"OperationKindSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Common"
+				value      	200)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Virtual"
+				value      	201)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Abstract"
+				value      	202)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Static"
+				value      	203)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Friend"
+				value      	204)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"OperationIsConst"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"EntryCode"
+			value      	(value Text ""))
+		    (object Attribute
+			tool       	"cg"
+			name       	"ExitCode"
+			value      	(value Text ""))
+		    (object Attribute
+			tool       	"cg"
+			name       	"Inline"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"OperationIsOneWay"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"Context"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"Raises"
+			value      	"")))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Has"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeName"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"Ordered"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"NameIfUnlabeled"
+			value      	"the_$supplier")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateDataMember"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberName"
+			value      	"$relationship")
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberVisibility"
+			value      	("DataMemberVisibilitySet" 14))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberVisibilitySet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Public"
+				value      	45)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Protected"
+				value      	44)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Private"
+				value      	43)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Implementation"
+				value      	14)
+			    (object Attribute
+				tool       	"cg"
+				name       	"AtRelationshipVisibility"
+				value      	210)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateGetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateSetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetName"
+			value      	"get_$relationship")
+		    (object Attribute
+			tool       	"cg"
+			name       	"SetName"
+			value      	"set_$relationship")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetKinds"
+			value      	("GetSetKindsSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetKindsSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Common"
+				value      	200)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Virtual"
+				value      	201)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Abstract"
+				value      	202)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Static"
+				value      	203)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Friend"
+				value      	204)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"ContainerClass"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"SelectorName"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"SelectorType"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetIsConst"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetByReference"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineGet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"SetReturnsValue"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineSet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"ForwardReferenceOnly"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateForwardReference"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"IsReadOnly"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedHasRelType"
+			value      	("HasRelTypeSet" 47))
+		    (object Attribute
+			tool       	"cg"
+			name       	"HasRelTypeSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Array"
+				value      	24)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Sequence"
+				value      	47)))))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Association"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"NameIfUnlabeled"
+			value      	"the_$targetClass")))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Role"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeName"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"ForwardReferenceOnly"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"NameIfUnlabeled"
+			value      	"the_$targetClass")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateDataMember"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberName"
+			value      	"$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberVisibility"
+			value      	("DataMemberVisibilitySet" 14))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberVisibilitySet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Public"
+				value      	45)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Protected"
+				value      	44)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Private"
+				value      	43)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Implementation"
+				value      	14)
+			    (object Attribute
+				tool       	"cg"
+				name       	"AtRelationshipVisibility"
+				value      	210)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"ContainerClass"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedContainer"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassContainer"
+			value      	"$supplier *")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetKinds"
+			value      	("GetSetKindsSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetKindsSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Common"
+				value      	200)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Virtual"
+				value      	201)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Abstract"
+				value      	202)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Static"
+				value      	203)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Friend"
+				value      	204)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetByReference"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateGetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetName"
+			value      	"get_$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetIsConst"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineGet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateSetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"SetName"
+			value      	"set_$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"SetReturnsValue"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineSet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateQualifiedGetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedGetName"
+			value      	"get_$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedGetIsConst"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineQualifiedGet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateQualifiedSetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedSetName"
+			value      	"set_$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"QualifiedSetReturnsValue"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineQualifiedSet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateAssocClassDataMember"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassDataMemberName"
+			value      	"$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassDataMemberVisibility"
+			value      	("DataMemberVisibilitySet" 14))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberVisibilitySet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Public"
+				value      	45)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Protected"
+				value      	44)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Private"
+				value      	43)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Implementation"
+				value      	14)
+			    (object Attribute
+				tool       	"cg"
+				name       	"AtRelationshipVisibility"
+				value      	210)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassGetSetKinds"
+			value      	("GetSetKindsSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateAssocClassGetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassGetName"
+			value      	"get_$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassGetIsConst"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineAssocClassGet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateAssocClassSetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassSetName"
+			value      	"set_$target")
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassSetReturnsValue"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineAssocClassSet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocClassForwardReferenceOnly"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateForwardReference"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"IsReadOnly"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"BoundedRoleType"
+			value      	("AssocTypeSet" 47))
+		    (object Attribute
+			tool       	"cg"
+			name       	"AssocTypeSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Array"
+				value      	24)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Sequence"
+				value      	47)))))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Attribute"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"CodeName"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateDataMember"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberName"
+			value      	"$attribute")
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberVisibility"
+			value      	("DataMemberVisibilitySet" 14))
+		    (object Attribute
+			tool       	"cg"
+			name       	"DataMemberVisibilitySet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Public"
+				value      	45)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Protected"
+				value      	44)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Private"
+				value      	43)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Implementation"
+				value      	14)
+			    (object Attribute
+				tool       	"cg"
+				name       	"AtAttributeVisibility"
+				value      	211)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateGetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateSetOperation"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetName"
+			value      	"get_$attribute")
+		    (object Attribute
+			tool       	"cg"
+			name       	"SetName"
+			value      	"set_$attribute")
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetKinds"
+			value      	("GetSetKindsSet" 200))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetKindsSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"cg"
+				name       	"Common"
+				value      	200)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Virtual"
+				value      	201)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Abstract"
+				value      	202)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Static"
+				value      	203)
+			    (object Attribute
+				tool       	"cg"
+				name       	"Friend"
+				value      	204)))
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetIsConst"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GetSetByReference"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineGet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"SetReturnsValue"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"InlineSet"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"CaseSpecifier"
+			value      	"")
+		    (object Attribute
+			tool       	"cg"
+			name       	"IsReadOnly"
+			value      	FALSE)))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Uses"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"ForwardReferenceOnly"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateForwardReference"
+			value      	FALSE)))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Subsystem"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"Directory"
+			value      	"AUTO GENERATE")))
+	    (object Attribute
+		tool       	"DDL"
+		name       	"propertyId"
+		value      	"809135966")
+	    (object Attribute
+		tool       	"DDL"
+		name       	"default__Project"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DataBase"
+			value      	("DataBaseSet" 800))
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DataBaseSet"
+			value      	(list Attribute_Set
+			    (object Attribute
+				tool       	"DDL"
+				name       	"ANSI"
+				value      	800)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"Oracle"
+				value      	801)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"SQLServer"
+				value      	802)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"Sybase"
+				value      	803)
+			    (object Attribute
+				tool       	"DDL"
+				name       	"Watcom"
+				value      	804)))
+		    (object Attribute
+			tool       	"DDL"
+			name       	"PrimaryKeyColumnName"
+			value      	"Id")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"PrimaryKeyColumnType"
+			value      	"NUMBER(5)")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"ViewName"
+			value      	"V_")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"TableName"
+			value      	"T_")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"InheritSuffix"
+			value      	"_V")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DropClause"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"BaseViews"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"DDLScriptFilename"
+			value      	"DDL1.SQL")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"Directory"
+			value      	"AUTO GENERATE")))
+	    (object Attribute
+		tool       	"DDL"
+		name       	"default__Attribute"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"DDL"
+			name       	"ColumnType"
+			value      	"VARCHAR")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"Length"
+			value      	"")
+		    (object Attribute
+			tool       	"DDL"
+			name       	"NullsOK"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"PrimaryKey"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"Unique"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"CompositeUnique"
+			value      	FALSE)
+		    (object Attribute
+			tool       	"DDL"
+			name       	"CheckConstraint"
+			value      	"")))
+	    (object Attribute
+		tool       	"cg"
+		name       	"default__Category"
+		value      	(list Attribute_Set
+		    (object Attribute
+			tool       	"cg"
+			name       	"GenerateIDLModule"
+			value      	TRUE)
+		    (object Attribute
+			tool       	"cg"
+			name       	"ModuleName"
+			value      	(value Text ""))))
+	    (object Attribute
+		tool       	"DDL"
+		name       	"HiddenTool"
+		value      	FALSE)
+	    (object Attribute
+		tool       	"Rose Model Integrator"
+		name       	"HiddenTool"
+		value      	FALSE)
+	    (object Attribute
+		tool       	"Version Control"
+		name       	"HiddenTool"
+		value      	FALSE))
+	quid       	"37BA832E012F"))
--- a/messagingfw/scheduledsendmtm/schedulesendmtm/inc/MsvSchedulePackage.h	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/scheduledsendmtm/schedulesendmtm/inc/MsvSchedulePackage.h	Fri Jun 25 16:18:56 2010 +0530
@@ -16,6 +16,9 @@
 #ifndef MSV_SCHEDULE_PACKAGE_H_
 #define MSV_SCHEDULE_PACKAGE_H_
 
+#include <s32std.h>
+#include <msvstd.h>
+
 //
 //
 //	TMsvSchedulePackage Declaration
--- a/messagingfw/watcherfw/group/watcher.mmp	Mon May 03 12:58:18 2010 +0300
+++ b/messagingfw/watcherfw/group/watcher.mmp	Fri Jun 25 16:18:56 2010 +0530
@@ -50,7 +50,7 @@
 LIBRARY flogger.lib
 #endif
 
-DEFFILE		V2_WATCHER.DEF
+DEFFILE		V2_watcher.DEF
 
 VENDORID 0x70000001
 
--- a/msgfw_plat/always_online_client_api/inc/AlwaysOnlineManagerClient.h	Mon May 03 12:58:18 2010 +0300
+++ b/msgfw_plat/always_online_client_api/inc/AlwaysOnlineManagerClient.h	Fri Jun 25 16:18:56 2010 +0530
@@ -22,7 +22,7 @@
 
 #include <e32base.h>
 #include <msvapi.h>
-#include <alwaysonlinemanagercommon.h>
+#include <AlwaysOnlineManagerCommon.h>
 
 
 const TInt KDefaultMessageSlots = 4;
--- a/msgfw_plat/always_online_plugin_api/inc/AlwaysOnlineEComInterface.h	Mon May 03 12:58:18 2010 +0300
+++ b/msgfw_plat/always_online_plugin_api/inc/AlwaysOnlineEComInterface.h	Fri Jun 25 16:18:56 2010 +0530
@@ -22,7 +22,7 @@
 #include <e32base.h>
 #include <msvapi.h>
 
-#include <Ecom/ECom.h>
+#include <ecom/ecom.h>
 
 class MAlwaysOnlineStatusQueryInterface;