Updating the source code for plugin manager, transport manager, smfserver and smf client.
authorcgandhi <chandradeep.gandhi@sasken.com>
Tue, 18 May 2010 17:37:12 +0530
changeset 7 be09cf1f39dd
parent 6 c39a6cfd1fb9
child 8 4102c67b6e56
child 10 77a56c951f86
Updating the source code for plugin manager, transport manager, smfserver and smf client.
smf/Makefile
smf/bld.inf
smf/inc/common/smfactivity/smfactions.h
smf/inc/common/smfactivity/smfactions_p.h
smf/inc/common/smfclientglobal.h
smf/inc/common/smfcomment/smfcomment.h
smf/inc/common/smfcomment/smfcomment_p.h
smf/inc/common/smfcontacts/smfcontact.h
smf/inc/common/smfcontacts/smfcontact_p.h
smf/inc/common/smfcontacts/smfgroup.h
smf/inc/common/smfcontacts/smfgroup_p.h
smf/inc/common/smfcontacts/smfpost.h
smf/inc/common/smfcontacts/smfpost_p.h
smf/inc/common/smfdes.h
smf/inc/common/smfevent/smfevent.h
smf/inc/common/smfevent/smfevent_p.h
smf/inc/common/smfglobal.h
smf/inc/common/smfmusic/smfalbum.h
smf/inc/common/smfmusic/smfalbum_p.h
smf/inc/common/smfmusic/smfartists.h
smf/inc/common/smfmusic/smfartists_p.h
smf/inc/common/smfmusic/smflyrics.h
smf/inc/common/smfmusic/smflyrics_p.h
smf/inc/common/smfmusic/smfmusicfingerprint.h
smf/inc/common/smfmusic/smfmusicfingerprint_p.h
smf/inc/common/smfmusic/smfmusicprofile.h
smf/inc/common/smfmusic/smfmusicprofile_p.h
smf/inc/common/smfmusic/smfmusicrating.h
smf/inc/common/smfmusic/smfmusicrating_p.h
smf/inc/common/smfmusic/smfplaylist.h
smf/inc/common/smfmusic/smfplaylist_p.h
smf/inc/common/smfmusic/smfsubtitle.h
smf/inc/common/smfmusic/smfsubtitle_p.h
smf/inc/common/smfmusic/smftrackinfo.h
smf/inc/common/smfmusic/smftrackinfo_p.h
smf/inc/common/smfpictures/smfpicture.h
smf/inc/common/smfpictures/smfpicture_p.h
smf/inc/common/smfplace/smfplace.h
smf/inc/common/smfplace/smfplace_p.h
smf/inc/smfclient/smfactivityfetcher.h
smf/inc/smfclient/smfclient.h
smf/inc/smfclient/smfcontactfetcher.h
smf/inc/smfclient/smfgallery.h
smf/inc/smfclient/smfmusic.h
smf/inc/smfclient/smfpostprovider.h
smf/inc/smfclient/smfprovider.h
smf/inc/smfplugins/base/smfpluginbase.h
smf/inc/smfplugins/base/smfpluginutil.h
smf/inc/smfplugins/base/smfproviderbase.h
smf/inc/smfplugins/base/smfproviderbase_p.h
smf/inc/smfplugins/smfactivity/smfactivityfetcherplugin.h
smf/inc/smfplugins/smfcontacts/smfcontactfetcherplugin.h
smf/inc/smfplugins/smfcontacts/smfpostproviderplugin.h
smf/inc/smfplugins/smfmusic/smflyricsserviceplugin.h
smf/inc/smfplugins/smfmusic/smfmusiceventsplugin.h
smf/inc/smfplugins/smfmusic/smfmusicsearchplugin.h
smf/inc/smfplugins/smfmusic/smfmusicserviceplugin.h
smf/inc/smfplugins/smfmusic/smfplaylistserviceplugin.h
smf/inc/smfplugins/smfpictures/smfgalleryplugin.h
smf/smf.pro
smf/smfdes.h
smf/smfservermodule/Makefile
smf/smfservermodule/bld.inf
smf/smfservermodule/bwins/smfclientu.def
smf/smfservermodule/eabi/smfclientu.def
smf/smfservermodule/smfclient/ABLD.BAT
smf/smfservermodule/smfclient/Makefile
smf/smfservermodule/smfclient/bld.inf
smf/smfservermodule/smfclient/client/client.pri
smf/smfservermodule/smfclient/client/smfclient.cpp
smf/smfservermodule/smfclient/client/smfclient.h
smf/smfservermodule/smfclient/client/smfclient_p.cpp
smf/smfservermodule/smfclient/client/smfclient_p.h
smf/smfservermodule/smfclient/client/smfclientsymbian.cpp
smf/smfservermodule/smfclient/client/smfclientsymbian.h
smf/smfservermodule/smfclient/client/smfclientsymbiansession.h
smf/smfservermodule/smfclient/client/smfcontactfetcher.cpp
smf/smfservermodule/smfclient/client/smfcontactfetcher.h
smf/smfservermodule/smfclient/client/smfcontactfetcher_p.cpp
smf/smfservermodule/smfclient/client/smfcontactfetcher_p.h
smf/smfservermodule/smfclient/client/smfgallery.cpp
smf/smfservermodule/smfclient/client/smfgallery.h
smf/smfservermodule/smfclient/client/smfgallery_p.cpp
smf/smfservermodule/smfclient/client/smfgallery_p.h
smf/smfservermodule/smfclient/client/smfpostprovider.cpp
smf/smfservermodule/smfclient/client/smfpostprovider.h
smf/smfservermodule/smfclient/client/smfpostprovider_p.cpp
smf/smfservermodule/smfclient/client/smfpostprovider_p.h
smf/smfservermodule/smfclient/common/common.pri
smf/smfservermodule/smfclient/common/smfalbum.cpp
smf/smfservermodule/smfclient/common/smfalbum.h
smf/smfservermodule/smfclient/common/smfalbum_p.h
smf/smfservermodule/smfclient/common/smfartists.cpp
smf/smfservermodule/smfclient/common/smfartists.h
smf/smfservermodule/smfclient/common/smfartists_p.h
smf/smfservermodule/smfclient/common/smfclientglobal.h
smf/smfservermodule/smfclient/common/smfcomment.cpp
smf/smfservermodule/smfclient/common/smfcomment.h
smf/smfservermodule/smfclient/common/smfcomment_p.h
smf/smfservermodule/smfclient/common/smfcontact.cpp
smf/smfservermodule/smfclient/common/smfcontact.h
smf/smfservermodule/smfclient/common/smfcontact_p.h
smf/smfservermodule/smfclient/common/smfevent.cpp
smf/smfservermodule/smfclient/common/smfevent.h
smf/smfservermodule/smfclient/common/smfevent_p.h
smf/smfservermodule/smfclient/common/smfglobal.h
smf/smfservermodule/smfclient/common/smfgroup.cpp
smf/smfservermodule/smfclient/common/smfgroup.h
smf/smfservermodule/smfclient/common/smfgroup_p.h
smf/smfservermodule/smfclient/common/smflocation.cpp
smf/smfservermodule/smfclient/common/smflocation.h
smf/smfservermodule/smfclient/common/smflocation_p.h
smf/smfservermodule/smfclient/common/smflyrics.cpp
smf/smfservermodule/smfclient/common/smflyrics.h
smf/smfservermodule/smfclient/common/smflyrics_p.h
smf/smfservermodule/smfclient/common/smfmusicfingerprint.cpp
smf/smfservermodule/smfclient/common/smfmusicfingerprint.h
smf/smfservermodule/smfclient/common/smfmusicfingerprint_p.h
smf/smfservermodule/smfclient/common/smfmusicprofile.cpp
smf/smfservermodule/smfclient/common/smfmusicprofile.h
smf/smfservermodule/smfclient/common/smfmusicprofile_p.h
smf/smfservermodule/smfclient/common/smfmusicrating.cpp
smf/smfservermodule/smfclient/common/smfmusicrating.h
smf/smfservermodule/smfclient/common/smfmusicrating_p.h
smf/smfservermodule/smfclient/common/smfobserver.h
smf/smfservermodule/smfclient/common/smfpicture.cpp
smf/smfservermodule/smfclient/common/smfpicture.h
smf/smfservermodule/smfclient/common/smfpicture_p.h
smf/smfservermodule/smfclient/common/smfplaylist.cpp
smf/smfservermodule/smfclient/common/smfplaylist.h
smf/smfservermodule/smfclient/common/smfplaylist_p.h
smf/smfservermodule/smfclient/common/smfpluginutil.cpp
smf/smfservermodule/smfclient/common/smfpluginutil.h
smf/smfservermodule/smfclient/common/smfpost.cpp
smf/smfservermodule/smfclient/common/smfpost.h
smf/smfservermodule/smfclient/common/smfpost_p.h
smf/smfservermodule/smfclient/common/smfprovider.cpp
smf/smfservermodule/smfclient/common/smfprovider.h
smf/smfservermodule/smfclient/common/smfsubtitle.cpp
smf/smfservermodule/smfclient/common/smfsubtitle.h
smf/smfservermodule/smfclient/common/smfsubtitle_p.h
smf/smfservermodule/smfclient/common/smftrackinfo.cpp
smf/smfservermodule/smfclient/common/smftrackinfo.h
smf/smfservermodule/smfclient/common/smftrackinfo_p.h
smf/smfservermodule/smfclient/main.cpp
smf/smfservermodule/smfclient/smfclient.pkg
smf/smfservermodule/smfclient/smfclient.pro
smf/smfservermodule/smfserver/ABLD.BAT
smf/smfservermodule/smfserver/Makefile
smf/smfservermodule/smfserver/bld.inf
smf/smfservermodule/smfserver/datastoremgr/datastoremgr.pri
smf/smfservermodule/smfserver/datastoremgr/doc/Doxyfile
smf/smfservermodule/smfserver/datastoremgr/dsm.cpp
smf/smfservermodule/smfserver/datastoremgr/dsm.h
smf/smfservermodule/smfserver/datastoremgr/smfSns.cpp
smf/smfservermodule/smfserver/datastoremgr/smfSns.h
smf/smfservermodule/smfserver/datastoremgr/smfSocialProfile.cpp
smf/smfservermodule/smfserver/datastoremgr/smfSocialProfile.h
smf/smfservermodule/smfserver/datastoremgr/smfUserProfile.cpp
smf/smfservermodule/smfserver/datastoremgr/smfUserProfile.h
smf/smfservermodule/smfserver/datastoremgr/test.cpp
smf/smfservermodule/smfserver/main.cpp
smf/smfservermodule/smfserver/pluginmgr/pluginmgr.pri
smf/smfservermodule/smfserver/pluginmgr/smfpluginmanager.cpp
smf/smfservermodule/smfserver/pluginmgr/smfpluginmanager.h
smf/smfservermodule/smfserver/pluginmgr/smfpluginmanagerutil.cpp
smf/smfservermodule/smfserver/pluginmgr/smfpluginmanagerutil.h
smf/smfservermodule/smfserver/server/server.pri
smf/smfservermodule/smfserver/server/smfserver.cpp
smf/smfservermodule/smfserver/server/smfserver.h
smf/smfservermodule/smfserver/server/smfserverqt_p.h
smf/smfservermodule/smfserver/server/smfserversymbian.cpp
smf/smfservermodule/smfserver/server/smfserversymbian_p.h
smf/smfservermodule/smfserver/smfplugins/smfcontactfetcherplugin.h
smf/smfservermodule/smfserver/smfplugins/smfgalleryplugin.h
smf/smfservermodule/smfserver/smfplugins/smflyricsserviceplugin.h
smf/smfservermodule/smfserver/smfplugins/smfmusiceventsplugin.h
smf/smfservermodule/smfserver/smfplugins/smfmusicsearchplugin.h
smf/smfservermodule/smfserver/smfplugins/smfmusicserviceplugin.h
smf/smfservermodule/smfserver/smfplugins/smfplaylistserviceplugin.h
smf/smfservermodule/smfserver/smfplugins/smfpluginbase.h
smf/smfservermodule/smfserver/smfplugins/smfplugins.pri
smf/smfservermodule/smfserver/smfplugins/smfpostproviderplugin.h
smf/smfservermodule/smfserver/smfplugins/smfproviderbase.h
smf/smfservermodule/smfserver/smfserver.loc
smf/smfservermodule/smfserver/smfserver.pro
smf/smfservermodule/smfserver/smfserver_template.pkg
smf/smfservermodule/smfserver/smfserverglobal.h
smf/smfservermodule/smfserver/transportmgr/smftransportmanager.cpp
smf/smfservermodule/smfserver/transportmgr/smftransportmanager.h
smf/smfservermodule/smfserver/transportmgr/smftransportmanagerutil.cpp
smf/smfservermodule/smfserver/transportmgr/smftransportmanagerutil.h
smf/smfservermodule/smfserver/transportmgr/transportmgr.pri
smf/smfservermodule/smfservermodule.pro
smf/smfservermodule/util/qjson/ABLD.BAT
smf/smfservermodule/util/qjson/CMakeLists.txt
smf/smfservermodule/util/qjson/COPYING
smf/smfservermodule/util/qjson/INSTALL
smf/smfservermodule/util/qjson/Makefile
smf/smfservermodule/util/qjson/QJson.pc.in
smf/smfservermodule/util/qjson/README
smf/smfservermodule/util/qjson/bld.inf
smf/smfservermodule/util/qjson/bwins/qjsonu.def
smf/smfservermodule/util/qjson/cmake/modules/CMakeLists.txt
smf/smfservermodule/util/qjson/cmake/modules/FindQJSON.cmake
smf/smfservermodule/util/qjson/doc/Doxyfile
smf/smfservermodule/util/qjson/doc/footer.html
smf/smfservermodule/util/qjson/doc/header.html
smf/smfservermodule/util/qjson/doc/qjson.dox
smf/smfservermodule/util/qjson/eabi/qjsonu.def
smf/smfservermodule/util/qjson/lib/qjson.prl
smf/smfservermodule/util/qjson/qjson.pro
smf/smfservermodule/util/qjson/src/ABLD.BAT
smf/smfservermodule/util/qjson/src/CMakeLists.txt
smf/smfservermodule/util/qjson/src/Makefile
smf/smfservermodule/util/qjson/src/bld.inf
smf/smfservermodule/util/qjson/src/json_parser.cc
smf/smfservermodule/util/qjson/src/json_parser.hh
smf/smfservermodule/util/qjson/src/json_parser.yy
smf/smfservermodule/util/qjson/src/json_scanner.cpp
smf/smfservermodule/util/qjson/src/json_scanner.h
smf/smfservermodule/util/qjson/src/location.hh
smf/smfservermodule/util/qjson/src/parser.cpp
smf/smfservermodule/util/qjson/src/parser.h
smf/smfservermodule/util/qjson/src/parser_p.h
smf/smfservermodule/util/qjson/src/parserrunnable.cpp
smf/smfservermodule/util/qjson/src/parserrunnable.h
smf/smfservermodule/util/qjson/src/position.hh
smf/smfservermodule/util/qjson/src/qjson_debug.h
smf/smfservermodule/util/qjson/src/qjson_export.h
smf/smfservermodule/util/qjson/src/qjson_template.pkg
smf/smfservermodule/util/qjson/src/qobjecthelper.cpp
smf/smfservermodule/util/qjson/src/qobjecthelper.h
smf/smfservermodule/util/qjson/src/serializer.cpp
smf/smfservermodule/util/qjson/src/serializer.h
smf/smfservermodule/util/qjson/src/serializerrunnable.cpp
smf/smfservermodule/util/qjson/src/serializerrunnable.h
smf/smfservermodule/util/qjson/src/src.pro
smf/smfservermodule/util/qjson/src/stack.hh
smf/smfservermodule/util/qjson/tests/CMakeLists.txt
smf/smfservermodule/util/qjson/tests/Makefile
smf/smfservermodule/util/qjson/tests/bld.inf
smf/smfservermodule/util/qjson/tests/cmdline_tester.cpp
smf/smfservermodule/util/qjson/tests/example.txt
smf/smfservermodule/util/qjson/tests/person.cpp
smf/smfservermodule/util/qjson/tests/person.h
smf/smfservermodule/util/qjson/tests/testparser.cpp
smf/smfservermodule/util/qjson/tests/testqobjecthelper.cpp
smf/smfservermodule/util/qjson/tests/tests.loc
smf/smfservermodule/util/qjson/tests/tests_template.pkg
smf/smfservermodule/util/qjson/tests/testserializer.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/Makefile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,180 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.1) on: Wed May 5 13:57:42 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+#  Name        : Makefile
+#  Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE          = Makefile
+QMAKE             = e:\Qt\4.6.1\bin\qmake
+DEL_FILE          = del
+DEL_DIR           = rmdir
+MOVE              = move
+XCOPY             = xcopy /d /f /h /r /y /i
+ABLD              = ABLD.BAT
+DEBUG_PLATFORMS   = winscw gcce armv5 armv6
+RELEASE_PLATFORMS = gcce armv5 armv6
+MAKE              = make
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+DEFINES	 = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS -DQT_GUI_LIB -DQT_CORE_LIB
+INCPATH	 =  -I"E:/Qt/4.6.1/include/QtCore" -I"E:/Qt/4.6.1/include/QtCore/tmp" -I"E:/Qt/4.6.1/include/QtGui" -I"E:/Qt/4.6.1/include/QtGui/tmp" -I"E:/Qt/4.6.1/include" -I"E:/Qt/4.6.1/include/tmp" -I"E:/Qt/4.6.1/mkspecs/common/symbian" -I"E:/Qt/4.6.1/mkspecs/common/symbian/tmp" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smfcredentialmgr" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smfcredentialmgr/tmp" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/stdapis" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/stdapis/sys" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/stdapis/stlport" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/middleware" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/domain/middleware" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/domain/middleware/loc" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/tmp"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+	$(QMAKE) -spec symbian-abld -o "bld.inf" "E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smf.pro"
+
+bld.inf:
+	$(QMAKE)
+
+$(ABLD): bld.inf
+	bldmake bldfiles
+
+debug: $(ABLD)
+	$(ABLD) build winscw udeb
+	$(ABLD) build gcce udeb
+	$(ABLD) build armv5 udeb
+	$(ABLD) build armv6 udeb
+
+release: $(ABLD)
+	$(ABLD) build gcce urel
+	$(ABLD) build armv5 urel
+	$(ABLD) build armv6 urel
+
+debug-winscw: $(ABLD)
+	$(ABLD) build winscw udeb
+debug-gcce: $(ABLD)
+	$(ABLD) build gcce udeb
+debug-armv5: $(ABLD)
+	$(ABLD) build armv5 udeb
+debug-armv6: $(ABLD)
+	$(ABLD) build armv6 udeb
+release-gcce: $(ABLD)
+	$(ABLD) build gcce urel
+release-armv5: $(ABLD)
+	$(ABLD) build armv5 urel
+release-armv6: $(ABLD)
+	$(ABLD) build armv6 urel
+
+export: $(ABLD)
+	$(ABLD) export
+
+cleanexport: $(ABLD)
+	$(ABLD) cleanexport
+
+smfcredentialmgr\$(MAKEFILE): 
+	@$(CHK_DIR_EXISTS) smfcredentialmgr\ $(MKDIR) smfcredentialmgr\ 
+	cd smfcredentialmgr\ && $(QMAKE) smfcredentialmgr.pro -win32 -o $(MAKEFILE)
+sub-smfcredentialmgr-qmake_all:  FORCE
+	@$(CHK_DIR_EXISTS) smfcredentialmgr\ $(MKDIR) smfcredentialmgr\ 
+	cd smfcredentialmgr\ && $(QMAKE) smfcredentialmgr.pro -win32 -o $(MAKEFILE)
+sub-smfcredentialmgr: smfcredentialmgr\$(MAKEFILE) FORCE
+	cd smfcredentialmgr\ && $(MAKE) -f $(MAKEFILE)
+smfservermodule\$(MAKEFILE): 
+	@$(CHK_DIR_EXISTS) smfservermodule\ $(MKDIR) smfservermodule\ 
+	cd smfservermodule\ && $(QMAKE) smfservermodule.pro -win32 -o $(MAKEFILE)
+sub-smfservermodule-qmake_all:  FORCE
+	@$(CHK_DIR_EXISTS) smfservermodule\ $(MKDIR) smfservermodule\ 
+	cd smfservermodule\ && $(QMAKE) smfservermodule.pro -win32 -o $(MAKEFILE)
+sub-smfservermodule: smfservermodule\$(MAKEFILE) FORCE
+	cd smfservermodule\ && $(MAKE) -f $(MAKEFILE)
+smfsettingsui\$(MAKEFILE): 
+	@$(CHK_DIR_EXISTS) smfsettingsui\ $(MKDIR) smfsettingsui\ 
+	cd smfsettingsui\ && $(QMAKE) smfsettingsui.pro -win32 -o $(MAKEFILE)
+sub-smfsettingsui-qmake_all:  FORCE
+	@$(CHK_DIR_EXISTS) smfsettingsui\ $(MKDIR) smfsettingsui\ 
+	cd smfsettingsui\ && $(QMAKE) smfsettingsui.pro -win32 -o $(MAKEFILE)
+sub-smfsettingsui: smfsettingsui\$(MAKEFILE) FORCE
+	cd smfsettingsui\ && $(MAKE) -f $(MAKEFILE)
+
+
+E:\Qt\4.6.1\bin\moc.exe:
+	(cd $(QTDIR)/src/tools/moc && $(MAKE))
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+FORCE:
+
+winscw_deployment:
+
+winscw_deployment_clean:
+
+sis: restore_build
+	$(if $(wildcard smf_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+	createpackage.bat $(QT_SIS_OPTIONS) smf_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+	$(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+	$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+restore_build:
+-include .make.cache
+
+store_build:
+	@echo # ============================================================================== > .make.cache
+	@echo # This file is generated by make and should not be modified by the user >> .make.cache
+	@echo #  Name        : .make.cache >> .make.cache
+	@echo #  Part of     : smf >> .make.cache
+	@echo #  Description : This file is used to cache last build target for >> .make.cache
+	@echo #                make sis target. >> .make.cache
+	@echo #  Version     :  >> .make.cache
+	@echo # >> .make.cache
+	@echo # ============================================================================== >> .make.cache
+	@echo. >> .make.cache
+	@echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> .make.cache
+
+dodistclean:
+	-$(MAKE) -f "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfcredentialmgr\Makefile" dodistclean
+	-$(MAKE) -f "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\Makefile" dodistclean
+	-$(MAKE) -f "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfsettingsui\Makefile" dodistclean
+	-@ if EXIST "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\Makefile" $(DEL_FILE)  "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\Makefile"
+	-@ if EXIST "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\.make.cache" $(DEL_FILE)  "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\.make.cache"
+	-@ if EXIST "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\bld.inf" $(DEL_FILE)  "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\bld.inf"
+
+distclean: clean dodistclean
+
+clean: $(ABLD)
+	-$(ABLD) reallyclean
+	-bldmake clean
+
+clean-debug: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+	$(ABLD) reallyclean gcce udeb
+	$(ABLD) reallyclean armv5 udeb
+	$(ABLD) reallyclean armv6 udeb
+
+clean-release: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+	$(ABLD) reallyclean armv5 urel
+	$(ABLD) reallyclean armv6 urel
+
+clean-debug-winscw: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+clean-debug-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce udeb
+clean-debug-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 udeb
+clean-debug-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 udeb
+clean-release-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+clean-release-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 urel
+clean-release-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 urel
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/bld.inf	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,31 @@
+// ============================================================================
+// * Makefile for building: smf
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-05T13:57:42
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// * Project:  smf.pro
+// * Template: subdirs
+// ============================================================================
+
+#define BLD_INF_SMF_FCFA3DF2
+
+#ifndef BLD_INF_SMFCREDENTIALMGR_F265B6F1
+	#include "smfcredentialmgr\bld.inf"
+#endif // BLD_INF_SMFCREDENTIALMGR_F265B6F1
+#ifndef BLD_INF_SMFSERVERMODULE_0FBFD7DA
+	#include "smfservermodule\bld.inf"
+#endif // BLD_INF_SMFSERVERMODULE_0FBFD7DA
+#ifndef BLD_INF_SMFSETTINGSUI_0870E284
+	#include "smfsettingsui\bld.inf"
+#endif // BLD_INF_SMFSETTINGSUI_0870E284
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+
+prj_mmpfiles
+
+
+prj_extensions
+
--- a/smf/inc/common/smfactivity/smfactions.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,300 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Description:
- * Represents activities in terms similar to standard activity stream http://activitystrea.ms/
- */
-
-#ifndef SMFACTIONS_H_
-#define SMFACTIONS_H_
-
-#include <QList>
-#include <QImage>
-#include <QDateTime>
-#include <QStringList>
-#include <QUrl>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <QMetaType>
-
-#include "smfclientglobal.h"
-
-
-/**
- * The actions in the activity based on Atom Activity Base Schema
- * see http://activitystrea.ms/schema/1.0/activity-schema-01.html
- */
-enum SmfActivityVerb
-	{
-	SmfActivityMarkAsFavorite,
-	SmfActivityStartFollowing,
-	SmfActivityMarkLiked,
-	SmfActivityMakeFriend,
-	SmfActivityJoin,
-	SmfActivityPlay,
-	SmfActivityPost,
-	SmfActivitySave,
-	SmfActivityShare,
-	SmfActivityTag,
-	SmfActivityUpdate,
-	};
-
-/**
- * The type of the object on which the activity is performed - as per Atom Activity Base Schema
- * see http://activitystrea.ms/schema/1.0/activity-schema-01.html
- */
-enum SmfActivityObjectType
-	{
-	SmfActivityObjTypeArticle,
-	SmfActivityObjTypeAudio,
-	SmfActivityObjTypeBookmark,
-	SmfActivityObjTypeComment,
-	SmfActivityObjTypeFile,
-	SmfActivityObjTypeFolder,
-	SmfActivityObjTypeGroup,
-	SmfActivityObjTypeList,
-	SmfActivityObjTypeNote,
-	SmfActivityObjTypePerson,
-	SmfActivityObjTypePhoto,
-	SmfActivityObjTypePhotoAlbum,
-	SmfActivityObjTypePlace,
-	SmfActivityObjTypePlaylist,
-	SmfActivityObjTypeProduct,
-	SmfActivityObjTypeReview,
-	SmfActivityObjTypeService,
-	SmfActivityObjTypeStatus,
-	SmfActivityObjTypeVideo,
-	SmfActivityObjTypeMusic,
-	SmfActivityObjTypeEvent,
-	SmfActivityObjTypeAdvanced
-	};
-
-enum SmfActivityFor
-	{
-		SmfActivitySelf,
-		SmfActivityFriend,
-		SmfActivityOthers
-	};
-
-class SmfActivityObjectPrivate;
-/**
- * @ingroup smf_common_group
- * The object class represents an object in an activity (e.g.a picture or a music track on which somebody commented)
- */
-class SMFCLIENT_EXPORT SmfActivityObject 
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfActivityObject();
-
-	/**
-	 * Copy Constructor
-	 */
-	SmfActivityObject(const SmfActivityObject& aOther);
-	
-	/**
-	 * Destructor
-	 */
-	~SmfActivityObject();
-
-	/**
-	 * retruns service specific Id of this object in the entry 
-	 */
-	QString id() const;
-	
-	/**
-	 * returns thumbnail if availabel for this object in the entry
-	 */
-	QImage thumbnail() const;
-	
-	/**
-	 * Captions for this object
-	 */
-	QString caption() const;
-	
-	/**
-	 * retruns the type of this object
-	 */
-	SmfActivityObjectType type() const;
-	
-	/**
-	 * returns data of the object - see type() for casting
-	 */
-	QVariant objData() const;
-	
-	/**
-	 * url of this object, e.g. url of the image on which somebody commented
-	 */
-	QString link() const;
-	
-	/**
-	 * Time of creation of this object
-	 */
-	QDateTime time() const;
-	
-	/**
-	 * Description of the content of this object
-	 */
-	QString content() const;
-
-	/**
-	 * sets service specific id for this object
-	 */
-	void setId(const QString& aId);
-	
-	/**
-	 * sets thumbnail for this object , not mandatory
-	 */
-	void setThumbnail(const QImage& aIcon);
-	
-	/**
-	 * sets caption for this object
-	 */
-	void setCaption(const QString& aCap);
-	
-	/**
-	 * sets type of this object - ObjData should be set next accordingly
-	 */
-	void setType(const SmfActivityObjectType& aObjType);
-	
-	/**
-	 * sets object data e,g, SmfImage, SmfComment, SmfMusic, SmfEvent etc
-	 * setType() with suitable type should have been called before  
-	 */
-	void setObjData( const QVariant& aData);
-	/**
-	 * sets the url for the object
-	 */
-	void setLink( const QString& aLink);
-	/**
-	 * sets the time of creation/last modification of the object
-	 */
-	void setTime( const QDateTime& aTime);
-	
-	/**
-	 * sets the description of the content of this object
-	 */
-	void setContent( const QString& aText) ;
-	
-private:
-	QSharedDataPointer<SmfActivityObjectPrivate> d;
-	
-	friend QDataStream& operator >> ( QDataStream &aOut, const SmfActivityObject& aData);
-	friend QDataStream& operator << ( QDataStream &aIn, const SmfActivityObject& aData);	
-	};
-// Make the class SmfActivityObject known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfActivityObject)
-
-
-
-
-
-class SmfActivityEntryPrivate;
-/**
- * @ingroup smf_common_group
- * The object class represents an entry in the list of activities 
- */
-class SMFCLIENT_EXPORT SmfActivityEntry
-	{
-
-public:
-	
-	SmfActivityEntry();
-	SmfActivityEntry(const SmfActivityEntry& aOther);
-	~SmfActivityEntry();
-	
-	/**
-	 * Returns service specific id of the of entry 
-	 */
-	QString id() const;
-	/**
-	 * returns the title of the entry - mostly be a string 
-	 */
-	SmfPost title() const;
-
-	/**
-	 * returns detail descriptiopn of this entry in the activity list. might be absent if title is sufficient
-	 */
-	SmfPost details() const;
-	
-	/**
-	 * returns the author of the activity - the name and the uri field are most commonly used
-	 * Other information fields might be empty
-	 */
-	SmfContact author() const;
-	
-	/**
-	 * returns the verb of the activity ,e.g. Robin "marked" Joseph as a friend   
-	 */
-	SmfActivityVerb actionName() const;
-
-	/**
-	 * There can be multiple objects in a single activity entry, though this may be rare - only for few verbs.
-	 * @return list of activity objects (mostly one object)
-	 */
-	QList<SmfActivityObject> activities() const;
-	
-	/**
-	 * returns information about the target of the activity, for verbs that support a target.
-	 * For example, a target is a photo album to which photos were added
-	 */
-	SmfActivityObject targetObj() const;
-
-	/**
-	 * sets service specific id of the of entry 
-	 */
-	bool setId( const QString& aId);
-	
-	/**
-	 * sets the title of the entry - mostly be a string 
-	 */
-	bool setTitle(const SmfPost& aTitle);
-
-	/**
-	 * sets detail descriptiopn of this entry in the activity list. might be absent if title is sufficient
-	 */
-	bool setDetails(const SmfPost& aDetails);
-	
-	/**
-	 * sets the author of the activity - the name and the uri field are most commonly used
-	 * Other information fields might be empty
-	 */
-	bool setAuthor(const SmfContact& aContact);
-	
-	/**
-	 * sets the verb of the activity ,e.g. Robin "marked" Joseph as a friend   
-	 */
-	void setActionName(SmfActivityVerb  aVerb);
-
-	/**
-	 * sets single or multiple objects in a single activity entry, though multiple may be rare - only for few verbs.
-	 * @param list of activity objects (mostly one object)
-	 */
-	bool setActivities(QList<SmfActivityObject>& aList);
-	
-	/**
-	 * returns information about the target of the activity, for verbs that support a target.
-	 * For example, a target is a photo album to which photos were added
-	 */
-	bool setTargetObj(const SmfActivityObject& aTarget);
-	
-private:
-	QSharedDataPointer<SmfActivityEntryPrivate> d;
-	
-	friend QDataStream& operator >> ( QDataStream &aOut, const SmfActivityEntry& aData);
-	friend QDataStream& operator << ( QDataStream &aIn, const SmfActivityEntry& aData);	
-	};
-// Make the class SmfActivityEntry known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfActivityEntry)
-
-#endif /* SMFACTIONS_H_ */
--- a/smf/inc/common/smfactivity/smfactions_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Description:
- * Contains private implementation of the smfactions
- */
-
-#ifndef SMFACTIONS_P_H_
-#define SMFACTIONS_P_H_
-
-#include <QDateTime>
-#include <QSharedData>
-#include <QList>
-#include <QImage>
-#include <QDateTime>
-#include <QStringList>
-#include <QUrl>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <QMetaType>
-
-#include "smfactions.h"
-
-class SmfActivityObjectPrivate: public QSharedData
-	{
-public:	
-	SmfActivityObjectPrivate();
-	SmfActivityObjectPrivate(const SmfActivityObjectPrivate& aOther);
-	~SmfActivityObjectPrivate();
-	
-	/**
-	 * Data members
-	 */
-	QString m_id;
-	QImage m_thumbnail;
-	QString m_caption;
-	SmfActivityObjectType m_type;
-	QVariant m_objData;
-	QString m_link;
-	QDateTime m_time;
-	QString m_content;
-	};
-
-class SmfActivityEntryPrivate: public QSharedData
-	{
-public:
-	SmfActivityEntryPrivate();
-	SmfActivityEntryPrivate(const SmfActivityEntryPrivate& aOther);
-	~SmfActivityEntryPrivate();
-	
-	QString m_id;
-	SmfPost m_title;
-	SmfPost m_details;
-	SmfContact m_author;
-	SmfActivityVerb m_actionName;
-	QList<SmfActivityObject> m_activities;
-	SmfActivityObject m_targetObj;
-	};
-
-#endif /* SMFACTIONS_P_H_ */
--- a/smf/inc/common/smfclientglobal.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/**
-* Copyright (c) 2010 Sasken Communication Technologies Ltd.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "{License}"
-* which accompanies  this distribution, and is available
-* at the URL "{LicenseUrl}".
-*
-* Initial Contributors:
-* Mansij Roy, Sasken Communication Technologies Ltd - Initial contribution
-*
-* Contributors:
-*
-* Description:
-* Interface spefication for sfm service provider
-*
-*/
-
-#ifndef SMFCLIENTGLOBAL_H_
-#define SMFCLIENTGLOBAL_H_
-
-#include <QtCore/QtGlobal>
-#include <QMetaType>
-
-#ifdef SMFCLIENT_LIBRARY
-#  define SMFCLIENT_EXPORT  //Q_DECL_EXPORT
-#else
-#  define SMFCLIENT_EXPORT Q_DECL_IMPORT
-#endif
-
-/**
-* To be designed later
-*/
-#define SMF_GETSERVICES(INTERFACE,INTERFACESTRING) ;
-
-#endif /* SMFCLIENTGLOBAL_H_ */
--- a/smf/inc/common/smfcomment/smfcomment.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The comment class represents a comment (on a picture or a music track etc)
- *
- */
-
-#ifndef SMFCOMMENT_H_
-#define SMFCOMMENT_H_
-
-#include <QDateTime>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfCommentPrivate;
-
-/**
- * @ingroup smf_common_group
- * The comment class represents a comment (on a picture or a music track etc)
- */
-class SMFCLIENT_EXPORT SmfComment
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfComment();
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfComment( const SmfComment &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 * @return The current object reference
-	 */
-	SmfComment& operator=(const SmfComment &aOther);
-	
-	/**
-	 * Destructor
-	 */
-	~SmfComment( );
-	
-	/**
-	 * Method to get the comment text
-	 * @return The comment text
-	 */
-	QString text( ) const;
-	
-	/**
-	 * Method to get the comment time stamp
-	 * @return The comment time stamp value
-	 */
-	QDateTime timeStamp( ) const;
-	
-	/**
-	 * Method to get the id of the comment
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to get the canonical link for the comment
-	 * @return The base url 
-	 */
-	QString link( ) const;
-
-	/**
-	 * Method to set the comment text
-	 * @param aText The comment text to be set
-	 */
-	void setText( const QString &aText );
-	
-	/**
-	 * Method to set the time stamp
-	 * @param aDateTime The comment time stamp value to be set
-	 */
-	void setTimeStamp( const QDateTime &aDateTime );
-	
-	/**
-	 * Method to set the id of the comment
-	 * @param aId The ID value to be set
-	 */
-	void setId( const QString &aId );
-	
-	/**
-	 * Method to set the link of the comment
-	 * @param aLink The url to be set
-	 */
-	void setLink( const QString &aLink );
-
-private:
-	QSharedDataPointer<SmfCommentPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfComment &aComment );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfComment &aComment );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfComment object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aComment The SmfComment object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfComment &aComment );
-
-/**
- * Method for Internalization. Reads a SmfComment object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aComment The SmfComment object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfComment &aComment);
-
-
-// Make the class SmfComment known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfComment)
-
-
-#endif /* SMFCOMMENT_H_ */
--- a/smf/inc/common/smfcomment/smfcomment_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfComment class
- *
- */
-
-#ifndef SMFCOMMENT_P_H_
-#define SMFCOMMENT_P_H_
-
-#include <QDateTime>
-#include <QSharedData>
-
-class SmfCommentPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfCommentPrivate( );
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfCommentPrivate( const SmfCommentPrivate &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfCommentPrivate( );
-  
-	QString m_text;			// comment text
-	QDateTime m_timeStamp;	// comment time stamp
-	QString m_commentId; //id of the comment
-	QString m_link; //url\permalink of the comment 
-	
-};
-
-#endif /* SMFCOMMENT_P_H_ */
--- a/smf/inc/common/smfcontacts/smfcontact.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,136 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The contact class represents a social contact
- * Note: This class has dependencies on QtMobility project
- *
- */
-
-#ifndef SMFCONTACT_H_
-#define SMFCONTACT_H_
-
-#include "qtcontacts.h"
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-using namespace QtMobility;
-
-class SmfContactPrivate;
-
-/**
- * @ingroup smf_common_group
- * The contact class represents a social contact
- * 
- * Note: This class has dependencies on QtMobility project
- */
-class SMFCLIENT_EXPORT SmfContact
-	{
-
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object
-	 */
-	SmfContact();
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfContact( const SmfContact &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfContact( );
-	
-	/**
-	 * Method to get the available sub fields for contacts.
-	 * The following are the available sub types of a contact
-	 *   QtMobility::QContactAddress		Address;
-	 *   QtMobility::QContactAnniversary	Anniversary;
-	 *   QtMobility::QContactAvatar			Avatar;
-	 *   QtMobility::QContactBirthday		Birthday;
-	 *   QtMobility::QContactId				ContactId;
-	 *   QtMobility::QContactEmailAddress	EmailAddress;
-	 *   QtMobility::QContactGender			Gender;
-	 *   QtMobility::QContactGeolocation	Geolocation;
-	 *   QtMobility::QContactGuid			Guid;
-	 *   QtMobility::QContactName			Name;
-	 *   QtMobility::QContactNickname		Nickname;
-	 *   QtMobility::QContactNote			Note;
-	 *   QtMobility::QContactOnlineAccount	OnlineAccount;
-	 *   QtMobility::QContactOrganization	Organization;
-	 *   QtMobility::QContactPhoneNumber	PhoneNumber;
-	 *   QtMobility::QContactTimestamp		Timestamp;
-	 *   QtMobility::QContactType			Type;
-	 *   QtMobility::QContactUrl			Url;
-	 * @return The Available sub fields for this contact
-	 */
-	QStringList subTypes( ) const;
-	
-	/**
-	 * Method to convert an SmfContact to a QContact
-	 * Changes made to the returned QContact will not be reflected 
-	 * in its parent SmfContact object
-	 * @param aContact QContact corresponding to SmfContact 
-	 */
-	void convert( QContact &aContact ) const;
-	
-	/**
-	 * Method to get the value of a sub field for this contact
-	 * @param aSubType The sub field type 
-	 * @return The value of the sub field subType
-	 * @see subTypes()
-	 */
-	QVariant value( const QString& aSubType ) const;
-	
-private:
-	QSharedDataPointer<SmfContactPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfContact &aContact );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfContact &aContact );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfContact object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aContact The SmfContact object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfContact &aContact );
-
-/**
- * Method for Internalization. Reads a SmfContact object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aContact The SmfContact object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfContact &aContact );
-
-// Make the class SmfContact known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfContact)
-
-#endif /* SMFCONTACT_H_ */
--- a/smf/inc/common/smfcontacts/smfcontact_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfContact class
- *
- */
-
-#ifndef SMFCONTACT_P_H_
-#define SMFCONTACT_P_H_
-
-#include <QSharedData>
-
-using namespace QtMobility;
-
-class SmfContactPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfContactPrivate( );
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfContactPrivate( const SmfContactPrivate &aOther );
-	/**
-	 * Destructor
-	 */
-	~SmfContactPrivate( );
-  
-	QVariantMap	m_details;// contact details
-	
-};
-
-#endif /* SMFCONTACT_P_H_ */
--- a/smf/inc/common/smfcontacts/smfgroup.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,110 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- *
- * Description:
- * The group class represents an instance of a group as per SN site terminolgy
- *
- */
-
-#ifndef SMFGROUP_H_
-#define SMFGROUP_H_
-
-#include <smfcontact.h>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfGroupPrivate;
-
-
-/**
- * @ingroup smf_common_group
- * The group class represents an instance of a group as per SN site terminolgy
- */
-class SMFCLIENT_EXPORT SmfGroup
-	{
-
-public:
-	/**
-	 * Constructor with default argument
-	 * @param list The list of members in the group
-	 */
-	SmfGroup( QList<SmfContact>* list = 0 );
-
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfGroup( const SmfGroup &aOther );
-
-	/**
-	 * Destructor
-	 */
-	~SmfGroup( );
-
-public:
-	/**
-	 * Method to get the list of members in the group
-	 * @return The list of members in the group
-	 */
-	QList<SmfContact> members( ) const;
-
-	/**
-	 * Method to get the name of the group
-	 * @return The name of the group
-	 */
-	QString name( ) const;
-
-	/**
-	 * Method to get the id of the group
-	 * @return The ID value
-	 */
-	QString id( ) const;
-
-private:
-	QSharedDataPointer<SmfGroupPrivate> d;
-
-	friend QDataStream &operator<<( QDataStream &aDataStream,
-			const SmfGroup &aGroup );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream,
-			SmfGroup &aGroup );
-
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfGroup object to
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aGroup The SmfGroup object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream,
-		const SmfGroup &aGroup );
-
-/**
- * Method for Internalization. Reads a SmfGroup object from
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aGroup The SmfGroup object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream,
-		SmfGroup &aGroup);
-
-// Make the class SmfGroup known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfGroup)
-
-#endif /* SMFGROUP_H_ */
--- a/smf/inc/common/smfcontacts/smfgroup_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfGroup class
- *
- */
-
-#ifndef SMFGROUP_P_H_
-#define SMFGROUP_P_H_
-
-#include <smfcontact.h>
-#include <QSharedData>
-
-class SmfGroupPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfGroupPrivate( ) { m_members = NULL; m_groupName.clear(); m_groupId.clear(); }
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfGroupPrivate( const SmfGroupPrivate &aOther ) : 
-		QSharedData ( aOther ), 
-		m_members ( aOther.m_members ), 
-		m_groupName ( aOther.m_groupName ),
-		m_groupId ( aOther.m_groupId ) 	{ }
-	
-	/**
-	 * Destructor
-	 */
-	~SmfGroupPrivate( );
-  
-	QList<SmfContact> *m_members;	// members in the group
-	QString m_groupName;
-	QString m_groupId;
-	// Other details to be added
-};
-
-
-#endif /* SMFGROUP_P_H_ */
--- a/smf/inc/common/smfcontacts/smfpost.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The post class represents an instance of a post to a SN site
- *
- */
-
-#ifndef SMFPOST_H_
-#define SMFPOST_H_
-
-#include <QImage>
-#include <QUrl>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <QTextDocument>
-#include <smfclientglobal.h>
-
-class SmfPostPrivate;
-
-
-/**
- * @ingroup smf_common_group
- * The post class represents an instance of a post to a SN site
- */
-class SMFCLIENT_EXPORT SmfPost : public QTextDocument
-	{
-
-public:
-	/**
-	 * Constructor with default argument
-	 * @param text Text
-	 * @param aParent The parent object
-	 */
-	SmfPost( QString text,QObject *aParent = 0 );
-	
-	/**
-	 * Constructor
-	 * @param aText The post's text
-	 * @param aImage The post's image
-	 * @param aUrl The post's url
-	 */
-	SmfPost( QString aTitle, QString aDesc, QImage aImage, QUrl aUrl );
-
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfPost( const SmfPost &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPost( );
-	
-	/**
-	 * Method to get the title of the post
-	 * @return The post's title
-	 */
-	QString title( ) const;
-	
-	/**
-	 * Method to get the description of the post
-	 * @return The post's description
-	 */
-	QString description( ) const;
-	
-	/**
-	 * Method to get the image of the post
-	 * @return The post's image
-	 */
-	QImage image( ) const;
-	
-	/**
-	 * Method to get the url of the post
-	 * @return The post's url
-	 */
-	QUrl url( ) const;
-	
-	/**
-	 * Method to get the id of the post
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the title of the post
-	 * @param aTitle The post's new title
-	 */
-	void setTitle( const QString &aTitle );
-	
-	/**
-	 * Method to set the description of the post
-	 * @param aDesc The post's new description
-	 */
-	void setDescription( const QString &aDesc );
-	
-	/**
-	 * Method to set the image of the post
-	 * @param aPic The post's image
-	 */
-	void setImage( const QImage& aPic );
-	
-	/**
-	 * Method to set the url of the post
-	 * @param aUrl The post's url
-	 */
-	void setUrl( QUrl& aUrl );
-	
-private:
-	QSharedDataPointer<SmfPostPrivate> d;
-
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfPost &aPost );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfPost &aPost );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfPost object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aPost The SmfPost object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfPost &aPost );
-
-/**
- * Method for Internalization. Reads a SmfPost object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aPost The SmfPost object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfPost &aPost);
-
-// Make the class SmfPost known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfPost)
-
-#endif /* SMFPOST_H_ */
--- a/smf/inc/common/smfcontacts/smfpost_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfPost class
- *
- */
-
-#ifndef SMFPOST_P_H_
-#define SMFPOST_P_H_
-
-#include <QSharedData>
-
-class SmfPostPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfPostPrivate( ) ;
-	
-	/**
-	 * Constructor
-	 */
-	SmfPostPrivate( QString aTitle, QString aDesc, QImage aImage, QUrl aUrl );
-
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfPostPrivate( const SmfPostPrivate &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPostPrivate( );
-  
-	QString m_title;	// title
-	QString m_desc;		// description
-	QImage m_image;		// image
-	QUrl m_url;			// url
-	QString m_postId;	// post's unique Id
-	
-};
-
-#endif /* SMFPOST_P_H_ */
--- a/smf/inc/common/smfdes.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- *
- * Description:
- * Intro Page
- *
- * @ref smf_high_level_design
- */
-
-/**
- * @mainpage SMF (Social Mobile Framework Interfaces)
- * @defgroup smf_high_level_design SMF high level design
- *
- * Social Mobile Framework is a application level framework which allows Qt Applications
- * use the common web APIs to perform social web activities.
- *
- * Product name is "SMF"
- *
- * For details please refer to http://developer.symbian.org/wiki/index.php/Social_Mobile_Framework
- *
- * @section smf_interfaces SMF Interfaces
- *
- * There are two sets of interfaces -
- * 		@subsection smf_client_interfaces Client Interfaces
- * 				- Client Applications (e.g. Media Player, Contacts, Game) uses these APIs to access SMF. see @ref smf_client_group
- *
- * 		@subsection smf_plugin_interfaces Plugin Interfaces
- * 				- Service Providers (e.g. Facebook, Flickr, last.fm) implements these APIs to provide service to SMF - see @ref smf_plugin_group
- *
- * Currently, @ref smf_client_interfaces and @ref smf_plugin_interfaces are defined for remote contacts, remote
- * image gallery and remote music services. There are common classes defined for holding data accross clients
- * and plugins, present in inc\common, see - @ref smf_common_group
- *
- *
- *		@section smf_client_usage Client Usage Example
- *		- This shows how to use the SMF client APIs in applications, e.g. Client can define suitable Models using lists returned by these APIs
- *				- how to fetch a list of contacts from a remote server e.g. Facebook, see @ref MyApplication::displayFriends()
- *				- how to get a @ref QContact from a SmfContacts see @ref MyApplication::showlist()
- *				- how to get a list of images from a remote gallery e.g. Flickr.com, see @ref MyApplication::displayGallery()
- *				- how to post privately to a contact see @ref MyApplication::postUpdate()
- *				- how to tell others about the music you are currently listen to, see @ref MyApplication::updateCurrentPlaying()
- *				- how to list all the activities that has happened recently, see @ref MyApplication::getActivities() and @ref MyApplication::showActivities() 
- *
- *		@section smf_sample_plugin Sample Plugin From Service provider
- *		- This shows how to write a plugin for extending SMF service. Authentication Application also needs to be provided for these plugins.
- *				- how to create request to be sent to a remote server e.g. Flickr.com, see @ref SamplePlugin::pictures()
- *				- how to implement posting of comment on a picture to Flickr.com,  @ref SamplePlugin::postComment()
- *				- how to parse the response that arrived from Flickr.com, see @ref SamplePlugin::responseAvailable()
- *				- how to use JSON parsing from SmfPluginUtil, see @ref SamplePlugin::responseAvailable()
- *
- *		@section smf_dependency Dependency
- *		SMF uses QtMobility for mainly contacts information, see QtMobility project.
-   */
-/**
- * @defgroup smf_common_group Common Data Classes
- */
-/**
- * @defgroup smf_client_group Client Classes
- */
-/**
- * @defgroup smf_plugin_group Plugin Classes
- */
--- a/smf/inc/common/smfevent/smfevent.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,185 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfEvent class represents an event
- *
- */
-
-#ifndef SMFEVENT_H_
-#define SMFEVENT_H_
-
-#include <smfplace.h>
-#include <smfartists.h>
-#include <QStringList>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfEventPrivate;
-
-/**
- * @ingroup smf_common_group
- * The event class represents an event
- */
-class SMFCLIENT_EXPORT SmfEvent
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfEvent( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfEvent( const SmfEvent &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 * @return The current object reference
-	 */
-	SmfEvent& operator=( const SmfEvent &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfEvent( );
-	
-	/**
-	 * Method to get the event name
-	 * @return The event name
-	 */
-	QString title( ) const;
-	
-	/**
-	 * Method to get the event date and time
-	 * @return The date and time of the event
-	 */
-	QDateTime eventDateTime( ) const;
-	
-	/**
-	 * Method to get the event duration
-	 * @return The duration of the event
-	 */
-	QTime duration( ) const;
-	
-	/**
-	 * Method to get the artist names
-	 * @return The list of artists in the event
-	 */
-	SmfArtists artists( ) const;
-	
-	/**
-	 * Method to get the venue of the event
-	 * @return The venue of the event
-	 */
-	SmfPlace venue( ) const;
-	
-	/**
-	 * Method to get the URL for getting tickets for the event
-	 * @return The Url for getting ticket for the event
-	 */
-	QUrl ticketUrl( ) const;
-	
-	/**
-	 * Method to get the id of the event
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the event name
-	 * @param aName The new event name
-	 */
-	void setTitle( const QString &aName );
-	
-	/**
-	 * Method to set the event date and time
-	 * @param aDateTime The new date and time of the event
-	 * 
-	 */
-	void setEventDateTime( const QDateTime &aDateTime );
-	
-	/**
-	 * Method to set the event duration
-	 * @param aDuration The new duration of the event
-	 * 
-	 */
-	void setDuration( const QTime &aDuration );
-	
-	/**
-	 * Method to set the artist
-	 * @param aArtists The new artists in the event
-	 */
-	void setArtists( const SmfArtists &aArtists );
-	
-	/**
-	 * Method to set the venue name
-	 * @param aVenue The new venue of the event
-	 */
-	void setVenue( const SmfPlace &aVenue );
-	
-	/**
-	 * Method to set the URL for getting tickets for the event
-	 * @param aUrl The new Url for getting ticket for the event
-	 */
-	void setTicketUrl( const QUrl &aUrl );
-	
-	/**
-	 * Method to set the id of the event
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId );
-	
-private:
-	QSharedDataPointer<SmfEventPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfEvent &aEvent );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfEvent &aEvent );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfEvent object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aEvent The SmfEvent object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfEvent &aEvent );
-
-/**
- * Method for Internalization. Reads a SmfEvent object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aEvent The SmfEvent object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfEvent &aEvent);
-
-
-// Make the class SmfEvent known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfEvent)
-
-
-#endif /* SMFEVENT_H_ */
--- a/smf/inc/common/smfevent/smfevent_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfEvent class
- *
- */
-
-#ifndef SMFEVENT_P_H_
-#define SMFEVENT_P_H_
-
-
-#include <smfplace.h>
-#include <smfartists.h>
-#include <QStringList>
-#include <QSharedData>
-
-class SmfEventPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfEventPrivate( );
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfEventPrivate( const SmfEventPrivate &aOther );
-	/**
-	 * Destructor
-	 */
-	~SmfEventPrivate( );
-  
-	QString		m_name;			// event name
-	QDateTime 	m_dateTime;		// event date and time
-	QTime		m_duration;		// event duration
-	SmfArtists m_artists;		// event artist names
-	SmfPlace 	m_venue;		// venue of the event
-	QUrl 		m_url;			// ticket url
-	QString 	m_eventId;	// event Id
-	
-};
-
-#endif /* SMFEVENT_P_H_ */
--- a/smf/inc/common/smfglobal.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,284 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The smfglobal.h files contains all global data common to Smf framework
- *
- */
-
-#ifndef SMFGLOBAL_H_
-#define SMFGLOBAL_H_
-
-#include <QBuffer>
-#include <QNetworkRequest>
-#include <QNetworkAccessManager>
-
-/**
- * Exact definition to be decided later
- */
-#define SMF_SERVICE_NAME(INTERFACE,INTERFACENAME)
-
-/**
- * Indicates first page for a web query
- */
-const int SMF_FIRST_PAGE=0;
-
-/**
- * Default value for per page item for web queries
- */
-const int SMF_ITEMS_PER_PAGE=10;
-
-
-/**
- * Enum declaration for Network status information
- */
-enum SmfNetworkStatus
-	{
-	SmfNetworkConnectedHome = 0,
-	SmfNetworkConnectedRoaming,	// value = 1
-	SmfNetworkStateNotKnown,	// value = 2
-	SmfNetworkConnected,		// value = 3
-	SmfNetworkNotConnected		// value = 4
-	};
-
-/**
- * Enum declaration for result of transport initialize operation
- */
-enum SmfTransportInitializeResult
-	{
-	SmfTransportInitNetworkNotAvailable = 0,
-	SmfTransportInitRoamingNetworkUsageNotEnabled,	// value = 1
-	SmfTransportInitNoError							// value = 2
-	};
-
-/**
- * The enumeration used to indicate result of transport to the plugins
- */
-enum SmfTransportResult
-	{
-	SmfTransportOpNoError = 0,
-	SmfTransportOpConnectionRefusedError,
-	SmfTransportOpRemoteHostClosedError,
-	SmfTransportOpHostNotFoundError,
-	SmfTransportOpTimeoutError,
-	SmfTransportOpOperationCanceledError,
-	SmfTransportOpSslHandshakeFailedError,
-	SmfTransportOpProxyConnectionRefusedError,
-	SmfTransportOpProxyConnectionClosedError,
-	SmfTransportOpProxyNotFoundError,
-	SmfTransportOpProxyTimeoutError,
-	SmfTransportOpProxyAuthenticationRequiredError,
-	SmfTransportOpContentAccessDenied,
-	SmfTransportOpContentOperationNotPermittedError,
-	SmfTransportOpContentNotFoundError,
-	SmfTransportOpAuthenticationRequiredError,
-	SmfTransportOpContentReSendError,
-	SmfTransportOpProtocolUnknownError,
-	SmfTransportOpProtocolInvalidOperationError,
-	SmfTransportOpUnknownNetworkError,
-	SmfTransportOpUnknownProxyError,
-	SmfTransportOpUnknownContentError,
-	SmfTransportOpProtocolFailure,
-	SmfTransportOpUnknownError,
-	SmfTransportOpIAPChanged,
-	SmfTransportOpCancelled
-	};
-
-/**
- * The enumeration used to indicate result of plugin manager operations
- */
-enum SmfPluginManagerResult
-	{
-	SmfPluginNoError = 0,
-	SmfPluginNotFound,
-	SmfPluginNotLoaded,
-	SmfPluginLoaded,
-	SmfPluginLoadError,
-	SmfPluginAuthorised,
-	SmfPluginNotAuthorised,
-	SmfPluginRequestCreated,
-	SmfPluginRequestCreationFailed,
-	SmfPluginUnknownService,
-	SmfPluginRequestSendingFailed,
-	SmfPluginSOPCheckFailed,
-	SmfPluginServiceError,
-	SmfPluginResponseParsed,
-	SmfPluginResponseParseFailure,
-	SmfPluginSendRequestAgain,
-	SmfPluginUnknownError
-	};
-
-
-/**
- * The enumeration used to denote errors reported by plugin
- * Smf can't continue without handling these errors
- */
-enum SmfPluginError
-	{
-	SmfPluginErrNone = 0, 
-	SmfPluginErrTooManyRequest,
-	SmfPluginErrRequestQuotaExceeded,
-	SmfPluginErrInvalidRequest,
-	SmfPluginErrUserNotLoggedIn,
-	SmfPluginErrAuthenticationExpired,
-	SmfPluginErrPermissionDenied,
-	SmfPluginErrInvalidApplication,
-	SmfPluginErrServiceUnavailable,
-	SmfPluginErrServiceTemporaryUnavailable,
-	SmfPluginErrFormatNotSupported, 
-	SmfPluginErrDataSizeExceeded  
-	};
-
-/**
- * The enumeration used to track the plugin methods return type
- */
-enum SmfPluginRetType
-	{
-	SmfSendRequestAgain = 0,
-	SmfRequestComplete,
-	SmfRequestError
-	};
-
-
-/**
- * The enumeration used to indicate the type of network operation done
- */
-enum SmfRequestOperation
-	{
-	SmfContactGetFriends = 0,
-	SmfContactGetFollowers,
-	SmfContactSearch,
-	SmfContactSearchNear,
-	SmfContactGetGroups,
-	SmfContactSearchInGroup,
-	SmfContactRetrievePosts,
-	SmfContactPost,
-	SmfContactUpdatePost,
-	SmfContactPostDirected,
-	SmfContactCommentOnAPost,
-	SmfContactPostAppearence,
-	SmfContactSharePost,
-	SmfMusicGetLyrics,
-	SmfMusicGetSubtitle,
-	SmfMusicGetEventsOnLoc,
-	SmfMusicGetVenueOnLoc,
-	SmfMusicGetEventsOnVenue,
-	SmfMusicPostEvents,
-	SmfMusicGetRecommendations,
-	SmfMusicGetTracks,
-	SmfMusicGetTrackInfo,
-	SmfMusicGetStores,
-	SmfMusicPostCurrentPlaying,
-	SmfMusicGetUserInfo,
-	SmfMusicSearchUser,
-	SmfMusicGetPlaylists,
-	SmfMusicGetPlaylistsOfUser,
-	SmfMusicAddToPlaylist,
-	SmfMusicPostCurrentPlayingPlaylist,
-	SmfPictureGetPictures,
-	SmfPictureDescription,
-	SmfPictureUpload,
-	SmfPictureMultiUpload,
-	SmfPicturePostComment
-	
-	};
-
-
-/**
- * The structure used to hold the request created by the plugins
- */
-struct SmfPluginRequestData
-	{
-	/**
-	 * Indicates the type of operation performed, like getting Friends 
-	 * list, upload image etc
-	 */
-	SmfRequestOperation iRequestType;
-	
-	/**
-	 * The QNetworkRequest that has to be filled up by the plugins
-	 */
-	QNetworkRequest iNetworkRequest;
-	
-	/**
-	 * The data to be posted in case of HTTP POST operation
-	 */
-	QBuffer *iPostData;
-	
-	/**
-	 * The type of HTTP transaction, like GET, POST etc
-	 */
-	QNetworkAccessManager::Operation iHttpOperationType;
-	
-	};
-
-/**
- * The structure used to hold the request created by the plugins
- */
-struct SmfResultPage
-	{
-	/**
-	 * The total number of items
-	 */
-	uint iTotalItems;
-	
-	/**
-	 * The number of items per page
-	 */
-	uint iItemsPerPage;
-	
-	/**
-	 * The total number of pages
-	 */
-	uint iTotalPages;
-	
-	/**
-	 * The current fetched page number
-	 */
-	uint iPageNum;
-	};
-
-/**
- * The structure used to track the data usage of each plugins
- */
-struct SmfPluginDataUsage
-	{
-	/**
-	 * Application that called the plugin
-	 */
-	QString iAppName;
-	
-	/**
-	 * Interface implemented by the plugin
-	 */
-	QString iInterfaceName;
-	
-	/**
-	 * The service provider
-	 */
-	QString iServiceProviderName;
-	
-	/**
-	 * number of bytes sent for this plugin
-	 */
-	uint iBytesSent;
-	
-	/**
-	 * number of bytes received for this plugin
-	 */
-	uint iBytesReceived;
-	
-	};
-
-#endif /* SMFGLOBAL_H_ */
--- a/smf/inc/common/smfmusic/smfalbum.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfAlbum class represents a music album
- *
- */
-#ifndef SMFALBUM_H_
-#define SMFALBUM_H_
-
-#include <QImage>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfAlbumPrivate;
-class SmfArtists;
-
-/**
- * @ingroup smf_common_group
- * The SmfAlbum class represents a music album
- */
-class SMFCLIENT_EXPORT SmfAlbum
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfAlbum( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfAlbum( const SmfAlbum &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 * @return The target reference value
-	 */
-	SmfAlbum& operator=( const SmfAlbum &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfAlbum( );
-	
-	/**
-	 * Method to get the album name
-	 * @return The album name
-	 */
-	QString name( ) const;
-	
-	/**
-	 * Method to get the album's image
-	 * @return The album's image
-	 */
-	QImage image( ) const;
-	
-	/**
-	 * Method to get the artist names
-	 * @return The list of artists in the album
-	 */
-	SmfArtists artists( ) const;
-	
-	/**
-	 * Method to get the id of the album
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the album name
-	 * @param aName The album name
-	 */
-	void setName( const QString &aName );
-	
-	/**
-	 * Method to set the album's image
-	 * @param aImage The album's image
-	 */
-	void setImage( const QImage &aImage );
-	
-	/**
-	 * Method to set the artist names
-	 * @param aArtists The list of artists in the album
-	 */
-	void setArtists( const SmfArtists &aArtists );
-	
-	/**
-	 * Method to set the id of the album
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId );
-	
-private:
-	QSharedDataPointer<SmfAlbumPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfAlbum &aAlbum );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfAlbum &aAlbum );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfAlbum object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aAlbum The SmfAlbum object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfAlbum &aAlbum );
-
-/**
- * Method for Internalization. Reads a SmfAlbum object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aAlbum The SmfAlbum object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfAlbum &aAlbum);
-
-// Make the class SmfAlbum known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfAlbum)
-
-#endif /* SMFALBUM_H_ */
--- a/smf/inc/common/smfmusic/smfalbum_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfAlbum class
- *
- */
-
-#ifndef SMFALBUM_P_H_
-#define SMFALBUM_P_H_
-
-#include <smfartists.h>
-#include <QStringList>
-#include <QSharedData>
-
-class SmfAlbumPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfAlbumPrivate( ) ;
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfAlbumPrivate( const SmfAlbumPrivate &aOther ) ;
-	/**
-	 * Destructor
-	 */
-	~SmfAlbumPrivate( );
-  
-	QString		m_name;		// album name
-	QImage 		m_image;	// album image
-	SmfArtists m_artists;	// album's artists
-	QString 	m_albumId;	// album Id
-	
-};
-
-#endif /* SMFALBUM_P_H_ */
--- a/smf/inc/common/smfmusic/smfartists.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfArtists class represents the artists in a track or an album
- *
- */
-
-#ifndef SMFARTISTS_H_
-#define SMFARTISTS_H_
-
-#include <QImage>
-#include <QUrl>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfArtistsPrivate;
-
-/**
- * @ingroup smf_common_group
- * The SmfArtists class represents the artists in a track or an album
- */
-class SMFCLIENT_EXPORT SmfArtists
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfArtists();
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfArtists( const SmfArtists &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 */
-	SmfArtists& operator=( const SmfArtists &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfArtists( );
-	
-	/**
-	 * Method to get the artists names
-	 * @return The list of artists
-	 */
-	QStringList names( ) const;
-	
-	/**
-	 * Method to get the image of the artists
-	 * @return The image of te artists
-	 */
-	QImage image( ) const;
-	
-	/**
-	 * Method to get the url of the artists
-	 * @return The url of the artists
-	 */
-	QUrl url( ) const;
-		
-	/**
-	 * Method to set the artists names
-	 * @param aList The list of artists names
-	 */
-	void setNames( const QStringList &aList );
-	
-	/**
-	 * Method to set the image of the artists
-	 * @param aImage The image of the artists
-	 */
-	void setImage( const QImage &aImage );
-	
-	/**
-	 * Method to set the url of the artists
-	 * @param aUrl The url of the artists
-	 */
-	void setUrl( const QUrl &aUrl );
-		
-private:
-	QSharedDataPointer<SmfArtistsPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfArtists &aArtists );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfArtists &aArtists );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfArtists object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aArtists The SmfArtists object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfArtists &aArtists );
-
-/**
- * Method for Internalization. Reads a SmfArtists object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aArtists The SmfArtists object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfArtists &aArtists);
-
-// Make the class SmfArtists known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfArtists)
-
-#endif /* SMFARTISTS_H_ */
--- a/smf/inc/common/smfmusic/smfartists_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfArtists class
- *
- */
-
-#ifndef SMFARTISTS_P_H_
-#define SMFARTISTS_P_H_
-
-#include <QImage>
-#include <QUrl>
-#include <QStringList>
-#include <QSharedData>
-
-class SmfArtistsPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfArtistsPrivate( );
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfArtistsPrivate( const SmfArtistsPrivate &aOther );
-	/**
-	 * Destructor
-	 */
-	~SmfArtistsPrivate( );
-  
-	QStringList	m_names;	// artist names
-	QImage 		m_image;	// image
-	QUrl 		m_url;		// url
-};
-
-
-#endif /* SMFARTISTS_P_H_ */
--- a/smf/inc/common/smfmusic/smflyrics.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfLyrics class represents an instance of a music track's lyrics
- *
- */
-
-#ifndef SMFLYRICS_H_
-#define SMFLYRICS_H_
-
-#include <qdatastream.h>
-#include <QDateTime>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfLyricsPrivate;
-
-/**
- * @ingroup smf_common_group
- * The lyrics class represents an instance of a music track's lyrics
- */
-class SMFCLIENT_EXPORT SmfLyrics
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfLyrics( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfLyrics( const SmfLyrics &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 * @return The current object reference
-	 */
-	SmfLyrics& operator=( const SmfLyrics &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfLyrics( );
-	
-	/**
-	 * Method to get the lyrics
-	 * @return The lyrics data
-	 */
-	QByteArray lyrics( ) const;
-	
-	/**
-	 * Method to get the language
-	 * @return The language
-	 */
-	QString language( ) const;
-	
-	/**
-	 * Method to get the release year
-	 * @return The release year
-	 */
-	QDateTime releaseYear( ) const;
-	
-	/**
-	 * Method to get the id of the lyrics
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the lyrics
-	 * @param aLyrics The lyrics data
-	 */
-	void setLyrics( const QByteArray &aLyrics );
-	
-	/**
-	 * Method to set the language
-	 * @param aLang The language
-	 */
-	void setLanguage( const QString &aLang );
-	
-	/**
-	 * Method to set the release year
-	 * @param aRelYear The release year
-	 */
-	void setReleaseYear( const QDateTime &aRelYear );
-	
-	/**
-	 * Method to set the id of the lyrics
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId );
-	
-private:
-	QSharedDataPointer<SmfLyricsPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfLyrics &aLyrics );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfLyrics &aLyrics );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfLyrics object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aLyrics The SmfLyrics object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfLyrics &aLyrics );
-
-/**
- * Method for Internalization. Reads a SmfLyrics object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aLyrics The SmfLyrics object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfLyrics &aLyrics);
-
-
-// Make the class SmfLyrics known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfLyrics)
-
-
-#endif /* SMFLYRICS_H_ */
--- a/smf/inc/common/smfmusic/smflyrics_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfLyrics class
- *
- */
-
-#ifndef SMFLYRICS_P_H_
-#define SMFLYRICS_P_H_
-
-#include <QDateTime>
-#include <QSharedData>
-
-class SmfLyricsPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfLyricsPrivate( );
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfLyricsPrivate( const SmfLyricsPrivate &aOther );
-	/**
-	 * Destructor
-	 */
-	~SmfLyricsPrivate( );
-  
-	QByteArray m_lyrics;	// lyrics data
-	QString m_language;		// language
-	QDateTime m_releaseYr;	// release year
-	QString m_lyricsId;		// lyrics id
-	
-};
-
-#endif /* SMFLYRICS_P_H_ */
--- a/smf/inc/common/smfmusic/smfmusicfingerprint.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfMusicFingerPrint class represents a music finger print used in searches
- *
- */
-
-#ifndef SMFMUSICFINGERPRINT_H_
-#define SMFMUSICFINGERPRINT_H_
-
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfMusicFingerPrintPrivate;
-
-/**
- * @ingroup smf_common_group
- * The musicfingerprint class represents a music finger print used in searches
- */
-class SMFCLIENT_EXPORT SmfMusicFingerPrint
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfMusicFingerPrint( );
-	
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object
-	 */
-	SmfMusicFingerPrint( const SmfMusicFingerPrint &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 */
-	SmfMusicFingerPrint& operator=( const SmfMusicFingerPrint &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfMusicFingerPrint( );
-	
-	/**
-	 * Method to get the music finger print data
-	 * @return The music finger print data
-	 */
-	QByteArray musicFingerPrint ( ) const;
-	
-	/**
-	 * Method to set the music finger print data
-	 * @param aFp The music finger print data
-	 */
-	void setMusicFingerPrint ( const QByteArray &aFp);
-	
-private:
-	QSharedDataPointer<SmfMusicFingerPrintPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfMusicFingerPrint &aMFP );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfMusicFingerPrint &aMFP );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfMusicFingerPrint object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aMFP The SmfMusicFingerPrint object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfMusicFingerPrint &aMFP );
-
-/**
- * Method for Internalization. Reads a SmfMusicFingerPrint object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aMFP The SmfMusicFingerPrint object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfMusicFingerPrint &aMFP);
-
-
-// Make the class SmfMusicFingerPrint known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfMusicFingerPrint)
-
-
-#endif /* SMFMUSICFINGERPRINT_H_ */
--- a/smf/inc/common/smfmusic/smfmusicfingerprint_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfMusicFingerPrint class
- *
- */
-
-#ifndef SMFMUSICFINGERPRINT_P_H_
-#define SMFMUSICFINGERPRINT_P_H_
-
-#include <QSharedData>
-
-class SmfMusicFingerPrintPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfMusicFingerPrintPrivate( );
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfMusicFingerPrintPrivate( const SmfMusicFingerPrintPrivate &aOther );
-	/**
-	 * Destructor
-	 */
-	~SmfMusicFingerPrintPrivate( );
-  
-	QByteArray m_fingerPrintData;
-	
-};
-
-
-#endif /* SMFMUSICFINGERPRINT_P_H_ */
--- a/smf/inc/common/smfmusic/smfmusicprofile.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The music profile class represents a user's profile in music site
- *
- */
-
-#ifndef SMFMUSICPROFILE_H_
-#define SMFMUSICPROFILE_H_
-
-#include <smftrackinfo.h>
-#include <smfevent.h>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfMusicProfilePrivate;
-
-/**
- * @ingroup smf_common_group
- * The music profile class represents a user's profile in music site
- */
-class SMFCLIENT_EXPORT SmfMusicProfile
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfMusicProfile( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfMusicProfile( const SmfMusicProfile &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 */
-	SmfMusicProfile& operator=( const SmfMusicProfile &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfMusicProfile( );
-	
-	/**
-	 * Method to get the user's used tracks
-	 * @return The users track list
-	 */
-	QList<SmfTrackInfo> musicUsageInfo( ) const;
-	
-	/**
-	 * Method to get the user's interested tracks
-	 * @return The users interested track list
-	 */
-	QList<SmfTrackInfo> interestInfo( ) const;
-	
-	/**
-	 * Method to get the user events as list of SmfEvents
-	 * @return The list of events
-	 */
-	QList<SmfEvent> userEvents( ) const;
-	
-	/**
-	 * Method to get the id of the music profile
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the user's used tracks
-	 * @param aUsage The users new track list
-	 */
-	void setMusicUsageInfo( const QList<SmfTrackInfo>& aUsage );
-	
-	/**
-	 * Method to set the user's interested tracks
-	 * @param aInterest The users new interested track list
-	 */
-	void setInterestInfo( const QList<SmfTrackInfo>& aInterest );
-
-	/**
-	 * Method to set the user events as list of SmfEvents
-	 * @param aList The list of events
-	 */
-	void setUserEvents( const QList<SmfEvent> &aList );
-	
-	/**
-	 * Method to set the id of the music profile
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId );
-
-private:
-	QSharedDataPointer<SmfMusicProfilePrivate> d;
-
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfMusicProfile &aProfile );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfMusicProfile &aProfile );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfMusicProfile object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aProfile The SmfMusicProfile object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfMusicProfile &aProfile );
-
-/**
- * Method for Internalization. Reads a SmfMusicProfile object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aProfile The SmfMusicProfile object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfMusicProfile &aProfile);
-
-
-// Make the class SmfMusicProfile known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfMusicProfile)
-
-#endif /* SMFMUSICPROFILE_H_ */
--- a/smf/inc/common/smfmusic/smfmusicprofile_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfMusicProfile class
- *
- */
-
-#ifndef SMFMUSICPROFILE_P_H_
-#define SMFMUSICPROFILE_P_H_
-
-
-#include <smftrackinfo.h>
-#include <smfevent.h>
-#include <QSharedData>
-
-class SmfMusicProfilePrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfMusicProfilePrivate( ) ;
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfMusicProfilePrivate( const SmfMusicProfilePrivate &aOther );
-	/**
-	 * Destructor
-	 */
-	~SmfMusicProfilePrivate( );
-  
-	QList<SmfTrackInfo> m_usage;	// usage tracks
-	QList<SmfTrackInfo> m_interest;// interested tracks
-	QList<SmfEvent> m_events;		// events list
-	QString m_profileId;			// profile Id
-	
-};
-
-#endif /* SMFMUSICPROFILE_P_H_ */
--- a/smf/inc/common/smfmusic/smfmusicrating.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The music rating class represents an instance of rating 
- * about a music track
- *
- */
-
-#ifndef SMFMUSICRATING_H_
-#define SMFMUSICRATING_H_
-
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfTrackInfo;
-class SmfMusicRatingPrivate;
-
-/**
- * Indicates range of values to represent ratings,
- * SP should normalize their rating value to this scale
- */
-const int SMF_MAX_RATING = 10;
-const int SMF_MIN_RATING = 0;
-
-/**
- * @ingroup smf_common_group
- * The music rating class represents an instance of rating 
- * about a music track 
- */
-class SMFCLIENT_EXPORT SmfMusicRating
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The SmfTrackInfo instance
-	 */
-	SmfMusicRating(SmfTrackInfo *aParent = 0);
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfMusicRating( const SmfMusicRating &aOther );
-	
-	/**
-	 * Overloaded = operator 
-	 * @param aOther The reference object
-	 */
-	SmfMusicRating& operator=( const SmfMusicRating &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfMusicRating( );
-	
-	/**
-	 * Method to get the rating
-	 * @return The rating value
-	 */
-	int rating( ) const;
-
-	/**
-	 * Method to get the max rating
-	 * @return The max rating value
-	 */
-	int maxRating( ) const;
-	
-	/**
-	 * Method to get the min rating
-	 * @return The min rating value
-	 */
-	int minRating( ) const;
-	
-	/**
-	 * Method to set the rating
-	 * @param aRating The rating value
-	 */
-	void setRating( const int &aRating );
-
-	/**
-	 * Method to set the max rating
-	 * @param aMax The max rating value
-	 */
-	void setMaxRating( const int &aMax );
-	
-	/**
-	 * Method to set the min rating
-	 * @param aMin The min rating value
-	 */
-	void setMinRating( const int &aMin );
-	
-private:
-	QSharedDataPointer<SmfMusicRatingPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfMusicRating &aMusicRating );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfMusicRating &aMusicRating );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfMusicRating object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aMusicRating The SmfMusicRating object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfMusicRating &aMusicRating );
-
-/**
- * Method for Internalization. Reads a SmfMusicRating object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aMusicRating The SmfMusicRating object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfMusicRating &aMusicRating);
-
-
-// Make the class SmfMusicRating known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfMusicRating)
-
-
-#endif /* SMFMUSICRATING_H_ */
--- a/smf/inc/common/smfmusic/smfmusicrating_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfMusicRating class
- *
- */
-
-#ifndef SMFMUSICRATING_P_H_
-#define SMFMUSICRATING_P_H_
-
-#include <QSharedData>
-#include <smfmusicrating.h>
-
-class SmfMusicRatingPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfMusicRatingPrivate( ) ;
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfMusicRatingPrivate( const SmfMusicRatingPrivate &aOther );
-	/**
-	 * Destructor
-	 */
-	~SmfMusicRatingPrivate( );
-  
-	qint32 m_rating;	// rating
-	qint32 m_max;		// max rating
-	qint32 m_min;		// min rating
-	
-};
-
-#endif /* SMFMUSICRATING_P_H_ */
--- a/smf/inc/common/smfmusic/smfplaylist.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The playlist class represents an instance of a playlist
- *
- */
-
-#ifndef SMFPLAYLIST_H_
-#define SMFPLAYLIST_H_
-
-#include <smftrackinfo.h>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfPlaylistPrivate;
-
-/**
- * @ingroup smf_common_group
- * The playlist class represents an instance of a playlist
- */
-class SMFCLIENT_EXPORT SmfPlaylist
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfPlaylist();
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfPlaylist( const SmfPlaylist &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 */
-	SmfPlaylist& operator=( const SmfPlaylist &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPlaylist( );
-	
-	/**
-	 * Method to get the list of tracks in the playlist
-	 * @return The list of tracks in the playlist
-	 */
-	QList<SmfTrackInfo> trackList( ) const;
-	
-	/**
-	 * Method to get the playlist title
-	 * @return The title of the playlist
-	 */
-	QString playListTitle( ) const;
-	
-	/**
-	 * Method to get the creation date of the playlist
-	 * @return The date and time of creation of the playlist
-	 */
-	QDateTime creationDate( ) const;
-	
-	/**
-	 * Method to get the id of the playlist
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the list of tracks in the playlist
-	 * @param aList The new list of tracks in the playlist
-	 */
-	void setTrackList( const QList<SmfTrackInfo> &aList );
-	
-	/**
-	 * Method to set the playlist title
-	 * @param aTitle The new title of the playlist
-	 */
-	void setPlayListTitle( const QString &aTitle );
-	
-	/**
-	 * Method to set the creation date of the playlist
-	 * @param aDate The new date and time of creation of the playlist
-	 */
-	void setCreationDate( const QDateTime &aDate );
-	
-	/**
-	 * Method to set the id of the playlist
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId);
-	
-private:
-	QSharedDataPointer<SmfPlaylistPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfPlaylist &aPlaylist );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfPlaylist &aPlaylist );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfPlaylist object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aPlaylist The SmfPlaylist object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfPlaylist &aPlaylist );
-
-/**
- * Method for Internalization. Reads a SmfPlaylist object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aPlaylist The SmfPlaylist object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfPlaylist &aPlaylist);
-
-
-// Make the class SmfPlaylist known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfPlaylist)
-
-#endif /* SMFPLAYLIST_H_ */
--- a/smf/inc/common/smfmusic/smfplaylist_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfPlaylist class
- *
- */
-
-#ifndef SMFPLAYLIST_P_H_
-#define SMFPLAYLIST_P_H_
-
-#include <smftrackinfo.h>
-#include <QSharedData>
-
-class SmfPlaylistPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfPlaylistPrivate( );
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfPlaylistPrivate( const SmfPlaylistPrivate &aOther ) ;
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPlaylistPrivate( );
-  
-	QList<SmfTrackInfo> m_trackList;// list of tracks
-	QString m_title;				// playlist name
-	QDateTime m_creationDate;		// creation date
-	QString m_playlistId;
-	
-};
-
-#endif /* SMFPLAYLIST_P_H_ */
--- a/smf/inc/common/smfmusic/smfsubtitle.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The subtitle class represents information about a track's subtitle
- *
- */
-
-#ifndef SMFSUBTITLE_H_
-#define SMFSUBTITLE_H_
-
-#include <qdatastream.h>
-#include <QDateTime>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-enum SmfSubtitleSearchFilterFields
-	{
-	SubtitleLanguage = 0,
-	SubtitleFrameRate,		// value = 1
-	SubtitleDuration,		// value = 2
-	SubtitleReleaseYear,	// value = 3
-	SubtitleAll = SubtitleLanguage | SubtitleFrameRate | 
-			SubtitleDuration | SubtitleReleaseYear
-	};
-typedef QMap<SmfSubtitleSearchFilterFields,QString> SmfSubtitleSearchFilter;
-
-class SmfSubtitlePrivate;
-
-/**
- * @ingroup smf_common_group
- * The subtitle class represents information about a track's subtitle
- */
-class SMFCLIENT_EXPORT SmfSubtitle
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfSubtitle( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfSubtitle( const SmfSubtitle &aOther );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 */
-	SmfSubtitle& operator=( const SmfSubtitle &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfSubtitle( );
-	
-	/**
-	 * Method to get the subtitle as a bytearray
-	 * @return The subtitle content
-	 */
-	QByteArray subtitle( ) const;
-	
-	/**
-	 * Method to get the language
-	 * @return The language
-	 */
-	QString language( ) const;
-	
-	/**
-	 * Method to get the frame rate
-	 * @return the frame rate
-	 */
-	double frameRate( ) const;
-	
-	/**
-	 * Method to get the duration
-	 * @return the duration
-	 */
-	double duration( ) const;
-	
-	/**
-	 * Method to get the release year
-	 * @return The release year
-	 */
-	QDateTime releaseYear( ) const;
-	
-	/**
-	 * Method to get the id of the subtitle
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the subtitle as a bytearray
-	 * @param aSubtitle The subtitle content
-	 */
-	void setSubtitle( const QByteArray &aSubtitle );
-	
-	/**
-	 * Method to set the language
-	 * @param aLang The language
-	 */
-	void setLanguage( const QString &aLang );
-	
-	/**
-	 * Method to set the frame rate
-	 * @param aFramerate the frame rate
-	 */
-	void setFrameRate( const double &aFramerate );
-	
-	/**
-	 * Method to set the duration
-	 * @param aDuration the duration
-	 */
-	void setDuration( const double &aDuration );
-	
-	/**
-	 * Method to set the release year
-	 * @param aRelYear The release year
-	 */
-	void setReleaseYear( const QDateTime &aRelYear );
-	
-	/**
-	 * Method to set the id of the subtitle
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId );
-	
-private:
-	QSharedDataPointer<SmfSubtitlePrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfSubtitle &aSubtitle );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfSubtitle &aSubtitle );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfSubtitle object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aSubtitle The SmfSubtitle object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfSubtitle &aSubtitle );
-
-/**
- * Method for Internalization. Reads a SmfSubtitle object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aSubtitle The SmfSubtitle object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfSubtitle &aSubtitle);
-
-
-// Make the class SmfSubtitle known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfSubtitle)
-
-
-#endif /* SMFSUBTITLE_H_ */
--- a/smf/inc/common/smfmusic/smfsubtitle_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfSubtitle class
- *
- */
-
-#ifndef SMFSUBTITLE_P_H_
-#define SMFSUBTITLE_P_H_
-
-#include <QDateTime>
-#include <QSharedData>
-
-class SmfSubtitlePrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfSubtitlePrivate( ) ;
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfSubtitlePrivate( const SmfSubtitlePrivate &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfSubtitlePrivate( );
-  
-	QByteArray m_subtitle;	// subtitle data
-	QString m_language;		// language
-	double m_frameRate;		// frame rate
-	double m_duration;		// duration
-	QDateTime m_releaseYr;	// release year
-	QString m_subtitleId;	// subtitle id
-	
-};
-
-#endif /* SMFSUBTITLE_P_H_ */
--- a/smf/inc/common/smfmusic/smftrackinfo.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,221 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The track info class represents information about a music track
- *
- */
-
-#ifndef SMFTRACKINFO_H_
-#define SMFTRACKINFO_H_
-
-#include <QTime>
-#include <qdatastream.h>
-#include <smfmusicrating.h>
-#include <smfartists.h>
-#include <smfalbum.h>
-#include <smfcomment.h>
-#include <QStringList>
-#include <QSharedData>
-#include <smfclientglobal.h>
-
-class SmfTrackInfoPrivate;
-
-/**
- * @ingroup smf_common_group
- * The track info class represents information about a music track
- */
-class SMFCLIENT_EXPORT SmfTrackInfo
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfTrackInfo( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfTrackInfo( const SmfTrackInfo &aOther );
-
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 */
-	SmfTrackInfo& operator=( const SmfTrackInfo &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfTrackInfo( );
-	
-	/**
-	 * Method to get the track title
-	 * @return The title of the track
-	 */
-	QString title( ) const;
-	
-	/**
-	 * Method to get the track album
-	 * @return The album of the track
-	 */
-	SmfAlbum album( ) const;
-	
-	/**
-	 * Method to get the track's artists
-	 * @return The artists of the track
-	 */
-	SmfArtists artists( ) const;
-	
-	/**
-	 * Method to get the genre of the track
-	 * @return The genre of the track
-	 */
-	QString genre( ) const;
-	
-	/**
-	 * Method to get the track's tag
-	 * @return The tag of the track
-	 */
-	QStringList tags( ) const;
-	
-	/**
-	 * Method to get the release year of the track
-	 * @return The release year of the track
-	 */
-	QDateTime year( ) const;
-	
-	/**
-	 * Method to get the track's rating
-	 * @return The rating of the track
-	 */
-	SmfMusicRating rating( ) const;
-	
-	/**
-	 * Method to get the comments on the track
-	 * @return The comments on the track
-	 */
-	QList<SmfComment> comments( ) const;
-	
-	/**
-	 * Method to get the track's duration
-	 * @return The duration of the track
-	 */
-	QTime duration( ) const;
-	
-	/**
-	 * Method to get the id of the track
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the track title
-	 * @param aTitle The new title of the track
-	 */
-	void setTitle( const QString &aTitle );
-	
-	/**
-	 * Method to set the track album
-	 * @param aAlbum The new album of the track
-	 */
-	void setAlbum( const SmfAlbum &aAlbum );
-	
-	/**
-	 * Method to set the track's artists
-	 * @param aArtists The new artists of the track
-	 */
-	void setArtists( const SmfArtists &aArtists );
-	
-	/**
-	 * Method to set the genre of the track
-	 * @param aGenre The new genre of the track
-	 */
-	void setGenre( const QString &aGenre );
-	
-	/**
-	 * Method to set the track's tag
-	 * @param aTag The tag of the track
-	 */
-	void setTags( const QStringList &aTags );
-	
-	/**
-	 * Method to set the release year of the track
-	 * @param aYear The new release year of the track
-	 */
-	void setYear( const QDateTime &aYear );
-	
-	/**
-	 * Method to set the track's rating
-	 * @param aRating The new rating of the track
-	 */
-	void setRating( const SmfMusicRating &aRating );
-	
-	/**
-	 * Method to set the comments on the track
-	 * @param aComment The new comment of the track
-	 */
-	void setComment( const QList<SmfComment> &aComments );
-	
-	/**
-	 * Method to set the duration of the track
-	 * @param aDuration The new duration of the track
-	 */
-	void setDuration( const QTime &aDuration );
-
-	/**
-	 * Method to set the id of the track
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId );
-
-private:
-	QSharedDataPointer<SmfTrackInfoPrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfTrackInfo &aTrackInfo );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfTrackInfo &aTrackInfo );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfTrackInfo object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aTrackInfo The SmfTrackInfo object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfTrackInfo &aTrackInfo );
-
-/**
- * Method for Internalization. Reads a SmfTrackInfo object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aTrackInfo The SmfTrackInfo object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfTrackInfo &aTrackInfo);
-
-
-// Make the class SmfTrackInfo known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfTrackInfo)
-
-
-#endif /* SMFTRACKINFO_H_ */
--- a/smf/inc/common/smfmusic/smftrackinfo_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfTrackInfo class
- *
- */
-
-#ifndef SMFTRACKINFO_P_H_
-#define SMFTRACKINFO_P_H_
-
-#include <QTime>
-#include <smfmusicrating.h>
-#include <smfcomment.h>
-#include <QStringList>
-#include <QSharedData>
-
-class SmfTrackInfoPrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfTrackInfoPrivate( int aMaxRating = 0, int aMinRating = 0 );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfTrackInfoPrivate( const SmfTrackInfoPrivate &aOther ) ;
-	/**
-	 * Destructor
-	 */
-	~SmfTrackInfoPrivate( );
-  
-	QString m_trackId;		// track id
-	QString m_title;		// title
-	SmfAlbum m_album;		// album 
-	SmfArtists m_artists;	// artist name
-	QString m_genre;		// genre information
-	QStringList m_tags;		// tag information
-	QDateTime m_year;			// release year
-	SmfMusicRating m_rating;// rating
-	QList<SmfComment> m_comments;	// comments
-	QTime m_duration;		// duration
-	
-};
-
-#endif /* SMFTRACKINFO_P_H_ */
--- a/smf/inc/common/smfpictures/smfpicture.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The picture class represents an instance of a picture
- *
- */
-
-#ifndef SMFPICTURE_H_
-#define SMFPICTURE_H_
-
-#include <QImage>
-#include <QDateTime>
-#include <QStringList>
-#include <QUrl>
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-#include <QMetaType>
-#include <smfcomment.h>
-
-class SmfPicturePrivate;
-
-/**
- * SmfPictureVisibility enumeration
- */
-enum SmfPictureVisibility
-	{
-	SMFVisibilityFriend,
-	SMFVisibilityPersonal,
-	SMFVisibilityFamily,
-	SMFVisibilityGroup,
-	SMFVisibilityPublic
-	};
-
-/**
- * @ingroup smf_common_group
- * The picture class represents an instance of a picture
- */
-class SMFCLIENT_EXPORT SmfPicture
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfPicture( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfPicture( const SmfPicture &aOther );
-	
-	/**
-	 * CConstructs SmfPicture from QImage
-	 * @param aImage The QImage
-	 */
-	SmfPicture( const QImage &aImage );
-	
-	/**
-	 * Overloaded = operator
-	 * @param aOther The reference object
-	 * @return The current object reference
-	 */
-	SmfPicture& operator=(const SmfPicture &aOther);
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPicture( );
-	
-	/**
-	 * Method to get a picture owner
-	 * @return The owner of the picture
-	 */
-	QString owner( ) const;
-	
-	/**
-	 * Method to get a picture title
-	 * @return The title of the picture
-	 */
-	QString title( ) const;
-	
-	/**
-	 * Method to get a picture description
-	 * @return The description of the picture
-	 */
-	QString description( ) const;
-	
-	/**
-	 * Method to get a visibility of a picture for public
-	 * @return The visibility mode of this picture for others
-	 */
-	SmfPictureVisibility visibility( ) const;
-	
-	/**
-	 * Method to get the date of posting the picture
-	 * @return The posted date of the picture
-	 */
-	QDateTime postedDate( ) const;
-	
-	/**
-	 * Method to get the comments for the picture
-	 * @return The comments for the picture
-	 */
-	QList<SmfComment> comments( ) const;
-	
-	/**
-	 * Method to get the tags for the picture
-	 * @return The tags for the picture
-	 */
-	QStringList tags( ) const;
-	
-	/**
-	 * Method to get the url of the picture
-	 * @return The url of the picture
-	 */
-	QUrl url( ) const;
-	
-	/**
-	 * Method to get the picture data as QImage
-	 * @return The picture as QImage
-	 */
-	QImage picture( ) const;
-		
-	/**
-	 * Method to get the id of the picture
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-		
-	/**
-	 * Method to set a picture owner
-	 * @param aOwner The owner of the picture
-	 */
-	void setOwner( const QString &aOwner );
-	
-	/**
-	 * Method to set a picture title
-	 * @param aTitle The title of the picture
-	 */
-	void setTitle( const QString &aTitle );
-	
-	/**
-	 * Method to set a picture description
-	 * @param aDescription The description of the picture
-	 */
-	void setDescription( const QString &aDescription );
-	
-	/**
-	 * Method to set a visibility of a picture for public
-	 * @param aVisibility aVisibility The visibility mode of 
-	 * this picture for others
-	 */
-	void setVisibility( const SmfPictureVisibility &aVisibility );
-	
-	/**
-	 * Method to set the date of posting the picture
-	 * @param aDate The post date of the picture
-	 */
-	void setPostedDate( const QDateTime &aDate );
-	
-	/**
-	 * Method to add comment on the picture
-	 * @param aComment The comment for the picture
-	 */
-	void addComment( const SmfComment &aComment );
-	
-	/**
-	 * Method to add tags for the picture
-	 * @param aTag The tag for the picture
-	 */
-	void addTags( const QStringList &aTags );
-	
-	/**
-	 * Method to set the url of the picture
-	 * @param aUrl The url of the picture
-	 */
-	void setUrl( const QUrl &aUrl );
-	
-	/**
-	 * Method to set the picture data as QImage
-	 * @param aData The picture as QImage
-	 */
-	void setPicture( const QImage &aData );
-	
-	/**
-	 * Method to set the id of the picture
-	 * @param aId The ID value 
-	 */
-	void setId( const QString &aId );
-	
-private:
-	QSharedDataPointer<SmfPicturePrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfPicture &aPic );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfPicture &aPic );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfPicture object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aPic The SmfPicture object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfPicture &aPic );
-
-/**
- * Method for Internalization. Reads a SmfPicture object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aPic The SmfPicture object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfPicture &aPic);
-
-
-// Make the class SmfPicture known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfPicture)
-
-
-#endif /* SMFPICTURE_H_ */
--- a/smf/inc/common/smfpictures/smfpicture_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfPicture class
- *
- */
-
-#ifndef SMFPICTURE_P_H_
-#define SMFPICTURE_P_H_
-
-
-#include <QDateTime>
-#include <QStringList>
-#include <QUrl>
-#include <QSharedData>
-#include <smfclientglobal.h>
-#include <smfpicture.h>
-
-class SmfPicturePrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfPicturePrivate( );
-	/**
-	 * Constructor
-	 */
-	SmfPicturePrivate( const QImage &aImage );
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfPicturePrivate( const SmfPicturePrivate &aOther ) ;
-	/**
-	 * Destructor
-	 */
-	~SmfPicturePrivate( );
-  
-	QString m_photoId;		// unique ID of the picture, service provider specific
-	QString m_owner;	// owner of the picture
-	QString m_title;	// picture title
-	QString m_description;// description
-	SmfPictureVisibility m_picVisibility; // picture visibility
-	QDateTime m_postedOn;// date posted
-	QStringList m_comments;// comments
-	QStringList m_tags;	// tags
-	QUrl m_url;			// url
-	QImage m_picture;	// picture data as bytearray
-	QString m_caption;	// caption
-	
-};
-
-#endif /* SMFPICTURE_P_H_ */
--- a/smf/inc/common/smfplace/smfplace.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,216 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfPlace class represents a place and its related information
- * Note: This class has dependencies on QtMobility project
- *
- */
-
-#ifndef SMFPLACE_H_
-#define SMFPLACE_H_
-
-#include <QUrl>
-#include <qgeopositioninfo.h> // Qt mobility class
-#include <qdatastream.h>
-#include <QSharedData>
-#include <smfclientglobal.h>
-#include <QMetaType>
-
-// Qt mobility - namespace
-using namespace QtMobility;
-
-typedef enum 
-{
-	SearchByStreet = 0x00,
-	SearchByLocality,
-	SearchByPostOffice,
-	SearchByTown,
-	SearchByRegion,
-	SearchByState,
-	SearchByCountry
-}SmfLocationSearchBoundary;
-
-class SmfPlacePrivate;
-
-/**
- * @ingroup smf_common_group
- * The SmfPlace class represents a place and its related information.
- * 
- * Note: This class has dependencies on QtMobility project
- */
-class SMFCLIENT_EXPORT SmfPlace
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 */
-	SmfPlace( );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfPlace( const SmfPlace &aOther );
-	
-	/**
-	 * Overloaded = operator 
-	 * @param aOther The reference object
-	 * @return The current object reference
-	 */
-	SmfPlace& operator=( const SmfPlace &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPlace( );
-	
-	/**
-	 * Method to get the place name
-	 * @return The place name
-	 */
-	QString name( ) const;
-	
-	/**
-	 * Method to get the city of place
-	 * @return The city of the place
-	 */
-	QString city( ) const;
-	
-	/**
-	 * Method to get the street information of place
-	 * @return The street information of the place
-	 */
-	QString street( ) const;
-	
-	/**
-	 * Method to get the zip code of place
-	 * @return The zip code of place
-	 */
-	QString zipCode( ) const;
-	
-	/**
-	 * Method to get the country of place
-	 * @return The country of place
-	 */
-	QString country( ) const;
-	
-	/**
-	 * Method to get the Geo Position information (like information gathered 
-	 * on a global position, direction and velocity at a particular point 
-	 * in time) of the place.
-	 * @return The Geo Position information of place
-	 */
-	QGeoPositionInfo geoPositionInfo( ) const;
-	
-	/**
-	 * Method to get the url indicating the place
-	 * @return The url indicating the place
-	 */
-	QUrl url( ) const;
-	
-	/**
-	 * Method to get the id of the place
-	 * @return The ID value 
-	 */
-	QString id( ) const;
-	
-	/**
-	 * Method to set the place name
-	 * @param aPlace The new place name
-	 */
-	void setName( const QString& aPlace );
-	
-	/**
-	 * Method to set the city of  place
-	 * @param aCity The new city of the place
-	 */
-	void setCity( const QString& aCity );
-	
-	/**
-	 * Method to set the street information of place
-	 * @param aStreet The new street information of the place
-	 */
-	void setStreet( const QString& aStreet );
-	
-	/**
-	 * Method to set the zip code of place
-	 * @param aZipCode The new zip code of place
-	 */
-	void setZipCode( const QString& aZipCode );
-	
-	/**
-	 * Method to set the country of place
-	 * @param aCountry The new country of place
-	 */
-	void setCountry( const QString& aCountry );
-	
-	/**
-	 * Method to set the Geo Postion information (like information gathered 
-	 * on a global position, direction and velocity at a particular point 
-	 * in time) of the place.
-	 * @param aGeoPosInfo The new Geo Position information of place
-	 */
-	void setGeoPositionInfo( const QGeoPositionInfo &aGeoPosInfo );
-	
-	/**
-	 * Method to set the url indicating the place
-	 * @param aUrl The new url indicating the place
-	 */
-	void setUrl( const QUrl& aUrl );
-	
-	/**
-	 * Method to set the id of the place
-	 * @return The ID value 
-	 */
-	void setId( const QString &aId );
-	
-private:
-	QSharedDataPointer<SmfPlacePrivate> d;
-	
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfPlace &aPlace );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfPlace &aPlace );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfPlace object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aPlace The SmfPlace object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfPlace &aPlace );
-
-/**
- * Method for Internalization. Reads a SmfPlace object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aPlace The SmfPlace object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfPlace &aPlace);
-
-
-// Make the class SmfPlace known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfPlace)
-
-
-#endif /* SMFPLACE_H_ */
--- a/smf/inc/common/smfplace/smfplace_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfPlace class
- *
- */
-
-#ifndef SMFPLACE_P_H_
-#define SMFPLACE_P_H_
-
-#include <QUrl>
-#include <qgeopositioninfo.h> // Qt mobility class
-#include <QSharedData>
-
-using namespace QtMobility; // Qt mobility - namespace
-
-class SmfPlacePrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfPlacePrivate( );
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfPlacePrivate( const SmfPlacePrivate &aOther ) ;
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPlacePrivate( );
-  
-	QString m_name;						// place name
-	QString m_city;						// city of place
-	QString m_street;					// street of place
-	QString m_zipcode;					// zip code of place
-	QString m_country;					// country of place
-	QtMobility::QGeoPositionInfo m_geo;	// place geo position information
-	QUrl m_url;							// url indicating the place
-	QString m_placeId;					// place id
-	
-};
-
-#endif /* SMFPLACE_P_H_ */
--- a/smf/inc/smfclient/smfactivityfetcher.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Description:
- * Represents activity in terms similar to standard activity stream http://activitystrea.ms/
- */
-
-#ifndef SMFACTIVITYFETCHER_H_
-#define SMFACTIVITYFETCHER_H_
-
-#include <QObject>
-#include <QList>
-#include <qmobilityglobal.h>
-
-#include "smfglobal.h"
-#include "smfprovider.h"
-#include "smfcontact.h"
-#include "smfevent.h"
-#include "smfactions.h"
-
-typedef QList<SmfActivityEntry> SmfActivityEntryList;
-
-/**
- * @ingroup smf_client_group
- * Basic activity service ("org.symbian.smf.client.activity.fetcher")
- */
-class SMFCLIENT_EXPORT SmfActivityFetcher : public QObject
-	{
-	Q_OBJECT
-
-public:
-
-	/**
-	 * Constructs SmfActivity.
-	 * @param baseProvider The base provider info
-	 */
-	SmfActivityFetcher(SmfProvider* baseprovider = 0);
-
-	~SmfActivityFetcher();
-
-public slots:
-	/**
-	 * Emits signal resultsAvailable() when list of activities for the user is available 
-	 */
-	void selfActivities(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
-
-	/**
-	 * Emits signal resultsAvailable() when list of activities for other contact  is available 
-	 */
-	void friendsActivities(const SmfContact& aFriend,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
-	
-	/**
-	 * returns only those activities (self) which are from @arg filters
-	 */
-	void filtered(QList<SmfActivityObjectType> filters,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
-
-	  /**
-	   * Gets the base provider info
-	   */
-	  SmfProvider* getProvider()  ;
-	
-signals:
-
-	/**
-	 * Signals availability of the result of the previous query
-	 */
-	void resultsAvailable(SmfActivityEntryList* entries, QString error, SmfResultPage resultPage);
-
-	};
-
-SMF_SERVICE_NAME(SmfGallery, "org.symbian.smf.client.activity.fetcher\0.2")
-
-#endif /* SMFACTIVITYFETCHER_H_ */
--- a/smf/inc/smfclient/smfclient.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfEvent class represents an event
- *
- */
-
-#ifndef SMFCLIENT_H
-#define SMFCLIENT_H
-
-#include <QObject>
-#include <QImage>
-#include <QUrl>
-
-#include "../common/SmfClientGlobal.h"
-
-class SmfProvider;
-
-/**
- * @ingroup smf_client_group 
- * Interface for a base service provider. Other service provider classes contains 
- * implementation of this base class so that each has access to service provider 
- * information.
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SMFCLIENT_EXPORT SmfClient
-{
-  /*Q_OBJECT*/
-
-public:
-
-  /**
-   * @param name of the service 
-   * @return service provider list
-   */
-  QList<SmfProvider>* GetServices(const QString& serviceName); 
-  QList<SmfProvider>* GetServices(const QString& serviceName, const QString& providerName);
-  QList<SmfProvider>* GetServices(const QString& serviceName, const SmfProvider& provider);  
-};
-
-
-#endif // SMFCLIENT_H
--- a/smf/inc/smfclient/smfcontactfetcher.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfEvent class represents an event
- *
- */
-
-#ifndef SMFCONTACTHETCHER_H
-#define SMFCONTACTHETCHER_H
-
-#include <QObject>
-#include "smfglobal.h"
-#include "smfprovider.h"
-#include "smfcontact.h"
-#include "smfplace.h"
-class SmfProvider; //base-class for service provider
-class SmfContact; //class for Contact in a social network
-class SmfGroup; //class for a group in social network
-typedef QList<SmfContact>  SmfContactList;
-
-//List of SmfGroup
-typedef QList<SmfGroup> SmfGroupList;
-/**
- * @ingroup smf_client_group 
- * Interface to search for contacts/connections from a service provider. This class
- * provides basic functionality to allow applications to obtain list of
- * contacts or friends in a social networking service.
- * Note that to get the base provider info like service name, icon, description etc
- * use getProvider().
- * See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- * Interface name:- org.symbian.smf.client.contact.fetcher
- */
-class SMFCLIENT_EXPORT SmfContactFetcher : public QObject
-{
-  Q_OBJECT
-
-public:
-
-  /**
-   * Constructs the SmfContactFetcher.
-   * @param parent base provider info
-   * @param contact Used for searching friends of the given contact
-   * Seeing as this is a plug-in implementation, these will realistically
-   * be generated by SMF factory of some kind
-   */
-  SmfContactFetcher(SmfProvider* baseProvider);
-  SmfContactFetcher(SmfProvider* baseProvider, SmfContact* contact);
-  ~SmfContactFetcher();
-
-public:
-  /**
-   * Get the friend listing asynchronously. The friendsListAvailable() signal
-   * is emitted with SmfContactList once data is arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  bool friends(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
-
-  /**
-   * Get the list of followers asynchronously. The followersListAvailable() signal
-   * is emitted with SmfContactList once data is arrived. Please note that some
-   * service may not support followers/fans - FALSE is returned if not supported.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  bool followers(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE); // list of contact objects
-
-  /**
-   * Searches for a contact The searchContactFinished() signal
-   * is emitted with SmfContactList once data is arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void search(SmfContact* contact,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of contact objects
-
-  /**
-   * Searches for a contacts (friends) who are near the user.
-   * Signal searchNearFinished() is emitted with SmfContactList once data is arrived.
-   * Proximity defines accuracy level
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-   bool searchNear(SmfPlace* location,SmfLocationSearchBoundary proximity,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ;
-
-
-  /**
-   * Get the list of groups. The groupListAvailable() signal
-   * is emitted with SmfGroupList once data is arrived. False might be returned
-   * if this service doesn't support any mode of grouping (very rare).
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-   bool groups(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of group objects
-
-  /**
-   * Searches for Smf Contacts in an Smf group.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   * @param  group The group to be searcged in
-   */
-   bool searchInGroup(SmfGroup group,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of contact objects
-
-
-  //APIs to get/set base provider info (SmfProvider)
-
-  /**
-   * Gets the base provider info
-   */
-   SmfProvider* getProvider() ;
-
-public slots:
-
-signals:
-
-	/**
-	 * This signal is emitted when a request to get friends is completed.
-	 * Note if number of friends is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 *  @param list list of friends
-	 *  @param error error string
-	 *  @param resultPage Page number info
-	 *  @see friends()
-	 */
-	void friendsListAvailable(SmfContactList* list, QString error, SmfResultPage resultPage);
-
-	/**
-	 * This signal is emitted when a request to get followers is completed
-	 *  Note if number of followers is large, then it can download the list page by page
-	 *  In that case this signal is emitted multiple times.
-	 *  @param list list of followers
-	 *  @param error error string
-	 *  @param resultPage Page number info
-	 *  @see followers()
-	 */
-	void followersListAvailable(SmfContactList* list, QString error, SmfResultPage resultPage);
-
-	/**
-	 * This signal is emitted when a request to get groups is completed
-	 * Note if number of groups is large, then it can download the list page by page
-	 *  In that case this signal is emitted multiple times.
-	 *  @param list list of groups
-	 *  @param error error string
-	 *  @param resultPage Page number info
-	 *  @see groups()
-	 */
-	void groupListAvailable(SmfGroupList* list, QString error, SmfResultPage resultPage);
-
-	/**
-	 * Emitted when search for a contact is finished.
-	 * Note if number of contacts in the search is large, then it can download the list page by page
-	 * In that case this signal is emitted multiple times.
-	 * @param list List of filtered contacts
-	 * @param resultPage Page number info
-	 * @see search()
-	 */
-	void searchContactFinished(SmfContactList* list,QString error, SmfResultPage resultPage);
-
-
-	/**
-	 * Emitted when search for contacts who are near a geographic location, is finished.
-	 * Note if number of contacts in the search is large, then it can download the list page by page
-	 * In that case this signal is emitted multiple times.
-	 * @param list List of filtered contacts
-	 * @param resultPage Page number info
-	 * @see search()
-	 */
-	void searchNearFinished(SmfContactList* list,QString error, SmfResultPage resultPage);
-
-	/**
-	 * Emitted when search for a contact in a group is finished
-	 * Note if number of contacts in the search is large, then it can download the list page by page
-	 * In that case this signal is emitted multiple times.
-	 * @param list list of filtered contacts
-	 * @param resultPage Page number info
-	 * @see searchInGroup()
-	 */
-	void searchInGroupFinished(SmfContactList* list,QString error, SmfResultPage resultPage);
-
-private:
-  SmfProvider* m_baseProvider;
-};
-
-SMF_SERVICE_NAME(SmfContactFetcher, "org.symbian.smf.client.contact.fetcher\0.2")
-#endif // SMFCONTACTHETCHER_H
--- a/smf/inc/smfclient/smfgallery.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- *
- * Description:
- * The SmfEvent class represents an event
- *
- */
-
-#ifndef SMFGALLERY_H
-#define SMFGALLERY_H
-
-#include "smfglobal.h"
-#include "smfprovider.h"
-#include "../common/SmfClientGlobal.h"
-class SmfProvider;
-class SmfComment; //user id, string, and url
-class SmfPicture;
-
-
-#include <QObject>
-#include <QDateTime>
-#include <QStringList>
-//List of SmfPicture
-typedef QList<SmfPicture> SmfPictureList;
-/**
- * @ingroup smf_client_group 
- * Interface to a remote gallery service. This class
- * provides some basic gallery functionality to allow applications
- * to interact with a picture gallery in a social network.
- *
- * Note that branding information for the particular service implementation
- * is available from getProvider() API. See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon()
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- * Interface name for SmfGallery org.symbian.smf.client.gallery
- */
-class SMFCLIENT_EXPORT SmfGallery : public QObject
-{
-  Q_OBJECT
-
-public:
-  /**
-   * Constructs SmfGallery.
-   * @param baseProvider The base provider info
-   * Seeing as this is a plug-in implementation, these will realistically
-   be generated by SMF factory of some kind
-   */
-
-  SmfGallery(SmfProvider* baseprovider = 0);
-  ~SmfGallery();
-
-public:
-  /**
-   * Get the picture listing asynchronously.
-   * The picturesAvailable() signal is emitted with SmfPictureList once the pictures have arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void pictures(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
-
-  /**
-   * Returns a user title/caption for the picture
-   */
-  QString description(SmfPicture& picture); // A user title or caption, maybe?
-
-  //APIs to get/set base provider info (SmfProvider)
-
-  /**
-   * Gets the base provider info
-   */
-   SmfProvider* getProvider() ;
-
-public slots:
-	/**
-	 * Upload an image.Implemented as slot to connect to UI controls more easily
-	 * uploadFinished() signal is emitted with the success value of the upload
-	 * @param image the image to be uploaded
-	 */
-   void upload(SmfPicture* image) ;
-
-	/**
-	 * Upload an list image.Implemented as slot to connect to UI controls more easily
-	 * uploadFinished() signal is emitted with the success value of the upload
-	 * @param images the list image to be uploaded
-	 */
-   void upload(SmfPictureList* images) ;
-
-  /**
-   * Posts a comment for an image. uploadFinished() signal is emitted
-   * with success of the post once comment is posted.
-   * @param image Image to comment on
-   * @param comment Comment to post
-   */
-   void postComment(SmfPicture image, SmfComment comment) ;
-
-signals:
-	/*
-	 * Notification on arrival of list of SmfPicture as a result of request.
-	 * Note if number of friends is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 * through pictures().
-	 * @param pics Picture list
-	 * @param error Error string
-	 * @param resultPage Page number info
-	 */
-	void picturesAvailable(SmfPictureList* pics, QString error, SmfResultPage resultPage);
-
-  /**
-   * Notification of the success of the uploading of image/comment
-   * @param error The upload success result of each individual pictures
-   */
-  void uploadFinished(QList<bool> error);
-private:
-  SmfProvider* m_baseProvider;
-};
-
-SMF_SERVICE_NAME(SmfGallery, "org.symbian.smf.client.gallery\0.2")
-
-#endif // SMFGALLERY_H
-
--- a/smf/inc/smfclient/smfmusic.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,526 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- *
- * Description:
- * The SmfEvent class represents an event
- *
- */
-
-#ifndef SMFMUSIC_H
-#define SMMUSIC_H
-
-#include <QObject>
-
-#include <qmobilityglobal.h>
-#include <qgeopositioninfo.h>
-
-#include "smfglobal.h"
-#include "smfprovider.h"
-#include "smfcontact.h"
-#include "smfevent.h"
-
-class SmfProvider; //basic Smf service Provider info
-class SmfContact; // Smf contact
-class SmfMusicRating;//rating value from 0..31 - services would map accordingly
-class SmfMusicProfile; //user profile containing music usage and interest info, extends SmfContact
-class SmfTrackInfo; //id, title, album, artist, genre, tag, director,release year, rating, comment info
-class SmfMusicFingerPrint; //generation is not in scope of smf
-class SmfVenue;
-class SmfEvent;
-class SmfPlaylist;
-class SmfLyricsService;
-class SmfLyrics;
-class SmfSubtitle;
-class SmfSubtitleSearchFilter;
-
-typedef QList<SmfMusicProfile> SmfMusicProfileList;
-typedef QList<SmfTrackInfo> SmfTrackInfoList;
-typedef QList<SmfEvent> SmfEventsList;
-typedef QList<SmfProvider> SmfProviderList;
-typedef QList<SmfPlaylist> SmfPlaylistList;
-typedef QList<SmfVenue> SmfVenueList;
-typedef QList<SmfLyrics> SmfLyricsList;
-typedef QList<SmfSubtitle> SmfSubtitleList;
-/**
- * @ingroup smf_client_group
-  * Basic music service ("org.symbian.smf.client.music.service")
-  */
-class SMFCLIENT_EXPORT SmfMusicService : public QObject
-{
-  Q_OBJECT
-
-public:
-  /**
-   * Constructs SmfMusicService.
-   * @param baseProvider The base provider info
-   * Seeing as this is a plug-in implementation, these will realistically
-   *  be generated by SMF factory of some kind
-   */
-   SmfMusicService(SmfProvider* baseProvider = 0);
-  ~SmfMusicService();
-
-public:
-
-  /**
-   * Gets self profile information asynchronously.
-   * userInfoAvailable() signal is emitted with SmfMusicProfile when the info is arrived
-   */
-  void userinfo() ;
-
-  /**
-   * Asynchronously searches information about other service users for a particular venue
-   * searchInfoAvailable() signal is emitted with SmfMusicProfileList when the info is arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void searchUser(SmfVenue venue,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ;
-
-  /**
-   * Gets the base provider info
-   */
-  SmfProvider* getProvider() ;
-
-
-signals:
-	/**
-	 * Notification on arrival of the self profile as result of userinfo().
-	 * @param profile The self profile
-	 */
-	void userInfoAvailable(SmfMusicProfile* profile, QString error);
-
-	void searchInfoAvailable(SmfMusicProfileList& profileList, QString error,SmfResultPage resultPage);
-private:
-  SmfProvider* m_baseProvider;
-};
-SMF_SERVICE_NAME(SmfMusicService, "org.symbian.smf.client.music.service\0.2")
-
-
-/**
-* Provides service ("org.symbian.smf.client.music.search") for music search
-*/
-class SMFCLIENT_EXPORT SmfMusicSearch : public QObject
-{
-  Q_OBJECT
-
-public:
-  /**
-   * Constructs SmfMusicSearch with base provider as arguement.
-   * Seeing as this is a plug-in implementation, these will realistically
-   * be generated by SMF factory of some kind
-   */
-
-  SmfMusicSearch(SmfProvider* baseProvider = 0);
-  ~SmfMusicSearch();
-
-public:
-  // Get the track listing - might be made asynchrnous later
-
-  /**
-   * Searches for music recommendations similar to a particulartrack asynchronously.
-   * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
-   * once its arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param track The track for which similar recommendations need to be fetched.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void recommendations(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of track objects
-
-  /**
-   * Searches for tracks similar to a given track asynchronously.
-   * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
-   * once its arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param track The search criteria, similar tracks are searched
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void tracks(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of track objects
-
-  /**
-   * Searches for a track having similar finger print asynchronously.
-   * The signal trackSearchAvailable() is emitted with SmfTrackInfoList
-   * once its arrived.
-   * @param signature The search criteria,signature to be searched for
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void trackInfo(SmfMusicFingerPrint signature,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // search by fingerprint object
-
-  /**
-   * Search information about where to buy this song from asynchronously.
-   * The signal storeSearchAvailable() is emitted with SmfProviderList once its arrived.
-   * @param track The search criteria for stores
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void stores(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
-
-  //APIs to get/set base provider info (SmfProvider)
-
-  /**
-   * Gets the base provider info
-   */
-  SmfProvider* getProvider()  ;
-
-
-public slots:
-
-	/**
-	 * Posts currently playing track.
-	 * Success can be checked by checking the signal postFinished()
-	 * @param track Track to post
-	 */
-  void postCurrentPlaying(SmfTrackInfo track)  ;
-  //int postRating(SmfTrackInfo track, SmfMusicRating rate)  ;
-  //int postComments(SmfTrackInfo track, SmfComment comment)  ;
-
-signals:
-	/**
-	 * Emitted when the search result for a track is available.
-	 * Note if number of tacks in the search is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 * @param resultPage Page number info
-	 */
-	void trackSearchAvailable(SmfTrackInfoList* result, QString error,SmfResultPage resultPage);
-
-	/**
-	 *  Emitted when the search result for a store is available.
-	 *  Note if number of tacks in the search is large, then it can download the list page by page.
-	 *  In that case this signal is emitted multiple times.
-	 *  @param resultPage Page number info
-	 */
-	void storeSearchAvailable(SmfProviderList* result, QString error, SmfResultPage resultPage);
-private:
-  SmfProvider* m_baseProvider;
-};
-SMF_SERVICE_NAME(SmfMusicSearch, "org.symbian.smf.client.music.search\0.2")
-
-
-/**
- * Remote playlist
- */
-class SMFCLIENT_EXPORT SmfPlaylist : public QObject
-	{
-	Q_OBJECT
-
-public:
-	SmfPlaylist();
-	~SmfPlaylist();
-
-	/**
-	 * Gets tracks in the playlist
-	 */
-	SmfTrackInfoList* getTrackList();
-
-	/**
-	 * Gets playlist title
-	 */
-	QString getPlayListTitle();
-
-	/**
-	 * Gets the creation date
-	 */
-	QDateTime getCreationDate();
-
-	/**
-	 * Sets tracks in the playlist
-	 */
-	void setTrackList(SmfTrackInfoList* trackList);
-
-	/**
-	 * Sets playlist title
-	 */
-	void setPlayListTitle(QString title);
-
-	/**
-	 * Sets creation date
-	 */
-	void setCreationDate(QDateTime time);
-
-private:
-	SmfTrackInfoList* m_trackList;
-	QString m_title;
-	QDateTime m_creationDate;
-	};
-
-
-/**
- * provides service ("org.symbian.smf.client.music.playlist")
- *
- * Interface to a remote playlist service. This class
- * provides some basic functionality to allow applications
- * to interact with playlists in some music related service provider (e.g. last.fm).
- *
- * Note that branding information for the particular service implementation
- * is available from getProvider() API. See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon()
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- *
- */
-class SMFCLIENT_EXPORT SmfPlaylistService : public QObject
-{
-  Q_OBJECT
-
-public:
-  /**
-   * Constructs SmfPlaylistService with base provider info
-   * Seeing as this is a plug-in implementation, these will realistically
-   * be generated by SMF factory of some kind
-   */
-  SmfPlaylistService(SmfProvider* baseProvider = 0);
-  ~SmfPlaylistService();
-
-public:
-
-  /**
-   * Gets the list playlists for the logged-in user asynchronously.
-   * The signal playlistsListAvailable() signal is emitted with
-   * SmfPlaylistList once its arrived .
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void playlists(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of playlist objects
-
-  /**
-   * Gets the list playlists for the given user asynchronously.
-   * The signal playlistsListAvailable() signal is emitted with
-   * SmfPlaylistList once its arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param user User for which to get the playlists
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void playlistsOf(SmfMusicProfile* user,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
-
-  //APIs to get/set base provider info (SmfProvider)
-
-  /**
-   * Gets the base provider info
-   */
-  SmfProvider* getProvider()  ;
-
-
-public slots:
-
-	/**
-	 * Upload currently playing track to a playlist. Signal
-	 * playlistUpdated() can be checked for success value
-	 * @param plst The playlist to be added in
-	 * @param tracks The list of tracks to uploaded
-	 */
-  int addToPlaylist(SmfPlaylist plst, SmfTrackInfoList* tracks)  ;
-
-	/**
-	 * Upload currently playing playlist . Signal
-	 * playlistUpdated() can be checked for success value
-	 * @param plst The playlist to be uploaded
-	 */
-  int postCurrentPlayingPlaylist(SmfPlaylist plst)  ;
-
-
-signals:
-	/**
-	 * Notification of availability of list of playlists requested.
-	 * Note if number of list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 * @param resultPage Page number info
-	 */
-	void playlistsListAvailable(SmfPlaylistList*, QString error, SmfResultPage resultPage);
-	/**
-	 * Signals remote updation of playlist with success value
-	 */
-    int playlistUpdated(bool success) ;
-private:
-  SmfProvider* m_baseProvider;
-};
-SMF_SERVICE_NAME(SmfPlaylistService, "org.symbian.smf.client.music.playlist\0.2")
-
-
-/**
-* provides service ("org.symbian.smf.client.music.events")
-*/
-class SMFCLIENT_EXPORT SmfMusicEvents : public QObject
-{
-  Q_OBJECT
-
-public:
-  /**
-   * Constructs SmfMusicEvents with base provider info
-   * Seeing as this is a plug-in implementation, these will realistically
-   *  be generated by SMF factory of some kind
-   */
-  SmfMusicEvents(SmfProvider* baseProvider = 0);
-  ~SmfMusicEvents();
-
-public:
-
-  /**
-   * Gets list of events in a particular location asynchronously.
-   * eventsAvailable() signal is emitted with SmfEventsList once its arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void events(QtMobility::QContactGeolocation location,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
-
-  /**
-   * Gets list of venues of a particular location asynchronously.
-   * venuesAvailable() signal is emitted with SmfVenueList once its arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void venues(QtMobility::QContactGeolocation location,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of venue objects
-
-  /**
-   * Gets list of events in a particular venue asynchronously.
-   * eventsAvailable() signal is emitted with SmfEventsList once its arrived.
-   * When the list is big user can specify the page number and per page item data.
-   * If not supplied by the user default values are used.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void events(SmfVenue venue,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // basic list of events objects
-
-
-  //APIs to get/set base provider info (SmfProvider)
-
-  /**
-   * Gets the base provider info
-   */
-  SmfProvider* getProvider()  ;
-
-
-public slots:
-
-	/**
-	 * Updates events. Might not be supported by all service provider.
-	 * eventsUpdated() signal can be checked for success value.
-	 * @param SmfEventsList List of events to be posted
-	 */
-	 void postEvents(SmfEventsList events);
-
-signals:
-
-	/**
-	 * Notification of the success of request to post an event
-	 */
-	void eventsUpdated(bool success);
-
-	/**
-	 * Notification on arrival of event lists
-	 * Note if number of list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 * @param resultPage Page number info
-	 */
-	void eventsAvailable(SmfEventsList* list, QString error, SmfResultPage resultPage);
-
-	/**
-	 *  Notification on arrival of venues lists
-	 * Note if number of list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 * @param resultPage Page number info
-	 */
-	void venuesAvailable(SmfVenueList* list, QString error, SmfResultPage resultPage);
-private:
-  SmfProvider* m_baseProvider;
-};
-SMF_SERVICE_NAME(SmfMusicEvents, "org.symbian.smf.client.music.events\0.2")
-
-
-/**
-* provides service ("org.symbian.smf.client.music.lyrics")
-*/
-class SMFCLIENT_EXPORT SmfLyricsService : public QObject
-{
-  Q_OBJECT
-
-public:
-  /**
-   * Constructs SmfLyricsService with base provider info.
-   * Seeing as this is a plug-in implementation, these will realistically
-   * be generated by SMF factory of some kind
-   */
-
-  SmfLyricsService(SmfProvider* baseProvider = 0);
-  ~SmfLyricsService();
-
-public:
-
-  /**
-   * Get the lyrics lists asynchrnously, it fetches texts without time info.
-   * lyricsAvailable() notification comes SmfLyricsList with when the data is available
-   * @param track Track for which lyrics needs to be fetched.
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void lyrics(SmfTrackInfo track,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ;
-
-  /**
-   * Get the lyrics lists asynchrnously, it fetches texts with time info.
-   * Subtitle search filter can be applied
-   * subtitleAvailable() notification comes SmfSubtitleList with when the data is available
-   * @param track Track for which subtitle needs to be fetched.
-   * @param filter Subtitle search filter
-   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
-   */
-  void subtitles(SmfTrackInfo track, SmfSubtitleSearchFilter filter,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE)  ; // texts with time information
-  //APIs to get/set base provider info (SmfProvider)
-
-  /**
-   * Gets the base provider info
-   */
-  SmfProvider* getProvider()  ;
-
-
-public slots:
-
-
-signals:
-
-	/**
-	 * Notification on arrival of lyrics
-	 * Note if the list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 * @param resultPage Page number info
-	 */
-	void lyricsAvailable(SmfLyricsList* list, QString error, SmfResultPage resultPage);
-
-	/**
-	 * Notification on arrival of subtitle based on filter.
-	 * Note if the list is large, then it can download the list page by page.
-	 * In that case this signal is emitted multiple times.
-	 * @param resultPage Page number info
-	 */
-	void subtitleAvailable(SmfSubtitleList* list, QString error, SmfResultPage resultPage);
-private:
-  SmfProvider* m_baseProvider;
-};
-SMF_SERVICE_NAME(SmfLyricsService, "org.symbian.smf.client.music.lyrics\0.2")
-
-#endif // SMFMUSIC_H
-
--- a/smf/inc/smfclient/smfpostprovider.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfEvent class represents an event
- *
- */
-#ifndef SMFPOSTPROVIDER_H
-#define SMFPOSTPROVIDER_H
-
-#include <QObject>
-#include <qmobilityglobal.h>
-#include <qgeopositioninfo.h>
-#include <QTextDocument>
-
-#include "smfglobal.h"
-#include "smfprovider.h"
-#include "smfcontact.h"
-#include "smfplace.h"
-
-class SmfProvider; //base-class for service provider
-class SmfContact; //class for Contact in a social network
-
-
-
-/**
- * class for information (text, image and url) contained in post in social network
- * This could be changed to contain html data
- * 
- * For those service provider which supports only string format, @see supportedFormats()
- */
-class  SmfPost : public QTextDocument
-	{
-	Q_OBJECT
-	
-public:
-	SmfPost ( QObject * parent = 0 );
-	SmfPost ( const QString & text, QObject * parent = 0 );
-	
-private:
-	QString*	id;
-	SmfProvider* provider;
-	};
-
-/**
- *  Presence info of the user
- */
-enum SmfAppearenceInfo
-	{
-	ENotSupported,
-	EOnline,
-	EOffline,
-	EBusy,
-	EDoNotDisturb,
-	EAppearOffline,
-	EOther
-	};
-
-//Post lists
-typedef QList<SmfPost> SmfPostList;
-
-/**
- * @ingroup smf_client_group 
- * Interface to post scrap/tweet like info.
- * Note that branding information for the particular service implementation
- * is available from getProvider() API. See also:
- * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
- *
- * Interface name for SmfPostProvider is org.symbian.smf.client.contact.posts
- */
-class SMFCLIENT_EXPORT SmfPostProvider : public QObject
-	{
-	Q_OBJECT
-
-public:
-	/**
-	 * Constructs SmfPostProvider.
-	 * @param baseProvider The base provider info
-	 * Seeing as this is a plug-in implementation, these will realistically
-	 * be generated by SMF factory of some kind
-	 */
-	SmfPostProvider(SmfProvider* baseProvider);
-	~SmfPostProvider();
-
-
-public:
-	/**
-	 * returns maximum no of chars (unicode) that service provider can post without truncation
-	 * negative value means no limit
-	 */
-	qint32 maxCharsInPost() const;
-	/**
-	 * returns maximum no of items that can be returned in a single query to getPosts
-	 * negative value means feature not supported.
-	 */
-	qint32 maxItems() const;
-
-	/**
-	 * returns all the formatting of posts that this service provider supports.
-	 * May return 0 items to mean only QString is supported.
-	 */
-	QVector<QTextFormat> supportedFormats () const;
-	
-	/**
-	 * returns whether this SP supports Appearence @see SmfAppearenceInfo
-	 */
-	bool supportsAppearence () const;
-
-public slots:
-	/**
-	 * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
-	 * once the post lists are available
-	 * @param user user's contact in this SP, omit for self contact
-	 * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
-     * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE 
-	 * @see postsAvailable()
-	 */
-	void posts(SmfContact* user = 0,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
-	
-	/**
-	 * Updates a post to own area, the success of the post can be checked with signal
-	 * updatePostFinished() signal
-	 * @param postData data to be posted
-	 * @param location location data
-	 */
-	void post(SmfPost& postData,SmfPlace& location) ; 
-	/**
-	 * Updates the last post to own area with new data, the success of the post can be checked with signal
-	 * updatePostFinished() signal
-	 * @param postData edited/new data to be posted
-	 * @param location location data
-	 */
-	void updatePost(SmfPost& postData); 
-	
-	/**
-	 * Updates a post to a particular Smf contact. the success of the post can be checked with signal
-	 * updatePostFinished() signal.
-	 * @param postData data to be posted
-	 * @param contact contact to which the post is to be directed
-	 * @param location location data
-	 */
-	void postDirected(SmfPost& postData,SmfContact& contact,SmfPlace* location=0);
-	
-	/**
-	 * Posts appearance info of the user.e.g. appear offline, busy, do-not-disturb
-	 * @param appearence user appearance
-	 * @see SmfPresenceInfo
-	 * @return False on Failure/Not supported 
-	 */
-	bool postAppearence(SmfAppearenceInfo appearence); 
-	/**
-	 * Share /a contact's post to user's friends and followers (e.g. retweet in twitter, share on facebook)
-	 * emits updatePostFinished() signal when done.
-	 * @param postData data to be posted
-	 * @param contact contact to which the post belonged
-	 * @param bool whether user changed items within the post
-	 */
-	void sharePost(SmfPost& postData,SmfContact& contact,bool edited);
-	
-	//APIs to get/set base provider info (SmfProvider)
-	
-	/**
-	 * Gets the base provider info
-	 */
-	SmfProvider* getProvider() const;
-	
-signals:
-	
-	/**
-	 * Emitted when a request to  getPosts() is finished
-	 * Note if number of posts is large, then it can download the list page by page
-	 * In that case this signal is emitted multiple times.
-	 * @param list list of posts
-	 * @param error error string
-	 * @param resultPage Page number info
-	 */
-	void postsAvailable(SmfPostList* list, QString error, SmfResultPage resultPage);
-	
-	/**
-	 * Emitted when update post is finished.
-	 * @param success the success of the update
-	 */
-	void postFinished(bool success);
-	
-	private:
-	SmfProvider* m_baseProvider;
-	};
-
-SMF_SERVICE_NAME(SmfPostProvider, "org.symbian.smf.client.contact.posts\0.2")
-#endif // SMFPOSTPROVIDER_H
--- a/smf/inc/smfclient/smfprovider.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfEvent class represents an event
- *
- */
-
-#ifndef SMFPROVIDER_H
-#define SMFPROVIDER_H
-
-#include <QObject>
-#include <QImage>
-#include <QUrl>
-
-#include "../common/SmfClientGlobal.h"
-/**
- * @ingroup smf_client_group 
- * Interface for a base service provider. Other service provider classes contains 
- * implementation of this base class so that each has access to service provider 
- * information.
- * All of the functionality described here should be implemented by a service
- * specific plug-in object.
- */
-class SMFCLIENT_EXPORT SmfProvider : public QObject
-{
-  Q_OBJECT
-
-public:
-  /**
-   *  Seeing as this is a plug-in implementation, these will realistically be generated by SMF factory of some kind
-   */
-   
-  SmfProvider(QObject* parent = 0);
-  ~SmfProvider();
-
-public:
-  /**
-   * Localizable name of the service 
-   * @return service name
-   */
-  QString& serviceName() const; 
-  
-  /**
-   * Logo of the service
-   * @return logo image of the service
-   */
-  QImage& serviceIcon() const; 
-  
-  /**
-   * Readable service description
-   * @return service description
-   */
-  QString description() const; 
-  
-  /*
-   * Website of the service
-   */
-  QUrl serviceUrl() const;
-  
-  /**
-   * URL of the application providing this service
-   */
-  QUrl applicationUrl() const; //
-  
-  /**
-   * service types - list of interfaces that this provider support
-   */
-  QList<QString> serviceTypes() const;
-};
-/**
-* Externalization
-*/
-QDataStream &operator<<(QDataStream &, const SmfProvider&);
-/**
- * Internalization
- */
-QDataStream &operator>>(QDataStream &, SmfProvider&);
-
-#endif // SMFPROVIDER_H
--- a/smf/inc/smfplugins/base/smfpluginbase.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The SmfPluginBase class is the base class for all plugins.
- *
- */
-
-#ifndef SMFPLUGINBASE_H_
-#define SMFPLUGINBASE_H_
-
-#include <smfproviderbase.h>
-#include <QNetworkReply>
-#include <smfglobal.h>
-
-/**
- * @ingroup smf_plugin_group
- * The SmfPluginBase class is the base class for all plugins 
- */
-class SmfPluginBase : public QObject
-	{
-	Q_OBJECT
-
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object
-	 */
-	SmfPluginBase( QObject* aParent = 0 );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPluginBase( );
-
-	/**
-	 * Method to get the provider information
-	 * @return Instance of SmfProviderBase
-	 */
-	virtual SmfProviderBase* getProviderInfo( ) = 0;
-	
-	/**
-	 * Method to get the result for a network request.
-	 * @param aTransportResult The result of transport operation
-	 * @param aReply The QNetworkReply instance for the request
-	 * @param aResult [out] An output parameter to the plugin manager.If the 
-	 * return value is SmfSendRequestAgain, QVariant will be of type 
-	 * SmfPluginRequestData.
-	 * 
-	 * For SmfContactFetcherPlugin: If last operation was friends() or followers() 
-	 * or search() or searchInGroup() or searchNear(), aResult will be of type 
-	 * QList<SmfContact>. If last operation was groups(), aResult will be of 
-	 * type QList<SmfGroup>
-	 * For SmfPostProviderPlugin: If last operation was retrieve(), aResult will be 
-	 * of type QList<SmfPost>. If last operation was post() or updatePost() or 
-	 * postDirected() or commentOnAPost() or postAppearence() or sharePost(), 
-	 * aResult will be of type bool
-	 * For SmfLyricsServicePlugin: If last operation was lyrics(), aResult will 
-	 * be of type QList<SmfLyrics>. If last operation was subtitles(), aResult will 
-	 * be of type QList<SmfSubtitle>.
-	 * For SmfMusicEventsPlugin: If last operation was events(), aResult will 
-	 * be of type QList<SmfEvent>. If last operation was venues(), aResult 
-	 * will be of type QList<SmfPlace>. If last operation was postEvents(), 
-	 * aResult will be of type bool
-	 * For SmfMusicSearchPlugin: If last operation was recommendations() or 
-	 * tracks() or trackInfo(), aResult will be of type QList<SmfTrackInfo>. 
-	 * If last operation was stores(), aResult will be of type 
-	 * QList<SmfProvider>. If last operation was postCurrentPlaying(), 
-	 * aResult will be of type bool.
-	 * For SmfMusicServicePlugin: If last operation was userInfo(), aResult 
-	 * will be of type SmfMusicProfile. If last operation was searchUser(), 
-	 * aResult will be of type QList<SmfMusicProfile>.
-	 * For SmfPlaylistServicePlugin: If last operation was playlists() or 
-	 * playlistsOf(), aResult will be of type QList<SmfPlaylist>. If last 
-	 * operation was addToPlaylist() or postCurrentPlayingPlaylist(), 
-	 * aResult will be of type bool.
-	 * For SmfGalleryPlugin: If last operation was pictures(), aResult will 
-	 * be of type QList<SmfPicture>. If last operation was description(), 
-	 * aResult will be of type QString. If last operation was upload() or 
-	 * postComment(), aResult will be of type bool.
-	 * 
-	 * @param aRetType [out] SmfPluginRetType
-	 * @param aPageResult [out] The SmfResultPage structure variable
-	 */
-	virtual SmfPluginError responseAvailable( 
-			const SmfTransportResult &aTransportResult, 
-			QNetworkReply *aReply, 
-			QVariant* aResult, 
-			SmfPluginRetType &aRetType,
-			SmfResultPage &aPageResult ) = 0;
-	
-	};
-
-
-#endif /* SMFPLUGINBASE_H_ */
--- a/smf/inc/smfplugins/base/smfpluginutil.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,130 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- *
- * Description:
- * The Plugin util class provides the information required for the
- * plugins from Smf framework
- *
- */
-
-#ifndef SMFPLUGINUTIL_H_
-#define SMFPLUGINUTIL_H_
-
-#include <QObject.h>
-#include <QNetworkAccessManager>
-
-/**
- * see http://qjson.sourceforge.net/usage.html for more details
- */
-using namespace QJson;
-class Parser;
-
-enum SmfSignatureMethod
-	{
-	HMAC_SHA1,
-	RSA_SHA1,
-	PLAINTEXT
-	};
-
-enum SmfParsingMode
-	{
-	ParseForRequestContent, //Inline query format (foo=bar&bar=baz&baz=foo ...), suitable for POST requests.
-	ParseForInlineQuery, // Same as ParseForRequestContent, but prepends the string with a question mark -
-						// suitable for GET requests (appending parameters to the request URL)
-	ParseForHeaderArguments // HTTP request header format (parameters to be put inside a request header).
-	};
-
-/**
- * The Plugin util class provides the information required for the
- * plugins from Smf framework
- */
-class SmfPluginUtil : public QObject
-	{
-	Q_OBJECT
-public:
-	/**
-	 * Method to get the instance of SmfPluginUtil class
-	 * @param aParser The JSON parser utility object instance
-	 * @return The instance of SmfPluginUtil class
-	 */
-	static SmfPluginUtil* getInstance ( Parser *aParser );
-
-	/**
-	 * Destructor
-	 */
-	~SmfPluginUtil ( );
-
-	/**
-	 * Method called by plugins to get the handle to QJson library
-	 * @param aHandle [out] The QJson handle
-	 */
-	Parser* getJsonHandle( void );
-
-	/**
-	 * Method called by plugins to get the OAuth Keys. The PM sends the
-	 * keys only if the pluginID is that of a currently loaded plugin
-	 * @param aKeys [out] The OAuth keys
-	 * @param aRegToken The plugin's registration token
-	 * @param aPluginID The ID of the plugin that requests for
-	 * the OAuth keys
-	 */
-	void getAuthKeys( QMap<QString, QString> &aKeys, 
-			const QString aRegToken, 
-			const QString aPluginID );
-
-	/**
-	 * Method called by plugins to get the Nonce value
-	 * @param aStr [out] The Nonce value
-	 */
-	void getNonce( QString &aStr );
-
-	/**
-	 * Method called by plugins to generate a parameters string required to
-	 * access Protected Resources using OAuth authorization.
-	 * @param aRequestUrl The request URL
-	 * @param aOperation The type of http operation
-	 * @param aToken The access token
-	 * @param aTokenSecret The token secret
-	 * @param aSignatureMethod The signature method to be used
-	 * @param aParams A map of parameters to its values
-	 * @param aMode The mode of creation of the request
-	 * @return The cretd parameter string
-	 */
-	QByteArray createParameterString( const QString &aRequestUrl,
-			QNetworkAccessManager::Operation aOperation,
-			const QByteArray &aToken,
-			const QByteArray &aTokenSecret,
-			const SmfSignatureMethod aSignatureMethod,
-			const QMultiMap<QByteArray, QByteArray> &aParams,
-			const SmfParsingMode aMode);
-
-private:
-	/**
-	 * Constructor with default argument
-	 * @param aParser The QJOSN parser object
-	 */
-	SmfPluginUtil ( Parser *aParser );
-
-
-private:
-	/**
-	 * The single instance of SmfPluginUtil
-	 */
-	static SmfPluginUtil* m_myInstance;
-
-	Parser *m_jsonParser;
-
-	};
-
-#endif /* SMFPLUGINUTIL_H_ */
--- a/smf/inc/smfplugins/base/smfproviderbase.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,164 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * The Provider Base class is the class that has to be contained as a member 
- * in all Plug-in Interfaces.
- *
- */
-
-#ifndef SMFPROVIDERBASE_H_
-#define SMFPROVIDERBASE_H_
-
-#include <QImage>
-#include <QUrl>
-#include <QBuffer>
-#include <smfglobal.h>
-#include <qdatastream.h>
-#include <QSharedData>
-
-class SmfProviderBasePrivate;
-
-/**
- * @ingroup smf_plugin_group
- * The Provider Base class is the class that has to be contained as a member 
- * in all Plug-in Interfaces.
- * 
- * All of plug-ins should contain this class as a member and should also 
- * contain a public method to get instance of this class. 
- */
-class SmfProviderBase : public QObject
-	{
-	Q_OBJECT
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aParent The parent object
-	 */
-	SmfProviderBase( QObject* aParent = 0 );
-	
-	/**
-	 * Copy Constructor
-	 * @param aOther The reference object
-	 */
-	SmfProviderBase( const SmfProviderBase &aOther );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfProviderBase( );
-
-	/**
-	 * Method to get the Localisable name of the service.
-	 * @return The Localisable name of the service.
-	 */
-	QString serviceName( ) const;
-	
-	/**
-	 * Method to get the Logo of the service
-	 * @return The Logo of the service
-	 */
-	QImage serviceIcon( ) const;
-	
-	/**
-	 * Method to get the Readable service description
-	 * @return The Readable service description
-	 */
-	QString description( ) const;
-	
-	/**
-	 * Method to get the Website of the service
-	 * @return The Website of the service
-	 */
-	QUrl serviceUrl( ) const;
-	
-	/**
-	 * Method to get the URL of the Application providing this service
-	 * @return The URL of the Application providing this service
-	 */
-	QUrl applicationUrl( ) const;
-	
-	/**
-	 * Method to get the Icon of the application
-	 * @return The Icon of the application
-	 */
-	QImage applicationIcon( ) const;
-	
-	/**
-	 * Method to get the Plugin specific ID
-	 * @return The Plugin specific ID
-	 */
-	QString pluginId( ) const;
-	
-	/**
-	 * Method to get the ID of the authentication application 
-	 * for this service
-	 * @param aProgram The authentication application name
-	 * @param aArguments List of arguments required for authentication app
-	 * @param aMode Strting mode for authentication application
-	 * @return The ID of the authentication application 
-	 */
-	QString authenticationApp( QString &aProgram, QStringList & aArguments, 
-			QIODevice::OpenModeFlag aMode = QIODevice::ReadWrite ) const;
-	
-	/**
-	 * Method to get the unique registration ID provided by the 
-	 * Smf for authorised plugins
-	 * @return The unique registration ID/token provided by the Smf for 
-	 * authorised plugins
-	 */
-	QString smfRegistrationId( ) const;
-	
-	/**
-	 * Method to get the data usage of each plugin
-	 * @return The data usage structure
-	 */
-	SmfPluginDataUsage getDataUsage( ) const;
-	
-private:
-	QSharedDataPointer<SmfProviderBasePrivate> d;
-
-	friend QDataStream &operator<<( QDataStream &aDataStream, 
-			const SmfProviderBase &aProviderBase );
-
-	friend QDataStream &operator>>( QDataStream &aDataStream, 
-			SmfProviderBase &aProviderBase );
-	
-	};
-
-
-/**
- * Method for Externalization. Writes the SmfProviderBase object to 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be written
- * @param aProviderBase The SmfProviderBase object to be externalized
- * @return reference to the written stream
- */
-QDataStream &operator<<( QDataStream &aDataStream, 
-		const SmfProviderBase &aProviderBase );
-
-/**
- * Method for Internalization. Reads a SmfProviderBase object from 
- * the stream and returns a reference to the stream.
- * @param aDataStream Stream to be read
- * @param aProviderBase The SmfProviderBase object to be internalized
- * @return reference to the stream
- */
-QDataStream &operator>>( QDataStream &aDataStream, 
-		SmfProviderBase &aProviderBase);
-
-// Make the class SmfProviderBase known to QMetaType, so that as to register it.
-Q_DECLARE_METATYPE(SmfProviderBase)
-
-#endif /* SMFPROVIDERBASE_H_ */
--- a/smf/inc/smfplugins/base/smfproviderbase_p.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd.
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the "Eclipse Public License v1.0" 
- * which accompanies  this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- *
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Private class implemented for implicit sharing of SmfProviderBase class
- *
- */
-
-#ifndef SMFPROVIDERBASE_P_H_
-#define SMFPROVIDERBASE_P_H_
-
-#include <QImage>
-#include <QUrl>
-#include <QBuffer>
-#include <smfglobal.h>
-#include <QSharedData>
-
-
-class SmfProviderBasePrivate : public QSharedData
-{
-public:
-	/**
-	 * Constructor
-	 */
-	SmfProviderBasePrivate( ) { 
-		m_serviceName.clear(); 
-		m_description.clear();
-		m_serviceUrl.clear();
-		m_applicationUrl.clear();
-		m_pluginId.clear();
-		m_authenticationAppId = 0;
-		m_registrationId.clear();
-	}
-	
-	/**
-	 * Copy Consturctor
-	 * @param aOther The reference object to be copy constructed
-	 */
-	SmfProviderBasePrivate( const SmfProviderBasePrivate &aOther ) : 
-		QSharedData ( aOther ), 
-		m_serviceName ( aOther.m_serviceName ),
-		m_serviceIcon ( aOther.m_serviceIcon ),
-		m_description ( aOther.m_description ),
-		m_serviceUrl ( aOther.m_serviceUrl ),
-		m_applicationUrl ( aOther.m_applicationUrl ),
-		m_applicationIcon ( aOther.m_applicationIcon ),
-		m_pluginId ( aOther.m_pluginId ),
-		m_authenticationAppId ( aOther.m_authenticationAppId ),
-		m_registrationId ( aOther.m_registrationId ), 
-		m_usage ( aOther.m_usage )	{ }
-	
-	/**
-	 * Destructor
-	 */
-	~SmfProviderBasePrivate( );
-  
-	QString m_serviceName;	// the Localisable name of the service
-	QImage m_serviceIcon;	// the Logo of the service
-	QString m_description;	// the Readable service description
-	QUrl m_serviceUrl;		// the Website of the service
-	QUrl m_applicationUrl; 	// URL of the Application providing this service
-	QImage m_applicationIcon;	//Icon of the application
-	QString m_pluginId;		// The Plugin specific ID
-	QString m_authenticationAppId; // ID of the authentication application for this service
-	QString m_registrationId; 	// unique registration ID provided by the 
-							// Smf for authorised plugins
-	SmfPluginDataUsage m_usage;	//data usage of each plugin
-	
-};
-
-#endif /* SMFPROVIDERBASE_P_H_ */
--- a/smf/inc/smfplugins/smfactivity/smfactivityfetcherplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - 
- *
- * Description:
- * Interface specification for plugins that implements social activity related services
- *
- */
-#ifndef SMFACTIVITYFETCHERPLUGIN_H_
-#define SMFACTIVITYFETCHERPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <smfactivity.h>
-
-// Forward declaration
-class SmfPluginManagerUtil;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for fetching social activity list for a user. 
- * This class provides basic functionality to allow applications to obtain list of
- * activities like "marked as favourite", "commented on a picture" etc in a 
- * social networking service.
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- */
-class SmfActivityFetcherPlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor 	
-	 * @param aUtil The SmfPluginManagerUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 * 
-	 */
-	SmfActivityFetcherPlugin( SmfPluginManagerUtil* aUtil);
-
-	/**
-	 * Destructor
-	 */
-	~SmfActivityFetcherPlugin();
-
-	/**
-	 * Method to get the list of self activities, e.g. shown in own wall
-	 * @param aRequest [out] The request data plugin generated (to be sent to network)
-	 * @param aPageNum[in] The page to be extracted
-	 * @param aItemsPerPage[in] Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError selfActivities( SmfPluginRequestData &aRequest,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-
-	/**
-	 * Method to get the list of activities for other, e.g. shown in a friends wall
-	 * @param aRequest [out] The request data plugin generated (to be sent to network)
-	 * @param aContact [in] The contact containing the URI, name or id of the user 
-	 * @param aPageNum[in] The page to be extracted
-	 * @param aItemsPerPage[in] Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError friendsActivities( SmfPluginRequestData &aRequest,
-			const SmfContact &aContact,			
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-
-	/**
-	 * Method to get list of self activities filtered by activity type, e.g. only photo updates in own wall
-	 * @param aRequest [out] The request data plugin generated (to be sent to network)
-	 * @param aFilters [in] The list of activity types to be included in result
-	 * @param aPageNum[in] The page to be extracted
-	 * @param aItemsPerPage[in] Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError filtered( SmfPluginRequestData &aRequest,
-			QList<SmfActivityObjectType> &aFilters,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfActivityFetcherPlugin, "org.symbian.smf.plugin.activity.fetcher/v0.2" );
-
-#endif /* SMFACTIVITYFETCHERPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfcontacts/smfcontactfetcherplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for fetching contacts
- *
- */
-
-
-#ifndef SMFCONTACTFETCHERPLUGIN_H_
-#define SMFCONTACTFETCHERPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <smfcontact.h>
-#include <smfgroup.h>
-#include <smfplace.h>
-
-// Forward declaration
-class SmfPluginUtil;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for fetching contacts. This class provides 
- * basic functionality to allow applications to obtain list of
- * friends, followers, groups of a user in a social networking service.
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- */
-class SmfContactFetcherPlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 */
-	SmfContactFetcherPlugin( SmfPluginUtil* aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfContactFetcherPlugin( );
-	
-	/**
-	 * Method to get the list of friends
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError friends( SmfPluginRequestData &aRequest,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get the list of followers
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError followers( SmfPluginRequestData &aRequest,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to search for a contact
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aContact contact to be searched
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError search( SmfPluginRequestData &aRequest,
-			const SmfContact &aContact,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to search for contacts (friends) who are near the user.
-	 * Proximity defines accuracy level
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aLocation The location search criteria
-	 * @param aProximity location search boundary
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError searchNear( SmfPluginRequestData &aRequest,
-			const SmfPlace &aLocation,
-			const SmfLocationSearchBoundary &aProximity,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get the list of groups
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError groups( SmfPluginRequestData &aRequest,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to search for a contact in a group
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aGroup the group in which to search
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError searchInGroup( SmfPluginRequestData &aRequest,
-			const SmfGroup &aGroup,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfContactFetcherPlugin, "org.symbian.smf.plugin.contact.fetcher/v1.0" );
-
-#endif /* SMFCONTACTFETCHERPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfcontacts/smfpostproviderplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,195 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for getting/posting updates to a social site
- *
- */
-
-
-#ifndef SMFPOSTPROVIDERPLUGIN_H_
-#define SMFPOSTPROVIDERPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <smfcontact.h>
-#include <smfpost.h>
-#include <smfplace.h>
-
-// Forward declaration
-class SmfPluginUtil;
-
-/**
- * SmfPresenceInfo.
- * Indicates the presence information of user like Online, Offline, Busy, 
- * Do no disturb, Appear Offline etc.
- */
-enum SmfPresenceInfo
-	{
-	  ENotSupported,
-	  EOnline,
-	  EOffline,
-	  EBusy,
-	  EDoNotDisturb,
-	  EAppearOffline,
-	  EOther
-	};
-
-/**
- * @ingroup smf_plugin_group
- * Interface to get/update the posts to a service provider. This class
- * provides basic functionality to allow applications to obtain list of
- * posts, updates posts or change the presence information to a social 
- * networking service.
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- */
-class SmfPostProviderPlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 */
-	SmfPostProviderPlugin( SmfPluginUtil* aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPostProviderPlugin( );
-	
-	/**
-	 * Method that returns maximum no of chars (unicode) that service 
-	 * provider can post without truncation. Negative value means 
-	 * no limit
-	 * @return Max characters that can be posted without truncation
-	 */
-	virtual qint32 maxCharsInPost( ) const = 0;
-	/**
-	 * Method that returns maximum no of items that can be returned 
-	 * in a single query to getPosts. Negative value means feature 
-	 * not supported.
-	 * @return Max items that can be returned in a single query
-	 */
-	virtual qint32 maxItems( ) const = 0;
-
-	/**
-	 * <Method that returns all the formatting of posts that this 
-	 * service provider supports. May return 0 items to mean 
-	 * only QString is supported.
-	 * @return Supported formats of posts
-	 */
-	virtual QVector<QTextFormat> supportedFormats ( ) const = 0;
-	
-	/**
-	 * Method that returns whether this SP supports Appearence
-	 * @return Returns true if Appearance is supported, else false. 
-	 * @see SmfAppearenceInfo
-	 */
-	virtual bool supportsAppearence ( ) const = 0;
-	
-	/**
-	 * Method to get the latest posts
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aUser The user's contact in this SP, omit for self contact
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError retrieve( SmfPluginRequestData &aRequest,
-			const SmfContact *aUser=0,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-
-	
-	/**
-	 * Method to update a post to own area.
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPostData The post data to be posted
-	 * @param aLocation The location
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError post( SmfPluginRequestData &aRequest,
-			const SmfPost &aPostData, 
-			const SmfPlace &aLocation ) = 0;
-	
-	/**
-	 * Method to update the last post to own area with new data
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPostData The edited/new data to be posted
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError updatePost( SmfPluginRequestData &aRequest,
-			const SmfPost &aPostData ) = 0;
-	
-	/**
-	 * Method to update a post to a particular contact
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPostData The post data to be posted
-	 * @param aContact The contact where the data has to be posted
-	 * @param aLocation The location
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError postDirected( SmfPluginRequestData &aRequest,
-			const SmfPost &aPostData, 
-			const SmfContact &aContact, 
-			const SmfPlace *aLocation = NULL ) = 0;
-	
-	
-	/**
-	 * Method to post a comment on a post.
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aTarget Post on which comment has to be posted
-	 * @param aComment comment to be posted
-	 * @param aLocation location data
-	 */
-	virtual SmfPluginError commentOnAPost(SmfPluginRequestData &aRequest,
-			const SmfPost& aTarget,
-			const SmfPost& aComment, 
-			const SmfPlace *aLocation = NULL);
-	
-	/**
-	 * Method to update the presence information of the user
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aAppearence The appearence information
-	 * @param aStatus The status string
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError postAppearence( SmfPluginRequestData &aRequest,  
-			const SmfPresenceInfo &aAppearence,
-			const QString &aStatus ) = 0;
-	
-	/**
-	 * Share /a contact's post to user's friends and followers
-	 * (e.g. retweet in twitter, share on facebook)
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPostData data to be posted
-	 * @param aContact contact to which the post belonged
-	 * @param aEdited whether user changed items within the post
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError sharePost( SmfPluginRequestData &aRequest, 
-			const SmfPost& aPostData, 
-			const SmfContact& aContact, 
-			const bool &aEdited);
-
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfPostProviderPlugin, "org.symbian.smf.plugin.contact.posts/v1.0" );
-
-#endif /* SMFPOSTPROVIDERPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfmusic/smflyricsserviceplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for music track lyrics
- *
- */
-
-
-#ifndef SMFLYRICSSERVICEPLUGIN_H_
-#define SMFLYRICSSERVICEPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <smftrackinfo.h>
-#include <QString>
-#include <smfsubtitle.h>
-#include <smflyrics.h>
-
-// Forward declaration
-class SmfPluginUtil;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for music track lyrics
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- */
-class SmfLyricsServicePlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 */
-	SmfLyricsServicePlugin( SmfPluginUtil* aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfLyricsServicePlugin( );
-	
-	/**
-	 * Method to get the lyrics
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aTrack The track whose lyrics need to be fetched
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError lyrics( SmfPluginRequestData &aRequest, 
-			const SmfTrackInfo &aTrack,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get the subtitle
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aTrack The track whose subtitle need to be fetched
-	 * @param aFilter The subtitle search filter if any
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError subtitles( SmfPluginRequestData &aRequest, 
-			const SmfTrackInfo &aTrack,
-			const SmfSubtitleSearchFilter &aFilter = SubtitleAll,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfLyricsServicePlugin, "org.symbian.smf.plugin.music.lyrics/v1.0" );
-
-#endif /* SMFLYRICSSERVICEPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfmusic/smfmusiceventsplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for music events
- * Note: This class has dependencies on QtMobility project
- *
- */
-
-
-#ifndef SMFMUSICEVENTSPLUGIN_H_
-#define SMFMUSICEVENTSPLUGIN_H_
-
-#include <smfpluginbase.h>
-//#include <qtcontacts.h>
-#include <smfevent.h>
-#include <smfplace.h>
-#include <qgeopositioninfo.h> // Qt mobility class
-
-// Forward declaration
-class SmfPluginUtil;
-
-using namespace QtMobility;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for music events
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- * 
- * Note: This class has dependencies on QtMobility project
- */
-class SmfMusicEventsPlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf framework
-	 */
-	SmfMusicEventsPlugin( SmfPluginUtil* aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfMusicEventsPlugin( );
-	
-	/**
-	 * Method to get the events based on location
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aLocation Location of the event
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError events( SmfPluginRequestData &aRequest,
-			const QGeoPositionInfo &aLocation,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get the venues based on location
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aLocation Location of the venue
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError venues( SmfPluginRequestData &aRequest,
-			const QGeoPositionInfo &aLocation,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get the events based on venues
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aVenue Venue of the event
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError events( SmfPluginRequestData &aRequest,
-			const SmfPlace &aVenue,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to post events
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aEventList The list of events to be posted
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError postEvents( SmfPluginRequestData &aRequest,
-			const QList<SmfEvent> &aEventList ) = 0;
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfMusicEventsPlugin, "org.symbian.smf.plugin.music.events/v1.0" );
-
-#endif /* SMFMUSICEVENTSPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfmusic/smfmusicsearchplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for music search services
- *
- */
-
-
-#ifndef SMFMUSICSEARCHPLUGIN_H_
-#define SMFMUSICSEARCHPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <QList>
-#include <smfmusicfingerprint.h>
-#include <smftrackinfo.h>
-
-// Forward declaration
-class SmfPluginUtil;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for music search services. This class
- * provides basic functionality to allow applications to search for 
- * tracks, get recommented tracks etc
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- */
-class SmfMusicSearchPlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 */
-	SmfMusicSearchPlugin( SmfPluginUtil *aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfMusicSearchPlugin( );
-	
-	/**
-	 * Method to get recommended tracks
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aTrack The track for which similar recommendations 
-	 * need to be fetched.
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError recommendations( SmfPluginRequestData &aRequest,
-			const SmfTrackInfo &aTrack,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get similar tracks
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aTrack The track for which similar tracks 
-	 * need to be fetched.
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError tracks( SmfPluginRequestData &aRequest,
-			const SmfTrackInfo &aTrack,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get tracks having a similar finger print
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aSignature The finger print to be searched for need to be 
-	 * fetched.
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError trackInfo( SmfPluginRequestData &aRequest,
-			const SmfMusicFingerPrint &aSignature,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to search information about where to buy this song from
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aTrack The track for which stores need to be searched
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError stores( SmfPluginRequestData &aRequest,
-			const SmfTrackInfo &aTrack,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to post the currently playing track
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aTrack The current playing track, that should be posted
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError postCurrentPlaying( 
-			SmfPluginRequestData &aRequest,
-			const SmfTrackInfo &aTrack ) = 0;
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfMusicSearchPlugin, "org.symbian.smf.plugin.music.search/v1.0" );
-
-#endif /* SMFMUSICSEARCHPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfmusic/smfmusicserviceplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for music services
- *
- */
-
-
-#ifndef SMFMUSICSERVICEPLUGIN_H_
-#define SMFMUSICSERVICEPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <smfmusicprofile.h>
-#include <smfplace.h>
-
-// Forward declaration
-class SmfPluginUtil;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for music services. This class provides basic 
- * functionality to allow application to search for a user or check for
- * user information etc.
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- */
-class SmfMusicServicePlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 */
-	SmfMusicServicePlugin( SmfPluginUtil *aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfMusicServicePlugin( );
-	
-	/**
-	 * Method to get self profile information
-	 * @param aRequest [out] The request data to be sent to network
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError userInfo( SmfPluginRequestData &aRequest ) = 0;
-	
-	/**
-	 * Method to search information about other service users for a 
-	 * particular place
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPlace The place which is the search criteria
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError searchUser( SmfPluginRequestData &aRequest,
-			const SmfPlace &aPlace,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfMusicServicePlugin, "org.symbian.smf.plugin.music.service/v1.0" );
-
-#endif /* SMFMUSICSERVICEPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfmusic/smfplaylistserviceplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,108 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for playlists service
- *
- */
-
-
-#ifndef SMFPLAYLISTSERVICEPLUGIN_H_
-#define SMFPLAYLISTSERVICEPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <smfplaylist.h>
-#include <smfmusicprofile.h>
-#include <smftrackinfo.h>
-
-// Forward declaration
-class SmfPluginUtil;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for playlists service. This class provides 
- * basic functionality to allow applications to get playlists of a user, 
- * add some track to an existing playlist, post the current playing 
- * playlists etc.
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- */
-class SmfPlaylistServicePlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 */
-	SmfPlaylistServicePlugin( SmfPluginUtil *aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfPlaylistServicePlugin( );
-	
-	/**
-	 * Method to get the playlist
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError playlists( SmfPluginRequestData &aRequest,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get the playlist of a particular user
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aUser The user whose playlists need to be fetched
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError playlistsOf( SmfPluginRequestData &aRequest,
-			const SmfMusicProfile &aUser,
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to add tracks to a playlist
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPlaylist The playlist where tracks should be added
-	 * @param aTracks The tracks to be added to the playlist
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError addToPlaylist( SmfPluginRequestData &aRequest,
-			const SmfPlaylist &aPlaylist, 
-			const QList<SmfTrackInfo> &aTracks ) = 0;
-	
-	/**
-	 * Method to post the current playing playlist
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPlaylist The current playing playlist which should be posted
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError postCurrentPlayingPlaylist(
-			SmfPluginRequestData &aRequest, 
-			const SmfPlaylist &aPlaylist ) = 0;
-	
-	};
-
-Q_DECLARE_INTERFACE( SmfPlaylistServicePlugin, "org.symbian.smf.plugin.music.playlist/v1.0" );
-
-#endif /* SMFPLAYLISTSERVICEPLUGIN_H_ */
--- a/smf/inc/smfplugins/smfpictures/smfgalleryplugin.h	Tue May 18 17:33:55 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/**
- * Copyright (c) 2010 Sasken Communication Technologies Ltd. 
- * All rights reserved.
- * This component and the accompanying materials are made available 
- * under the terms of the "Eclipse Public License v1.0"
- * which accompanies  this distribution, and is available 
- * at the URL "http://www.eclipse.org/legal/epl-v10.html"
- * 
- * Initial Contributors:
- * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
- *
- * Contributors:
- * Manasij Roy, Nalina Hariharan
- * 
- * Description:
- * Interface specification for plugins that implement gallery related services
- *
- */
-
-#ifndef SMFGALLERYPLUGIN_H_
-#define SMFGALLERYPLUGIN_H_
-
-#include <smfpluginbase.h>
-#include <smfpicture.h>
-#include <smfcomment.h>
-
-// Forward declaration
-class SmfPluginUtil;
-
-/**
- * @ingroup smf_plugin_group
- * Interface specification for plugins that implement gallery related services
- * like getting pictures, their description, uploading, posting comments 
- * on pictures etc
- *
- * All of the functionality described here should be implemented by a service
- * specific plug-in.
- *
- * A sample call flow between SmfPluginMgr and  SmfGalleryPlugin is shown here
- * 
- * @msc
-   hscale = "2";  
-  SmfServer,SmfTransportMgr,SmfPluginMgr,SmfGalleryPlugin;
-  ...;
-  SmfPluginMgr=>SmfTransportMgr [ label = "connect(SIGNAL(finished()), SLOT(replyFinished()))" ] ;
-  ...;
-  SmfServer=> SmfPluginMgr[ label = "loadAndCheckPlugin()" ] ;
-  SmfPluginMgr=>SmfPluginMgr [ label = "SmfGalleryPlugin smfglpl= load()" ] ;
-  SmfPluginMgr=>SmfGalleryPlugin [ label = "QNetworkRequest  req = smfglpl.pictures()" ] ;
-  SmfPluginMgr=>SmfTransportMgr [ label = "nwmgr.get( req )" ] ;
-  ...;
-  SmfTransportMgr=>SmfPluginMgr [ label = "replyFinished( reply )" ] ;
-  SmfPluginMgr=>SmfGalleryPlugin [ label = "status = responseAvailable( reply, &data )" ] ;
-  SmfPluginMgr=>SmfServer [ label = "if(status ==complete) dataStream <<  data;" ] ;
-  @endmsc
- * 
- */
-class SmfGalleryPlugin : public SmfPluginBase
-	{
-public:
-	/**
-	 * Constructor with default argument
-	 * @param aUtil The SmfPluginUtil instance. The plugins can 
-	 * call the method getAuthKeys() of this class, with its pluginID to 
-	 * get the OAuth keys, keys are returned only if this plugin is 
-	 * authorised by Smf franework
-	 */
-	SmfGalleryPlugin( SmfPluginUtil *aUtil );
-	
-	/**
-	 * Destructor
-	 */
-	~SmfGalleryPlugin( );
-	
-	/**
-	 * Method to get a list of pictures
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aPageNum The page to be extracted
-	 * @param aItemsPerPage Number of items per page
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError pictures( SmfPluginRequestData &aRequest, 
-			const int aPageNum = SMF_FIRST_PAGE, 
-			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
-	
-	/**
-	 * Method to get a description
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aImage The image abot which the description is required
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError description( SmfPluginRequestData &aRequest,
-			const SmfPicture &aImage ) = 0;
-	
-	/**
-	 * Method to upload a picture
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aImage The image to be uploaded
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError upload( SmfPluginRequestData &aRequest,
-			const SmfPicture &aImage ) = 0;
-	
-	/**
-	 * Method to upload a list of pictures
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aImages The list of images to be uploaded
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError upload( SmfPluginRequestData &aRequest,
-			const QList<SmfPicture> &aImages ) = 0;
-	
-	/**
-	 * Method to post comment on a picture is available
-	 * @param aRequest [out] The request data to be sent to network
-	 * @param aImage The image on which comment is to be posted
-	 * @param aComment The comment to be posted
-	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
-	 */
-	virtual SmfPluginError postComment( SmfPluginRequestData &aRequest,
-			const SmfPicture &aImage, 
-			const SmfComment &aComment ) = 0;
-		
-	};
-
-Q_DECLARE_INTERFACE( SmfGalleryPlugin, "org.symbian.smf.plugin.gallery/v1.0" );
-
-#endif /* SMFGALLERYPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smf.pro	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,5 @@
+TEMPLATE  = 	subdirs
+
+SUBDIRS   =	smfcredentialmgr \
+		smfservermodule \
+		smfsettingsui
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfdes.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,87 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0"
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * Intro Page
+ *
+ * @ref smf_high_level_design
+ */
+
+/**
+ * @mainpage SMF (Social Mobile Framework Interfaces)
+ * @defgroup smf_high_level_design SMF high level design
+ *
+ * Social Mobile Framework is a application level framework which allows Qt Applications
+ * use the common web APIs to perform social web activities.
+ *
+ * Product name is "SMF"
+ *
+ * For details please refer to http://developer.symbian.org/wiki/index.php/Social_Mobile_Framework
+ *
+ * @section smf_interfaces SMF Interfaces
+ *
+ * There are two sets of interfaces -
+ * 		@subsection smf_client_interfaces Client Interfaces
+ * 				- Client Applications (e.g. Media Player, Contacts, Game) uses these APIs to access SMF. see @ref smf_client_group
+ *
+ * 		@subsection smf_plugin_interfaces Plugin Interfaces
+ * 				- Service Providers (e.g. Facebook, Flickr, last.fm) implements these APIs to provide service to SMF - see @ref smf_plugin_group
+ *
+ * Currently, @ref smf_client_interfaces and @ref smf_plugin_interfaces are defined for remote contacts, remote
+ * image gallery and remote music services. There are common classes defined for holding data accross clients
+ * and plugins, present in inc\common, see - @ref smf_common_group
+ *
+ *
+ *		@section smf_client_usage Client Usage Example
+ *		- This shows how to use the SMF client APIs in applications, e.g. Client can define suitable Models using lists returned by these APIs
+ *				- how to fetch a list of contacts from a remote server e.g. Facebook, see @ref MyApplication::displayFriends()
+ *				- how to get a @ref QContact from a SmfContacts see @ref MyApplication::showlist()
+ *				- how to get a list of images from a remote gallery e.g. Flickr.com, see @ref MyApplication::displayGallery()
+ *				- how to post privately to a contact see @ref MyApplication::postUpdate()
+ *				- how to tell others about the music you are currently listen to, see @ref MyApplication::updateCurrentPlaying()
+ *				- how to list all the activities that has happened recently, see @ref MyApplication::getActivities() and @ref MyApplication::showActivities()
+ *
+ *		@section smf_sample_plugin Sample Plugin From Service provider
+ *		- This shows how to write a plugin for extending SMF service. Authentication Application also needs to be provided for these plugins.
+ *				- how to create request to be sent to a remote server e.g. Flickr.com, see @ref SamplePlugin::pictures()
+ *				- how to implement posting of comment on a picture to Flickr.com,  @ref SamplePlugin::postComment()
+ *				- how to parse the response that arrived from Flickr.com, see @ref SamplePlugin::responseAvailable()
+ *				- how to use JSON parsing from SmfPluginUtil, see @ref SamplePlugin::responseAvailable()
+ *
+ *		@section smf_custom_api Custom API in SMF
+ *		- SMF strives to provide service API for generic "common" social operations. However this doesn't mean that developers have to
+ *		use other propriatery APIs to access service specific "differentiating" features. Service Providers can provide plugins which support
+ *		APIs like @ref SmfGalleryPlugin::customRequest(). A separate library would also be provided by service providers to help SMF clients use this custom
+ *		API like @ref SmfGallery::customRequest().
+ *
+ *
+ *
+ *		@section smf_dependency Dependency
+ *		- SMF uses QtMobility for mainly contacts information, see QtMobility project.
+ *		- SMF uses QJson as utility library, courtesy Flavio Castelli , see http://gitorious.org/qjson/qjson
+ *
+ *		@section smf_notes Notes:
+ *		- SMF defines the social activities with inspiration from http://activitystrea.ms/
+ *		- Other such open standards would soon find their usage in SMF, one such candidate is http://xspf.org/
+ *
+   */
+/**
+ * @defgroup smf_common_group Common Data Classes
+ */
+/**
+ * @defgroup smf_client_group Client Classes
+ */
+/**
+ * @defgroup smf_plugin_group Plugin Classes
+ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/Makefile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,171 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.1) on: Wed May 5 13:58:12 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+#  Name        : Makefile
+#  Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE          = Makefile
+QMAKE             = e:\Qt\4.6.1\bin\qmake
+DEL_FILE          = del
+DEL_DIR           = rmdir
+MOVE              = move
+XCOPY             = xcopy /d /f /h /r /y /i
+ABLD              = ABLD.BAT
+DEBUG_PLATFORMS   = winscw gcce armv5 armv6
+RELEASE_PLATFORMS = gcce armv5 armv6
+MAKE              = make
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+DEFINES	 = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS -DQT_GUI_LIB -DQT_CORE_LIB
+INCPATH	 =  -I"E:/Qt/4.6.1/include/QtCore" -I"E:/Qt/4.6.1/include/QtCore/tmp" -I"E:/Qt/4.6.1/include/QtGui" -I"E:/Qt/4.6.1/include/QtGui/tmp" -I"E:/Qt/4.6.1/include" -I"E:/Qt/4.6.1/include/tmp" -I"E:/Qt/4.6.1/mkspecs/common/symbian" -I"E:/Qt/4.6.1/mkspecs/common/symbian/tmp" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smfservermodule/smfserver" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smfservermodule/smfserver/tmp" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/stdapis" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/stdapis/sys" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/stdapis/stlport" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/middleware" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/domain/middleware" -I"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/include/domain/middleware/loc" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smfservermodule" -I"E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smfservermodule/tmp"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+	$(QMAKE) -spec symbian-abld -o "bld.inf" "E:/qt-mobility-src-1.0.0-tp2/smf_integrated_30apr/smfrepo/smf/smfservermodule/smfservermodule.pro"
+
+bld.inf:
+	$(QMAKE)
+
+$(ABLD): bld.inf
+	bldmake bldfiles
+
+debug: $(ABLD)
+	$(ABLD) build winscw udeb
+	$(ABLD) build gcce udeb
+	$(ABLD) build armv5 udeb
+	$(ABLD) build armv6 udeb
+
+release: $(ABLD)
+	$(ABLD) build gcce urel
+	$(ABLD) build armv5 urel
+	$(ABLD) build armv6 urel
+
+debug-winscw: $(ABLD)
+	$(ABLD) build winscw udeb
+debug-gcce: $(ABLD)
+	$(ABLD) build gcce udeb
+debug-armv5: $(ABLD)
+	$(ABLD) build armv5 udeb
+debug-armv6: $(ABLD)
+	$(ABLD) build armv6 udeb
+release-gcce: $(ABLD)
+	$(ABLD) build gcce urel
+release-armv5: $(ABLD)
+	$(ABLD) build armv5 urel
+release-armv6: $(ABLD)
+	$(ABLD) build armv6 urel
+
+export: $(ABLD)
+	$(ABLD) export
+
+cleanexport: $(ABLD)
+	$(ABLD) cleanexport
+
+smfserver\$(MAKEFILE): 
+	@$(CHK_DIR_EXISTS) smfserver\ $(MKDIR) smfserver\ 
+	cd smfserver\ && $(QMAKE) smfserver.pro -win32 -o $(MAKEFILE)
+sub-smfserver-qmake_all:  FORCE
+	@$(CHK_DIR_EXISTS) smfserver\ $(MKDIR) smfserver\ 
+	cd smfserver\ && $(QMAKE) smfserver.pro -win32 -o $(MAKEFILE)
+sub-smfserver: smfserver\$(MAKEFILE) FORCE
+	cd smfserver\ && $(MAKE) -f $(MAKEFILE)
+smfclient\$(MAKEFILE): 
+	@$(CHK_DIR_EXISTS) smfclient\ $(MKDIR) smfclient\ 
+	cd smfclient\ && $(QMAKE) smfclient.pro -win32 -o $(MAKEFILE)
+sub-smfclient-qmake_all:  FORCE
+	@$(CHK_DIR_EXISTS) smfclient\ $(MKDIR) smfclient\ 
+	cd smfclient\ && $(QMAKE) smfclient.pro -win32 -o $(MAKEFILE)
+sub-smfclient: smfclient\$(MAKEFILE) FORCE
+	cd smfclient\ && $(MAKE) -f $(MAKEFILE)
+
+
+E:\Qt\4.6.1\bin\moc.exe:
+	(cd $(QTDIR)/src/tools/moc && $(MAKE))
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+FORCE:
+
+winscw_deployment:
+
+winscw_deployment_clean:
+
+sis: restore_build
+	$(if $(wildcard smfservermodule_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+	createpackage.bat $(QT_SIS_OPTIONS) smfservermodule_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+	$(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+	$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+restore_build:
+-include .make.cache
+
+store_build:
+	@echo # ============================================================================== > .make.cache
+	@echo # This file is generated by make and should not be modified by the user >> .make.cache
+	@echo #  Name        : .make.cache >> .make.cache
+	@echo #  Part of     : smfservermodule >> .make.cache
+	@echo #  Description : This file is used to cache last build target for >> .make.cache
+	@echo #                make sis target. >> .make.cache
+	@echo #  Version     :  >> .make.cache
+	@echo # >> .make.cache
+	@echo # ============================================================================== >> .make.cache
+	@echo. >> .make.cache
+	@echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> .make.cache
+
+dodistclean:
+	-$(MAKE) -f "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\smfserver\Makefile" dodistclean
+	-$(MAKE) -f "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\smfclient\Makefile" dodistclean
+	-@ if EXIST "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\Makefile" $(DEL_FILE)  "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\Makefile"
+	-@ if EXIST "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\.make.cache" $(DEL_FILE)  "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\.make.cache"
+	-@ if EXIST "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\bld.inf" $(DEL_FILE)  "e:\qt-mobility-src-1.0.0-tp2\smf_integrated_30apr\smfrepo\smf\smfservermodule\bld.inf"
+
+distclean: clean dodistclean
+
+clean: $(ABLD)
+	-$(ABLD) reallyclean
+	-bldmake clean
+
+clean-debug: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+	$(ABLD) reallyclean gcce udeb
+	$(ABLD) reallyclean armv5 udeb
+	$(ABLD) reallyclean armv6 udeb
+
+clean-release: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+	$(ABLD) reallyclean armv5 urel
+	$(ABLD) reallyclean armv6 urel
+
+clean-debug-winscw: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+clean-debug-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce udeb
+clean-debug-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 udeb
+clean-debug-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 udeb
+clean-release-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+clean-release-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 urel
+clean-release-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 urel
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/bld.inf	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,28 @@
+// ============================================================================
+// * Makefile for building: smfservermodule
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-05T13:58:12
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// * Project:  smfservermodule.pro
+// * Template: subdirs
+// ============================================================================
+
+#define BLD_INF_SMFSERVERMODULE_0FBFD7DA
+
+#ifndef BLD_INF_SMFSERVER_F2DC1A17
+	#include "smfserver\bld.inf"
+#endif // BLD_INF_SMFSERVER_F2DC1A17
+#ifndef BLD_INF_SMFCLIENT_F2F312E7
+	#include "smfclient\bld.inf"
+#endif // BLD_INF_SMFCLIENT_F2F312E7
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+
+prj_mmpfiles
+
+
+prj_extensions
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/bwins/smfclientu.def	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,371 @@
+EXPORTS
+	??0SmfAlbum@@QAE@ABV0@@Z @ 1 NONAME ; SmfAlbum::SmfAlbum(class SmfAlbum const &)
+	??0SmfAlbum@@QAE@XZ @ 2 NONAME ; SmfAlbum::SmfAlbum(void)
+	??0SmfArtists@@QAE@ABV0@@Z @ 3 NONAME ; SmfArtists::SmfArtists(class SmfArtists const &)
+	??0SmfArtists@@QAE@XZ @ 4 NONAME ; SmfArtists::SmfArtists(void)
+	??0SmfClient@@QAE@XZ @ 5 NONAME ; SmfClient::SmfClient(void)
+	??0SmfComment@@QAE@ABV0@@Z @ 6 NONAME ; SmfComment::SmfComment(class SmfComment const &)
+	??0SmfComment@@QAE@XZ @ 7 NONAME ; SmfComment::SmfComment(void)
+	??0SmfContact@@QAE@ABV0@@Z @ 8 NONAME ; SmfContact::SmfContact(class SmfContact const &)
+	??0SmfContact@@QAE@PAVQObject@@@Z @ 9 NONAME ; SmfContact::SmfContact(class QObject *)
+	??0SmfContactFetcher@@QAE@PAVSmfProvider@@@Z @ 10 NONAME ; SmfContactFetcher::SmfContactFetcher(class SmfProvider *)
+	??0SmfContactFetcher@@QAE@PAVSmfProvider@@PAVSmfContact@@@Z @ 11 NONAME ; SmfContactFetcher::SmfContactFetcher(class SmfProvider *, class SmfContact *)
+	??0SmfEvent@@QAE@ABV0@@Z @ 12 NONAME ; SmfEvent::SmfEvent(class SmfEvent const &)
+	??0SmfEvent@@QAE@XZ @ 13 NONAME ; SmfEvent::SmfEvent(void)
+	??0SmfGallery@@QAE@PAVSmfProvider@@@Z @ 14 NONAME ; SmfGallery::SmfGallery(class SmfProvider *)
+	??0SmfGroup@@QAE@ABV0@@Z @ 15 NONAME ; SmfGroup::SmfGroup(class SmfGroup const &)
+	??0SmfGroup@@QAE@PAV?$QList@VSmfContact@@@@@Z @ 16 NONAME ; SmfGroup::SmfGroup(class QList<class SmfContact> *)
+	??0SmfLocation@@QAE@ABV0@@Z @ 17 NONAME ; SmfLocation::SmfLocation(class SmfLocation const &)
+	??0SmfLocation@@QAE@XZ @ 18 NONAME ; SmfLocation::SmfLocation(void)
+	??0SmfLyrics@@QAE@ABV0@@Z @ 19 NONAME ; SmfLyrics::SmfLyrics(class SmfLyrics const &)
+	??0SmfLyrics@@QAE@XZ @ 20 NONAME ; SmfLyrics::SmfLyrics(void)
+	??0SmfMusicFingerPrint@@QAE@ABV0@@Z @ 21 NONAME ; SmfMusicFingerPrint::SmfMusicFingerPrint(class SmfMusicFingerPrint const &)
+	??0SmfMusicFingerPrint@@QAE@XZ @ 22 NONAME ; SmfMusicFingerPrint::SmfMusicFingerPrint(void)
+	??0SmfMusicProfile@@QAE@ABV0@@Z @ 23 NONAME ; SmfMusicProfile::SmfMusicProfile(class SmfMusicProfile const &)
+	??0SmfMusicProfile@@QAE@XZ @ 24 NONAME ; SmfMusicProfile::SmfMusicProfile(void)
+	??0SmfMusicRating@@QAE@ABV0@@Z @ 25 NONAME ; SmfMusicRating::SmfMusicRating(class SmfMusicRating const &)
+	??0SmfMusicRating@@QAE@PAVSmfTrackInfo@@@Z @ 26 NONAME ; SmfMusicRating::SmfMusicRating(class SmfTrackInfo *)
+	??0SmfPicture@@QAE@ABV0@@Z @ 27 NONAME ; SmfPicture::SmfPicture(class SmfPicture const &)
+	??0SmfPicture@@QAE@ABVQImage@@@Z @ 28 NONAME ; SmfPicture::SmfPicture(class QImage const &)
+	??0SmfPicture@@QAE@XZ @ 29 NONAME ; SmfPicture::SmfPicture(void)
+	??0SmfPlaylist@@QAE@ABV0@@Z @ 30 NONAME ; SmfPlaylist::SmfPlaylist(class SmfPlaylist const &)
+	??0SmfPlaylist@@QAE@XZ @ 31 NONAME ; SmfPlaylist::SmfPlaylist(void)
+	??0SmfPluginUtil@@AAE@XZ @ 32 NONAME ; SmfPluginUtil::SmfPluginUtil(void)
+	??0SmfPost@@QAE@ABV0@@Z @ 33 NONAME ; SmfPost::SmfPost(class SmfPost const &)
+	??0SmfPost@@QAE@VQString@@0VQImage@@VQUrl@@@Z @ 34 NONAME ; SmfPost::SmfPost(class QString, class QString, class QImage, class QUrl)
+	??0SmfPost@@QAE@XZ @ 35 NONAME ; SmfPost::SmfPost(void)
+	??0SmfPostProvider@@QAE@PAVSmfProvider@@@Z @ 36 NONAME ; SmfPostProvider::SmfPostProvider(class SmfProvider *)
+	??0SmfProvider@@QAE@ABV0@@Z @ 37 NONAME ; SmfProvider::SmfProvider(class SmfProvider const &)
+	??0SmfProvider@@QAE@PAVQObject@@@Z @ 38 NONAME ; SmfProvider::SmfProvider(class QObject *)
+	??0SmfSubtitle@@QAE@ABV0@@Z @ 39 NONAME ; SmfSubtitle::SmfSubtitle(class SmfSubtitle const &)
+	??0SmfSubtitle@@QAE@XZ @ 40 NONAME ; SmfSubtitle::SmfSubtitle(void)
+	??0SmfTrackInfo@@QAE@ABV0@@Z @ 41 NONAME ; SmfTrackInfo::SmfTrackInfo(class SmfTrackInfo const &)
+	??0SmfTrackInfo@@QAE@XZ @ 42 NONAME ; SmfTrackInfo::SmfTrackInfo(void)
+	??1SmfAlbum@@QAE@XZ @ 43 NONAME ; SmfAlbum::~SmfAlbum(void)
+	??1SmfArtists@@QAE@XZ @ 44 NONAME ; SmfArtists::~SmfArtists(void)
+	??1SmfClient@@QAE@XZ @ 45 NONAME ; SmfClient::~SmfClient(void)
+	??1SmfComment@@QAE@XZ @ 46 NONAME ; SmfComment::~SmfComment(void)
+	??1SmfContact@@QAE@XZ @ 47 NONAME ; SmfContact::~SmfContact(void)
+	??1SmfContactFetcher@@UAE@XZ @ 48 NONAME ; SmfContactFetcher::~SmfContactFetcher(void)
+	??1SmfEvent@@QAE@XZ @ 49 NONAME ; SmfEvent::~SmfEvent(void)
+	??1SmfGallery@@UAE@XZ @ 50 NONAME ; SmfGallery::~SmfGallery(void)
+	??1SmfGroup@@QAE@XZ @ 51 NONAME ; SmfGroup::~SmfGroup(void)
+	??1SmfLocation@@QAE@XZ @ 52 NONAME ; SmfLocation::~SmfLocation(void)
+	??1SmfLyrics@@QAE@XZ @ 53 NONAME ; SmfLyrics::~SmfLyrics(void)
+	??1SmfMusicFingerPrint@@QAE@XZ @ 54 NONAME ; SmfMusicFingerPrint::~SmfMusicFingerPrint(void)
+	??1SmfMusicProfile@@QAE@XZ @ 55 NONAME ; SmfMusicProfile::~SmfMusicProfile(void)
+	??1SmfMusicRating@@QAE@XZ @ 56 NONAME ; SmfMusicRating::~SmfMusicRating(void)
+	??1SmfPicture@@QAE@XZ @ 57 NONAME ; SmfPicture::~SmfPicture(void)
+	??1SmfPlaylist@@QAE@XZ @ 58 NONAME ; SmfPlaylist::~SmfPlaylist(void)
+	??1SmfPluginUtil@@QAE@XZ @ 59 NONAME ; SmfPluginUtil::~SmfPluginUtil(void)
+	??1SmfPost@@QAE@XZ @ 60 NONAME ; SmfPost::~SmfPost(void)
+	??1SmfPostProvider@@UAE@XZ @ 61 NONAME ; SmfPostProvider::~SmfPostProvider(void)
+	??1SmfProvider@@QAE@XZ @ 62 NONAME ; SmfProvider::~SmfProvider(void)
+	??1SmfSubtitle@@QAE@XZ @ 63 NONAME ; SmfSubtitle::~SmfSubtitle(void)
+	??1SmfTrackInfo@@QAE@XZ @ 64 NONAME ; SmfTrackInfo::~SmfTrackInfo(void)
+	??4SmfAlbum@@QAEAAV0@ABV0@@Z @ 65 NONAME ; class SmfAlbum & SmfAlbum::operator=(class SmfAlbum const &)
+	??4SmfArtists@@QAEAAV0@ABV0@@Z @ 66 NONAME ; class SmfArtists & SmfArtists::operator=(class SmfArtists const &)
+	??4SmfComment@@QAEAAV0@ABV0@@Z @ 67 NONAME ; class SmfComment & SmfComment::operator=(class SmfComment const &)
+	??4SmfEvent@@QAEAAV0@ABV0@@Z @ 68 NONAME ; class SmfEvent & SmfEvent::operator=(class SmfEvent const &)
+	??4SmfGroup@@QAEAAV0@ABV0@@Z @ 69 NONAME ; class SmfGroup & SmfGroup::operator=(class SmfGroup const &)
+	??4SmfLocation@@QAEAAV0@ABV0@@Z @ 70 NONAME ; class SmfLocation & SmfLocation::operator=(class SmfLocation const &)
+	??4SmfLyrics@@QAEAAV0@ABV0@@Z @ 71 NONAME ; class SmfLyrics & SmfLyrics::operator=(class SmfLyrics const &)
+	??4SmfMusicFingerPrint@@QAEAAV0@ABV0@@Z @ 72 NONAME ; class SmfMusicFingerPrint & SmfMusicFingerPrint::operator=(class SmfMusicFingerPrint const &)
+	??4SmfMusicProfile@@QAEAAV0@ABV0@@Z @ 73 NONAME ; class SmfMusicProfile & SmfMusicProfile::operator=(class SmfMusicProfile const &)
+	??4SmfMusicRating@@QAEAAV0@ABV0@@Z @ 74 NONAME ; class SmfMusicRating & SmfMusicRating::operator=(class SmfMusicRating const &)
+	??4SmfPicture@@QAEAAV0@ABV0@@Z @ 75 NONAME ; class SmfPicture & SmfPicture::operator=(class SmfPicture const &)
+	??4SmfPlaylist@@QAEAAV0@ABV0@@Z @ 76 NONAME ; class SmfPlaylist & SmfPlaylist::operator=(class SmfPlaylist const &)
+	??4SmfPost@@QAEAAV0@ABV0@@Z @ 77 NONAME ; class SmfPost & SmfPost::operator=(class SmfPost const &)
+	??4SmfSubtitle@@QAEAAV0@ABV0@@Z @ 78 NONAME ; class SmfSubtitle & SmfSubtitle::operator=(class SmfSubtitle const &)
+	??4SmfTrackInfo@@QAEAAV0@ABV0@@Z @ 79 NONAME ; class SmfTrackInfo & SmfTrackInfo::operator=(class SmfTrackInfo const &)
+	??5@YAAAVQDataStream@@AAV0@AAVQContactName@QtMobility@@@Z @ 80 NONAME ; class QDataStream & operator>>(class QDataStream &, class QtMobility::QContactName &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfAlbum@@@Z @ 81 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfAlbum &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfArtists@@@Z @ 82 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfArtists &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfComment@@@Z @ 83 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfComment &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfContact@@@Z @ 84 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfContact &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfEvent@@@Z @ 85 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfEvent &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfGroup@@@Z @ 86 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfGroup &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfLocation@@@Z @ 87 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfLocation &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfLyrics@@@Z @ 88 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfLyrics &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfMusicFingerPrint@@@Z @ 89 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfMusicFingerPrint &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfMusicProfile@@@Z @ 90 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfMusicProfile &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfMusicRating@@@Z @ 91 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfMusicRating &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfPicture@@@Z @ 92 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfPicture &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfPlaylist@@@Z @ 93 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfPlaylist &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfPost@@@Z @ 94 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfPost &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfProvider@@@Z @ 95 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfProvider &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfSubtitle@@@Z @ 96 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfSubtitle &)
+	??5@YAAAVQDataStream@@AAV0@AAVSmfTrackInfo@@@Z @ 97 NONAME ; class QDataStream & operator>>(class QDataStream &, class SmfTrackInfo &)
+	??6@YAAAVQDataStream@@AAV0@ABVQContactName@QtMobility@@@Z @ 98 NONAME ; class QDataStream & operator<<(class QDataStream &, class QtMobility::QContactName const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfAlbum@@@Z @ 99 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfAlbum const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfArtists@@@Z @ 100 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfArtists const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfComment@@@Z @ 101 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfComment const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfContact@@@Z @ 102 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfContact const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfEvent@@@Z @ 103 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfEvent const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfGroup@@@Z @ 104 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfGroup const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfLocation@@@Z @ 105 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfLocation const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfLyrics@@@Z @ 106 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfLyrics const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfMusicFingerPrint@@@Z @ 107 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfMusicFingerPrint const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfMusicProfile@@@Z @ 108 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfMusicProfile const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfMusicRating@@@Z @ 109 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfMusicRating const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfPicture@@@Z @ 110 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfPicture const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfPlaylist@@@Z @ 111 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfPlaylist const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfPost@@@Z @ 112 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfPost const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfProvider@@@Z @ 113 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfProvider const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfSubtitle@@@Z @ 114 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfSubtitle const &)
+	??6@YAAAVQDataStream@@AAV0@ABVSmfTrackInfo@@@Z @ 115 NONAME ; class QDataStream & operator<<(class QDataStream &, class SmfTrackInfo const &)
+	??_ESmfComment@@QAE@I@Z @ 116 NONAME ; SmfComment::~SmfComment(unsigned int)
+	??_ESmfContact@@QAE@I@Z @ 117 NONAME ; SmfContact::~SmfContact(unsigned int)
+	??_ESmfContactFetcher@@UAE@I@Z @ 118 NONAME ; SmfContactFetcher::~SmfContactFetcher(unsigned int)
+	??_ESmfEvent@@QAE@I@Z @ 119 NONAME ; SmfEvent::~SmfEvent(unsigned int)
+	??_ESmfGallery@@UAE@I@Z @ 120 NONAME ; SmfGallery::~SmfGallery(unsigned int)
+	??_ESmfGroup@@QAE@I@Z @ 121 NONAME ; SmfGroup::~SmfGroup(unsigned int)
+	??_ESmfPicture@@QAE@I@Z @ 122 NONAME ; SmfPicture::~SmfPicture(unsigned int)
+	??_ESmfPluginUtil@@QAE@I@Z @ 123 NONAME ; SmfPluginUtil::~SmfPluginUtil(unsigned int)
+	??_ESmfPost@@QAE@I@Z @ 124 NONAME ; SmfPost::~SmfPost(unsigned int)
+	??_ESmfPostProvider@@UAE@I@Z @ 125 NONAME ; SmfPostProvider::~SmfPostProvider(unsigned int)
+	??_ESmfProvider@@QAE@I@Z @ 126 NONAME ; SmfProvider::~SmfProvider(unsigned int)
+	??_ESmfTrackInfo@@QAE@I@Z @ 127 NONAME ; SmfTrackInfo::~SmfTrackInfo(unsigned int)
+	?GetServices@SmfClient@@QAEPAV?$QList@VSmfProvider@@@@ABVQString@@@Z @ 128 NONAME ; class QList<class SmfProvider> * SmfClient::GetServices(class QString const &)
+	?addComment@SmfPicture@@QAEXABVSmfComment@@@Z @ 129 NONAME ; void SmfPicture::addComment(class SmfComment const &)
+	?addTags@SmfPicture@@QAEXABVQStringList@@@Z @ 130 NONAME ; void SmfPicture::addTags(class QStringList const &)
+	?album@SmfTrackInfo@@QBE?AVSmfAlbum@@XZ @ 131 NONAME ; class SmfAlbum SmfTrackInfo::album(void) const
+	?applicationUrl@SmfProvider@@QAEXAAVQUrl@@@Z @ 132 NONAME ; void SmfProvider::applicationUrl(class QUrl &)
+	?applicationUrl@SmfProvider@@QBE?AVQUrl@@XZ @ 133 NONAME ; class QUrl SmfProvider::applicationUrl(void) const
+	?artists@SmfAlbum@@QBE?AVSmfArtists@@XZ @ 134 NONAME ; class SmfArtists SmfAlbum::artists(void) const
+	?artists@SmfEvent@@QBE?AVSmfArtists@@XZ @ 135 NONAME ; class SmfArtists SmfEvent::artists(void) const
+	?artists@SmfTrackInfo@@QBE?AVSmfArtists@@XZ @ 136 NONAME ; class SmfArtists SmfTrackInfo::artists(void) const
+	?city@SmfLocation@@QBE?AVQString@@XZ @ 137 NONAME ; class QString SmfLocation::city(void) const
+	?comments@SmfPicture@@QBE?AV?$QList@VSmfComment@@@@XZ @ 138 NONAME ; class QList<class SmfComment> SmfPicture::comments(void) const
+	?comments@SmfTrackInfo@@QBE?AV?$QList@VSmfComment@@@@XZ @ 139 NONAME ; class QList<class SmfComment> SmfTrackInfo::comments(void) const
+	?convert@SmfContact@@QBEXAAVQContact@QtMobility@@@Z @ 140 NONAME ; void SmfContact::convert(class QtMobility::QContact &) const
+	?country@SmfLocation@@QBE?AVQString@@XZ @ 141 NONAME ; class QString SmfLocation::country(void) const
+	?createParameterString@SmfPluginUtil@@QAE?AVQByteArray@@ABVQString@@W4Operation@QNetworkAccessManager@@ABV2@2W4SmfSignatureMethod@@ABV?$QMultiMap@VQByteArray@@V1@@@W4SmfParsingMode@@@Z @ 142 NONAME ; class QByteArray SmfPluginUtil::createParameterString(class QString const &, enum QNetworkAccessManager::Operation, class QByteArray const &, class QByteArray const &, enum SmfSignatureMethod, class QMultiMap<class QByteArray, class QByteArray> const &, enum SmfParsingMode)
+	?creationDate@SmfPlaylist@@QBE?AVQDateTime@@XZ @ 143 NONAME ; class QDateTime SmfPlaylist::creationDate(void) const
+	?customDataAvailable@SmfContactFetcher@@IAEXHPAVQByteArray@@@Z @ 144 NONAME ; void SmfContactFetcher::customDataAvailable(int, class QByteArray *)
+	?customDataAvailable@SmfGallery@@IAEXHPAVQByteArray@@@Z @ 145 NONAME ; void SmfGallery::customDataAvailable(int, class QByteArray *)
+	?customDataAvailable@SmfPostProvider@@IAEXHPAVQByteArray@@@Z @ 146 NONAME ; void SmfPostProvider::customDataAvailable(int, class QByteArray *)
+	?customRequest@SmfContactFetcher@@QAEXABHPAVQByteArray@@@Z @ 147 NONAME ; void SmfContactFetcher::customRequest(int const &, class QByteArray *)
+	?customRequest@SmfGallery@@QAEXABHPAVQByteArray@@@Z @ 148 NONAME ; void SmfGallery::customRequest(int const &, class QByteArray *)
+	?customRequest@SmfPostProvider@@QAEXABHPAVQByteArray@@@Z @ 149 NONAME ; void SmfPostProvider::customRequest(int const &, class QByteArray *)
+	?description@SmfGallery@@QAE?AVQString@@AAVSmfPicture@@@Z @ 150 NONAME ; class QString SmfGallery::description(class SmfPicture &)
+	?description@SmfPicture@@QBE?AVQString@@XZ @ 151 NONAME ; class QString SmfPicture::description(void) const
+	?description@SmfPost@@QBE?AVQString@@XZ @ 152 NONAME ; class QString SmfPost::description(void) const
+	?description@SmfProvider@@QAEXAAVQString@@@Z @ 153 NONAME ; void SmfProvider::description(class QString &)
+	?description@SmfProvider@@QBE?AVQString@@XZ @ 154 NONAME ; class QString SmfProvider::description(void) const
+	?duration@SmfEvent@@QBE?AVQTime@@XZ @ 155 NONAME ; class QTime SmfEvent::duration(void) const
+	?duration@SmfSubtitle@@QBENXZ @ 156 NONAME ; double SmfSubtitle::duration(void) const
+	?duration@SmfTrackInfo@@QBE?AVQTime@@XZ @ 157 NONAME ; class QTime SmfTrackInfo::duration(void) const
+	?eventDateTime@SmfEvent@@QBE?AVQDateTime@@XZ @ 158 NONAME ; class QDateTime SmfEvent::eventDateTime(void) const
+	?followers@SmfContactFetcher@@QAE_NHH@Z @ 159 NONAME ; bool SmfContactFetcher::followers(int, int)
+	?followersListAvailable@SmfContactFetcher@@IAEXPAV?$QList@VSmfContact@@@@W4SmfError@@USmfResultPage@@@Z @ 160 NONAME ; void SmfContactFetcher::followersListAvailable(class QList<class SmfContact> *, enum SmfError, struct SmfResultPage)
+	?frameRate@SmfSubtitle@@QBENXZ @ 161 NONAME ; double SmfSubtitle::frameRate(void) const
+	?friends@SmfContactFetcher@@QAE_NHH@Z @ 162 NONAME ; bool SmfContactFetcher::friends(int, int)
+	?friendsListAvailable@SmfContactFetcher@@IAEXPAV?$QList@VSmfContact@@@@W4SmfError@@USmfResultPage@@@Z @ 163 NONAME ; void SmfContactFetcher::friendsListAvailable(class QList<class SmfContact> *, enum SmfError, struct SmfResultPage)
+	?genre@SmfTrackInfo@@QBE?AVQString@@XZ @ 164 NONAME ; class QString SmfTrackInfo::genre(void) const
+	?geoPositionInfo@SmfLocation@@QBE?AVQGeoPositionInfo@QtMobility@@XZ @ 165 NONAME ; class QtMobility::QGeoPositionInfo SmfLocation::geoPositionInfo(void) const
+	?getAuthKeys@SmfPluginUtil@@QAEXAAV?$QMap@VQString@@V1@@@VQString@@1@Z @ 166 NONAME ; void SmfPluginUtil::getAuthKeys(class QMap<class QString, class QString> &, class QString, class QString)
+	?getInstance@SmfPluginUtil@@SAPAV1@XZ @ 167 NONAME ; class SmfPluginUtil * SmfPluginUtil::getInstance(void)
+	?getJsonHandle@SmfPluginUtil@@QAEPAVParser@QJson@@XZ @ 168 NONAME ; class QJson::Parser * SmfPluginUtil::getJsonHandle(void)
+	?getNonce@SmfPluginUtil@@QAEXAAVQString@@@Z @ 169 NONAME ; void SmfPluginUtil::getNonce(class QString &)
+	?getProvider@SmfContactFetcher@@QAEPAVSmfProvider@@XZ @ 170 NONAME ; class SmfProvider * SmfContactFetcher::getProvider(void)
+	?getProvider@SmfGallery@@QAEPAVSmfProvider@@XZ @ 171 NONAME ; class SmfProvider * SmfGallery::getProvider(void)
+	?getProvider@SmfPostProvider@@QBEPAVSmfProvider@@XZ @ 172 NONAME ; class SmfProvider * SmfPostProvider::getProvider(void) const
+	?getStaticMetaObject@SmfContactFetcher@@SAABUQMetaObject@@XZ @ 173 NONAME ; struct QMetaObject const & SmfContactFetcher::getStaticMetaObject(void)
+	?getStaticMetaObject@SmfGallery@@SAABUQMetaObject@@XZ @ 174 NONAME ; struct QMetaObject const & SmfGallery::getStaticMetaObject(void)
+	?getStaticMetaObject@SmfPostProvider@@SAABUQMetaObject@@XZ @ 175 NONAME ; struct QMetaObject const & SmfPostProvider::getStaticMetaObject(void)
+	?groupListAvailable@SmfContactFetcher@@IAEXPAV?$QList@VSmfGroup@@@@W4SmfError@@USmfResultPage@@@Z @ 176 NONAME ; void SmfContactFetcher::groupListAvailable(class QList<class SmfGroup> *, enum SmfError, struct SmfResultPage)
+	?groups@SmfContactFetcher@@QAE_NHH@Z @ 177 NONAME ; bool SmfContactFetcher::groups(int, int)
+	?id@SmfAlbum@@QBE?AVQString@@XZ @ 178 NONAME ; class QString SmfAlbum::id(void) const
+	?id@SmfComment@@QBE?AVQString@@XZ @ 179 NONAME ; class QString SmfComment::id(void) const
+	?id@SmfEvent@@QBE?AVQString@@XZ @ 180 NONAME ; class QString SmfEvent::id(void) const
+	?id@SmfGroup@@QBE?AVQString@@XZ @ 181 NONAME ; class QString SmfGroup::id(void) const
+	?id@SmfLocation@@QBE?AVQString@@XZ @ 182 NONAME ; class QString SmfLocation::id(void) const
+	?id@SmfLyrics@@QBE?AVQString@@XZ @ 183 NONAME ; class QString SmfLyrics::id(void) const
+	?id@SmfMusicProfile@@QBE?AVQString@@XZ @ 184 NONAME ; class QString SmfMusicProfile::id(void) const
+	?id@SmfPicture@@QBE?AVQString@@XZ @ 185 NONAME ; class QString SmfPicture::id(void) const
+	?id@SmfPlaylist@@QBE?AVQString@@XZ @ 186 NONAME ; class QString SmfPlaylist::id(void) const
+	?id@SmfPost@@QBE?AVQString@@XZ @ 187 NONAME ; class QString SmfPost::id(void) const
+	?id@SmfSubtitle@@QBE?AVQString@@XZ @ 188 NONAME ; class QString SmfSubtitle::id(void) const
+	?id@SmfTrackInfo@@QBE?AVQString@@XZ @ 189 NONAME ; class QString SmfTrackInfo::id(void) const
+	?image@SmfAlbum@@QBE?AVQImage@@XZ @ 190 NONAME ; class QImage SmfAlbum::image(void) const
+	?image@SmfArtists@@QBE?AVQImage@@XZ @ 191 NONAME ; class QImage SmfArtists::image(void) const
+	?image@SmfPost@@QBE?AVQImage@@XZ @ 192 NONAME ; class QImage SmfPost::image(void) const
+	?interestInfo@SmfMusicProfile@@QBE?AV?$QList@VSmfTrackInfo@@@@XZ @ 193 NONAME ; class QList<class SmfTrackInfo> SmfMusicProfile::interestInfo(void) const
+	?language@SmfLyrics@@QBE?AVQString@@XZ @ 194 NONAME ; class QString SmfLyrics::language(void) const
+	?language@SmfSubtitle@@QBE?AVQString@@XZ @ 195 NONAME ; class QString SmfSubtitle::language(void) const
+	?lyrics@SmfLyrics@@QBE?AVQByteArray@@XZ @ 196 NONAME ; class QByteArray SmfLyrics::lyrics(void) const
+	?maxCharsInPost@SmfPostProvider@@QBEHXZ @ 197 NONAME ; int SmfPostProvider::maxCharsInPost(void) const
+	?maxItems@SmfPostProvider@@QBEHXZ @ 198 NONAME ; int SmfPostProvider::maxItems(void) const
+	?maxRating@SmfMusicRating@@QBEHXZ @ 199 NONAME ; int SmfMusicRating::maxRating(void) const
+	?members@SmfGroup@@QBE?AV?$QList@VSmfContact@@@@XZ @ 200 NONAME ; class QList<class SmfContact> SmfGroup::members(void) const
+	?metaObject@SmfContactFetcher@@UBEPBUQMetaObject@@XZ @ 201 NONAME ; struct QMetaObject const * SmfContactFetcher::metaObject(void) const
+	?metaObject@SmfGallery@@UBEPBUQMetaObject@@XZ @ 202 NONAME ; struct QMetaObject const * SmfGallery::metaObject(void) const
+	?metaObject@SmfPostProvider@@UBEPBUQMetaObject@@XZ @ 203 NONAME ; struct QMetaObject const * SmfPostProvider::metaObject(void) const
+	?minRating@SmfMusicRating@@QBEHXZ @ 204 NONAME ; int SmfMusicRating::minRating(void) const
+	?musicFingerPrint@SmfMusicFingerPrint@@QBE?AVQByteArray@@XZ @ 205 NONAME ; class QByteArray SmfMusicFingerPrint::musicFingerPrint(void) const
+	?musicUsageInfo@SmfMusicProfile@@QBE?AV?$QList@VSmfTrackInfo@@@@XZ @ 206 NONAME ; class QList<class SmfTrackInfo> SmfMusicProfile::musicUsageInfo(void) const
+	?name@SmfAlbum@@QBE?AVQString@@XZ @ 207 NONAME ; class QString SmfAlbum::name(void) const
+	?name@SmfGroup@@QBE?AVQString@@XZ @ 208 NONAME ; class QString SmfGroup::name(void) const
+	?name@SmfLocation@@QBE?AVQString@@XZ @ 209 NONAME ; class QString SmfLocation::name(void) const
+	?names@SmfArtists@@QBE?AVQStringList@@XZ @ 210 NONAME ; class QStringList SmfArtists::names(void) const
+	?owner@SmfPicture@@QBE?AVQString@@XZ @ 211 NONAME ; class QString SmfPicture::owner(void) const
+	?picture@SmfPicture@@QBE?AVQImage@@XZ @ 212 NONAME ; class QImage SmfPicture::picture(void) const
+	?pictures@SmfGallery@@QAEXHH@Z @ 213 NONAME ; void SmfGallery::pictures(int, int)
+	?picturesAvailable@SmfGallery@@IAEXPAV?$QList@VSmfPicture@@@@W4SmfError@@USmfResultPage@@@Z @ 214 NONAME ; void SmfGallery::picturesAvailable(class QList<class SmfPicture> *, enum SmfError, struct SmfResultPage)
+	?playListTitle@SmfPlaylist@@QBE?AVQString@@XZ @ 215 NONAME ; class QString SmfPlaylist::playListTitle(void) const
+	?post@SmfPostProvider@@QAEXAAVSmfPost@@AAVSmfLocation@@@Z @ 216 NONAME ; void SmfPostProvider::post(class SmfPost &, class SmfLocation &)
+	?postAppearence@SmfPostProvider@@QAE_NW4SmfAppearenceInfo@@@Z @ 217 NONAME ; bool SmfPostProvider::postAppearence(enum SmfAppearenceInfo)
+	?postComment@SmfGallery@@QAEXVSmfPicture@@VSmfComment@@@Z @ 218 NONAME ; void SmfGallery::postComment(class SmfPicture, class SmfComment)
+	?postDirected@SmfPostProvider@@QAEXAAVSmfPost@@AAVSmfContact@@PAVSmfLocation@@@Z @ 219 NONAME ; void SmfPostProvider::postDirected(class SmfPost &, class SmfContact &, class SmfLocation *)
+	?postFinished@SmfPostProvider@@IAEX_N@Z @ 220 NONAME ; void SmfPostProvider::postFinished(bool)
+	?postedDate@SmfPicture@@QBE?AVQDateTime@@XZ @ 221 NONAME ; class QDateTime SmfPicture::postedDate(void) const
+	?posts@SmfPostProvider@@QAEXPAVSmfContact@@HH@Z @ 222 NONAME ; void SmfPostProvider::posts(class SmfContact *, int, int)
+	?postsAvailable@SmfPostProvider@@IAEXPAV?$QList@VSmfPost@@@@W4SmfError@@USmfResultPage@@@Z @ 223 NONAME ; void SmfPostProvider::postsAvailable(class QList<class SmfPost> *, enum SmfError, struct SmfResultPage)
+	?qt_metacall@SmfContactFetcher@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 224 NONAME ; int SmfContactFetcher::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@SmfGallery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 225 NONAME ; int SmfGallery::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@SmfPostProvider@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 226 NONAME ; int SmfPostProvider::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacast@SmfContactFetcher@@UAEPAXPBD@Z @ 227 NONAME ; void * SmfContactFetcher::qt_metacast(char const *)
+	?qt_metacast@SmfGallery@@UAEPAXPBD@Z @ 228 NONAME ; void * SmfGallery::qt_metacast(char const *)
+	?qt_metacast@SmfPostProvider@@UAEPAXPBD@Z @ 229 NONAME ; void * SmfPostProvider::qt_metacast(char const *)
+	?rating@SmfMusicRating@@QBEHXZ @ 230 NONAME ; int SmfMusicRating::rating(void) const
+	?rating@SmfTrackInfo@@QBE?AVSmfMusicRating@@XZ @ 231 NONAME ; class SmfMusicRating SmfTrackInfo::rating(void) const
+	?releaseYear@SmfLyrics@@QBE?AVQDateTime@@XZ @ 232 NONAME ; class QDateTime SmfLyrics::releaseYear(void) const
+	?releaseYear@SmfSubtitle@@QBE?AVQDateTime@@XZ @ 233 NONAME ; class QDateTime SmfSubtitle::releaseYear(void) const
+	?search@SmfContactFetcher@@QAEXPAVSmfContact@@HH@Z @ 234 NONAME ; void SmfContactFetcher::search(class SmfContact *, int, int)
+	?searchContactFinished@SmfContactFetcher@@IAEXPAV?$QList@VSmfContact@@@@W4SmfError@@USmfResultPage@@@Z @ 235 NONAME ; void SmfContactFetcher::searchContactFinished(class QList<class SmfContact> *, enum SmfError, struct SmfResultPage)
+	?searchInGroup@SmfContactFetcher@@QAE_NVSmfGroup@@HH@Z @ 236 NONAME ; bool SmfContactFetcher::searchInGroup(class SmfGroup, int, int)
+	?searchInGroupFinished@SmfContactFetcher@@IAEXPAV?$QList@VSmfContact@@@@W4SmfError@@USmfResultPage@@@Z @ 237 NONAME ; void SmfContactFetcher::searchInGroupFinished(class QList<class SmfContact> *, enum SmfError, struct SmfResultPage)
+	?searchNear@SmfContactFetcher@@QAE_NPAVSmfLocation@@W4SmfLocationSearchBoundary@@HH@Z @ 238 NONAME ; bool SmfContactFetcher::searchNear(class SmfLocation *, enum SmfLocationSearchBoundary, int, int)
+	?searchNearFinished@SmfContactFetcher@@IAEXPAV?$QList@VSmfContact@@@@W4SmfError@@USmfResultPage@@@Z @ 239 NONAME ; void SmfContactFetcher::searchNearFinished(class QList<class SmfContact> *, enum SmfError, struct SmfResultPage)
+	?serviceIcon@SmfProvider@@QAEXAAVQImage@@@Z @ 240 NONAME ; void SmfProvider::serviceIcon(class QImage &)
+	?serviceIcon@SmfProvider@@QBE?AVQImage@@XZ @ 241 NONAME ; class QImage SmfProvider::serviceIcon(void) const
+	?serviceName@SmfProvider@@QAEXAAVQString@@@Z @ 242 NONAME ; void SmfProvider::serviceName(class QString &)
+	?serviceName@SmfProvider@@QBE?AVQString@@XZ @ 243 NONAME ; class QString SmfProvider::serviceName(void) const
+	?serviceTypes@SmfProvider@@QAEXAAVQStringList@@@Z @ 244 NONAME ; void SmfProvider::serviceTypes(class QStringList &)
+	?serviceTypes@SmfProvider@@QBE?AV?$QList@VQString@@@@XZ @ 245 NONAME ; class QList<class QString> SmfProvider::serviceTypes(void) const
+	?serviceUrl@SmfProvider@@QAEXAAVQUrl@@@Z @ 246 NONAME ; void SmfProvider::serviceUrl(class QUrl &)
+	?serviceUrl@SmfProvider@@QBE?AVQUrl@@XZ @ 247 NONAME ; class QUrl SmfProvider::serviceUrl(void) const
+	?setAlbum@SmfTrackInfo@@QAEXABVSmfAlbum@@@Z @ 248 NONAME ; void SmfTrackInfo::setAlbum(class SmfAlbum const &)
+	?setArtists@SmfAlbum@@QAEXABVSmfArtists@@@Z @ 249 NONAME ; void SmfAlbum::setArtists(class SmfArtists const &)
+	?setArtists@SmfEvent@@QAEXABVSmfArtists@@@Z @ 250 NONAME ; void SmfEvent::setArtists(class SmfArtists const &)
+	?setArtists@SmfTrackInfo@@QAEXABVSmfArtists@@@Z @ 251 NONAME ; void SmfTrackInfo::setArtists(class SmfArtists const &)
+	?setCity@SmfLocation@@QAEXABVQString@@@Z @ 252 NONAME ; void SmfLocation::setCity(class QString const &)
+	?setComment@SmfTrackInfo@@QAEXABV?$QList@VSmfComment@@@@@Z @ 253 NONAME ; void SmfTrackInfo::setComment(class QList<class SmfComment> const &)
+	?setCountry@SmfLocation@@QAEXABVQString@@@Z @ 254 NONAME ; void SmfLocation::setCountry(class QString const &)
+	?setCreationDate@SmfPlaylist@@QAEXABVQDateTime@@@Z @ 255 NONAME ; void SmfPlaylist::setCreationDate(class QDateTime const &)
+	?setDescription@SmfPicture@@QAEXABVQString@@@Z @ 256 NONAME ; void SmfPicture::setDescription(class QString const &)
+	?setDescription@SmfPost@@QAEXABVQString@@@Z @ 257 NONAME ; void SmfPost::setDescription(class QString const &)
+	?setDuration@SmfEvent@@QAEXABVQTime@@@Z @ 258 NONAME ; void SmfEvent::setDuration(class QTime const &)
+	?setDuration@SmfSubtitle@@QAEXABN@Z @ 259 NONAME ; void SmfSubtitle::setDuration(double const &)
+	?setDuration@SmfTrackInfo@@QAEXABVQTime@@@Z @ 260 NONAME ; void SmfTrackInfo::setDuration(class QTime const &)
+	?setEventDateTime@SmfEvent@@QAEXABVQDateTime@@@Z @ 261 NONAME ; void SmfEvent::setEventDateTime(class QDateTime const &)
+	?setFrameRate@SmfSubtitle@@QAEXABN@Z @ 262 NONAME ; void SmfSubtitle::setFrameRate(double const &)
+	?setGenre@SmfTrackInfo@@QAEXABVQString@@@Z @ 263 NONAME ; void SmfTrackInfo::setGenre(class QString const &)
+	?setGeoPositionInfo@SmfLocation@@QAEXABVQGeoPositionInfo@QtMobility@@@Z @ 264 NONAME ; void SmfLocation::setGeoPositionInfo(class QtMobility::QGeoPositionInfo const &)
+	?setId@SmfAlbum@@QAEXABVQString@@@Z @ 265 NONAME ; void SmfAlbum::setId(class QString const &)
+	?setId@SmfComment@@QAEXABVQString@@@Z @ 266 NONAME ; void SmfComment::setId(class QString const &)
+	?setId@SmfEvent@@QAEXABVQString@@@Z @ 267 NONAME ; void SmfEvent::setId(class QString const &)
+	?setId@SmfGroup@@QAEXAAVQString@@@Z @ 268 NONAME ; void SmfGroup::setId(class QString &)
+	?setId@SmfLocation@@QAEXABVQString@@@Z @ 269 NONAME ; void SmfLocation::setId(class QString const &)
+	?setId@SmfLyrics@@QAEXABVQString@@@Z @ 270 NONAME ; void SmfLyrics::setId(class QString const &)
+	?setId@SmfMusicProfile@@QAEXABVQString@@@Z @ 271 NONAME ; void SmfMusicProfile::setId(class QString const &)
+	?setId@SmfPicture@@QAEXABVQString@@@Z @ 272 NONAME ; void SmfPicture::setId(class QString const &)
+	?setId@SmfPlaylist@@QAEXABVQString@@@Z @ 273 NONAME ; void SmfPlaylist::setId(class QString const &)
+	?setId@SmfPost@@QAEXVQString@@@Z @ 274 NONAME ; void SmfPost::setId(class QString)
+	?setId@SmfSubtitle@@QAEXABVQString@@@Z @ 275 NONAME ; void SmfSubtitle::setId(class QString const &)
+	?setId@SmfTrackInfo@@QAEXABVQString@@@Z @ 276 NONAME ; void SmfTrackInfo::setId(class QString const &)
+	?setImage@SmfAlbum@@QAEXABVQImage@@@Z @ 277 NONAME ; void SmfAlbum::setImage(class QImage const &)
+	?setImage@SmfArtists@@QAEXABVQImage@@@Z @ 278 NONAME ; void SmfArtists::setImage(class QImage const &)
+	?setImage@SmfPost@@QAEXABVQImage@@@Z @ 279 NONAME ; void SmfPost::setImage(class QImage const &)
+	?setInterestInfo@SmfMusicProfile@@QAEXABV?$QList@VSmfTrackInfo@@@@@Z @ 280 NONAME ; void SmfMusicProfile::setInterestInfo(class QList<class SmfTrackInfo> const &)
+	?setLanguage@SmfLyrics@@QAEXABVQString@@@Z @ 281 NONAME ; void SmfLyrics::setLanguage(class QString const &)
+	?setLanguage@SmfSubtitle@@QAEXABVQString@@@Z @ 282 NONAME ; void SmfSubtitle::setLanguage(class QString const &)
+	?setLyrics@SmfLyrics@@QAEXABVQByteArray@@@Z @ 283 NONAME ; void SmfLyrics::setLyrics(class QByteArray const &)
+	?setMaxRating@SmfMusicRating@@QAEXABH@Z @ 284 NONAME ; void SmfMusicRating::setMaxRating(int const &)
+	?setMembers@SmfGroup@@QAEXPAV?$QList@VSmfContact@@@@@Z @ 285 NONAME ; void SmfGroup::setMembers(class QList<class SmfContact> *)
+	?setMinRating@SmfMusicRating@@QAEXABH@Z @ 286 NONAME ; void SmfMusicRating::setMinRating(int const &)
+	?setMusicFingerPrint@SmfMusicFingerPrint@@QAEXABVQByteArray@@@Z @ 287 NONAME ; void SmfMusicFingerPrint::setMusicFingerPrint(class QByteArray const &)
+	?setMusicUsageInfo@SmfMusicProfile@@QAEXABV?$QList@VSmfTrackInfo@@@@@Z @ 288 NONAME ; void SmfMusicProfile::setMusicUsageInfo(class QList<class SmfTrackInfo> const &)
+	?setName@SmfAlbum@@QAEXABVQString@@@Z @ 289 NONAME ; void SmfAlbum::setName(class QString const &)
+	?setName@SmfGroup@@QAEXAAVQString@@@Z @ 290 NONAME ; void SmfGroup::setName(class QString &)
+	?setName@SmfLocation@@QAEXABVQString@@@Z @ 291 NONAME ; void SmfLocation::setName(class QString const &)
+	?setNames@SmfArtists@@QAEXABVQStringList@@@Z @ 292 NONAME ; void SmfArtists::setNames(class QStringList const &)
+	?setOwner@SmfPicture@@QAEXABVQString@@@Z @ 293 NONAME ; void SmfPicture::setOwner(class QString const &)
+	?setPicture@SmfPicture@@QAEXABVQImage@@@Z @ 294 NONAME ; void SmfPicture::setPicture(class QImage const &)
+	?setPlayListTitle@SmfPlaylist@@QAEXABVQString@@@Z @ 295 NONAME ; void SmfPlaylist::setPlayListTitle(class QString const &)
+	?setPostedDate@SmfPicture@@QAEXABVQDateTime@@@Z @ 296 NONAME ; void SmfPicture::setPostedDate(class QDateTime const &)
+	?setRating@SmfMusicRating@@QAEXABH@Z @ 297 NONAME ; void SmfMusicRating::setRating(int const &)
+	?setRating@SmfTrackInfo@@QAEXABVSmfMusicRating@@@Z @ 298 NONAME ; void SmfTrackInfo::setRating(class SmfMusicRating const &)
+	?setReleaseYear@SmfLyrics@@QAEXABVQDateTime@@@Z @ 299 NONAME ; void SmfLyrics::setReleaseYear(class QDateTime const &)
+	?setReleaseYear@SmfSubtitle@@QAEXABVQDateTime@@@Z @ 300 NONAME ; void SmfSubtitle::setReleaseYear(class QDateTime const &)
+	?setStreet@SmfLocation@@QAEXABVQString@@@Z @ 301 NONAME ; void SmfLocation::setStreet(class QString const &)
+	?setSubtitle@SmfSubtitle@@QAEXABVQByteArray@@@Z @ 302 NONAME ; void SmfSubtitle::setSubtitle(class QByteArray const &)
+	?setTags@SmfTrackInfo@@QAEXABVQStringList@@@Z @ 303 NONAME ; void SmfTrackInfo::setTags(class QStringList const &)
+	?setText@SmfComment@@QAEXABVQString@@@Z @ 304 NONAME ; void SmfComment::setText(class QString const &)
+	?setTicketUrl@SmfEvent@@QAEXABVQUrl@@@Z @ 305 NONAME ; void SmfEvent::setTicketUrl(class QUrl const &)
+	?setTimeStamp@SmfComment@@QAEXABVQDateTime@@@Z @ 306 NONAME ; void SmfComment::setTimeStamp(class QDateTime const &)
+	?setTitle@SmfEvent@@QAEXABVQString@@@Z @ 307 NONAME ; void SmfEvent::setTitle(class QString const &)
+	?setTitle@SmfPicture@@QAEXABVQString@@@Z @ 308 NONAME ; void SmfPicture::setTitle(class QString const &)
+	?setTitle@SmfPost@@QAEXABVQString@@@Z @ 309 NONAME ; void SmfPost::setTitle(class QString const &)
+	?setTitle@SmfTrackInfo@@QAEXABVQString@@@Z @ 310 NONAME ; void SmfTrackInfo::setTitle(class QString const &)
+	?setTrackList@SmfPlaylist@@QAEXABV?$QList@VSmfTrackInfo@@@@@Z @ 311 NONAME ; void SmfPlaylist::setTrackList(class QList<class SmfTrackInfo> const &)
+	?setUrl@SmfArtists@@QAEXABVQUrl@@@Z @ 312 NONAME ; void SmfArtists::setUrl(class QUrl const &)
+	?setUrl@SmfLocation@@QAEXABVQUrl@@@Z @ 313 NONAME ; void SmfLocation::setUrl(class QUrl const &)
+	?setUrl@SmfPicture@@QAEXABVQUrl@@@Z @ 314 NONAME ; void SmfPicture::setUrl(class QUrl const &)
+	?setUrl@SmfPost@@QAEXAAVQUrl@@@Z @ 315 NONAME ; void SmfPost::setUrl(class QUrl &)
+	?setUserEvents@SmfMusicProfile@@QAEXABV?$QList@VSmfEvent@@@@@Z @ 316 NONAME ; void SmfMusicProfile::setUserEvents(class QList<class SmfEvent> const &)
+	?setValue@SmfContact@@QAEXABVQString@@AAVQVariant@@@Z @ 317 NONAME ; void SmfContact::setValue(class QString const &, class QVariant &)
+	?setVenue@SmfEvent@@QAEXABVSmfLocation@@@Z @ 318 NONAME ; void SmfEvent::setVenue(class SmfLocation const &)
+	?setVisibility@SmfPicture@@QAEXABW4SmfPictureVisibility@@@Z @ 319 NONAME ; void SmfPicture::setVisibility(enum SmfPictureVisibility const &)
+	?setYear@SmfTrackInfo@@QAEXABVQDateTime@@@Z @ 320 NONAME ; void SmfTrackInfo::setYear(class QDateTime const &)
+	?setZipCode@SmfLocation@@QAEXABVQString@@@Z @ 321 NONAME ; void SmfLocation::setZipCode(class QString const &)
+	?sharePost@SmfPostProvider@@QAEXAAVSmfPost@@AAVSmfContact@@_N@Z @ 322 NONAME ; void SmfPostProvider::sharePost(class SmfPost &, class SmfContact &, bool)
+	?street@SmfLocation@@QBE?AVQString@@XZ @ 323 NONAME ; class QString SmfLocation::street(void) const
+	?subTypes@SmfContact@@QBE?AVQStringList@@XZ @ 324 NONAME ; class QStringList SmfContact::subTypes(void) const
+	?subtitle@SmfSubtitle@@QBE?AVQByteArray@@XZ @ 325 NONAME ; class QByteArray SmfSubtitle::subtitle(void) const
+	?supportedFormats@SmfPostProvider@@QBE?AV?$QVector@VQTextFormat@@@@XZ @ 326 NONAME ; class QVector<class QTextFormat> SmfPostProvider::supportedFormats(void) const
+	?supportsAppearence@SmfPostProvider@@QBE_NXZ @ 327 NONAME ; bool SmfPostProvider::supportsAppearence(void) const
+	?tags@SmfPicture@@QBE?AVQStringList@@XZ @ 328 NONAME ; class QStringList SmfPicture::tags(void) const
+	?tags@SmfTrackInfo@@QBE?AVQStringList@@XZ @ 329 NONAME ; class QStringList SmfTrackInfo::tags(void) const
+	?text@SmfComment@@QBE?AVQString@@XZ @ 330 NONAME ; class QString SmfComment::text(void) const
+	?ticketUrl@SmfEvent@@QBE?AVQUrl@@XZ @ 331 NONAME ; class QUrl SmfEvent::ticketUrl(void) const
+	?timeStamp@SmfComment@@QBE?AVQDateTime@@XZ @ 332 NONAME ; class QDateTime SmfComment::timeStamp(void) const
+	?title@SmfEvent@@QBE?AVQString@@XZ @ 333 NONAME ; class QString SmfEvent::title(void) const
+	?title@SmfPicture@@QBE?AVQString@@XZ @ 334 NONAME ; class QString SmfPicture::title(void) const
+	?title@SmfPost@@QBE?AVQString@@XZ @ 335 NONAME ; class QString SmfPost::title(void) const
+	?title@SmfTrackInfo@@QBE?AVQString@@XZ @ 336 NONAME ; class QString SmfTrackInfo::title(void) const
+	?tr@SmfContactFetcher@@SA?AVQString@@PBD0@Z @ 337 NONAME ; class QString SmfContactFetcher::tr(char const *, char const *)
+	?tr@SmfContactFetcher@@SA?AVQString@@PBD0H@Z @ 338 NONAME ; class QString SmfContactFetcher::tr(char const *, char const *, int)
+	?tr@SmfGallery@@SA?AVQString@@PBD0@Z @ 339 NONAME ; class QString SmfGallery::tr(char const *, char const *)
+	?tr@SmfGallery@@SA?AVQString@@PBD0H@Z @ 340 NONAME ; class QString SmfGallery::tr(char const *, char const *, int)
+	?tr@SmfPostProvider@@SA?AVQString@@PBD0@Z @ 341 NONAME ; class QString SmfPostProvider::tr(char const *, char const *)
+	?tr@SmfPostProvider@@SA?AVQString@@PBD0H@Z @ 342 NONAME ; class QString SmfPostProvider::tr(char const *, char const *, int)
+	?trUtf8@SmfContactFetcher@@SA?AVQString@@PBD0@Z @ 343 NONAME ; class QString SmfContactFetcher::trUtf8(char const *, char const *)
+	?trUtf8@SmfContactFetcher@@SA?AVQString@@PBD0H@Z @ 344 NONAME ; class QString SmfContactFetcher::trUtf8(char const *, char const *, int)
+	?trUtf8@SmfGallery@@SA?AVQString@@PBD0@Z @ 345 NONAME ; class QString SmfGallery::trUtf8(char const *, char const *)
+	?trUtf8@SmfGallery@@SA?AVQString@@PBD0H@Z @ 346 NONAME ; class QString SmfGallery::trUtf8(char const *, char const *, int)
+	?trUtf8@SmfPostProvider@@SA?AVQString@@PBD0@Z @ 347 NONAME ; class QString SmfPostProvider::trUtf8(char const *, char const *)
+	?trUtf8@SmfPostProvider@@SA?AVQString@@PBD0H@Z @ 348 NONAME ; class QString SmfPostProvider::trUtf8(char const *, char const *, int)
+	?trackList@SmfPlaylist@@QBE?AV?$QList@VSmfTrackInfo@@@@XZ @ 349 NONAME ; class QList<class SmfTrackInfo> SmfPlaylist::trackList(void) const
+	?updatePost@SmfPostProvider@@QAEXAAVSmfPost@@@Z @ 350 NONAME ; void SmfPostProvider::updatePost(class SmfPost &)
+	?upload@SmfGallery@@QAEXPAV?$QList@VSmfPicture@@@@@Z @ 351 NONAME ; void SmfGallery::upload(class QList<class SmfPicture> *)
+	?upload@SmfGallery@@QAEXPAVSmfPicture@@@Z @ 352 NONAME ; void SmfGallery::upload(class SmfPicture *)
+	?uploadFinished@SmfGallery@@IAEXV?$QList@_N@@@Z @ 353 NONAME ; void SmfGallery::uploadFinished(class QList<bool>)
+	?url@SmfArtists@@QBE?AVQUrl@@XZ @ 354 NONAME ; class QUrl SmfArtists::url(void) const
+	?url@SmfLocation@@QBE?AVQUrl@@XZ @ 355 NONAME ; class QUrl SmfLocation::url(void) const
+	?url@SmfPicture@@QBE?AVQUrl@@XZ @ 356 NONAME ; class QUrl SmfPicture::url(void) const
+	?url@SmfPost@@QBE?AVQUrl@@XZ @ 357 NONAME ; class QUrl SmfPost::url(void) const
+	?userEvents@SmfMusicProfile@@QBE?AV?$QList@VSmfEvent@@@@XZ @ 358 NONAME ; class QList<class SmfEvent> SmfMusicProfile::userEvents(void) const
+	?value@SmfContact@@QBE?AVQVariant@@ABVQString@@@Z @ 359 NONAME ; class QVariant SmfContact::value(class QString const &) const
+	?venue@SmfEvent@@QBE?AVSmfLocation@@XZ @ 360 NONAME ; class SmfLocation SmfEvent::venue(void) const
+	?visibility@SmfPicture@@QBE?AW4SmfPictureVisibility@@XZ @ 361 NONAME ; enum SmfPictureVisibility SmfPicture::visibility(void) const
+	?writeLog@SmfClient@@QBEXVQString@@@Z @ 362 NONAME ; void SmfClient::writeLog(class QString) const
+	?writeLog@SmfContact@@QBEXVQString@@@Z @ 363 NONAME ; void SmfContact::writeLog(class QString) const
+	?year@SmfTrackInfo@@QBE?AVQDateTime@@XZ @ 364 NONAME ; class QDateTime SmfTrackInfo::year(void) const
+	?zipCode@SmfLocation@@QBE?AVQString@@XZ @ 365 NONAME ; class QString SmfLocation::zipCode(void) const
+	?staticMetaObject@SmfGallery@@2UQMetaObject@@B @ 366 NONAME ; struct QMetaObject const SmfGallery::staticMetaObject
+	?staticMetaObject@SmfPostProvider@@2UQMetaObject@@B @ 367 NONAME ; struct QMetaObject const SmfPostProvider::staticMetaObject
+	?m_myInstance@SmfPluginUtil@@0PAV1@A @ 368 NONAME ; class SmfPluginUtil * SmfPluginUtil::m_myInstance
+	?staticMetaObject@SmfContactFetcher@@2UQMetaObject@@B @ 369 NONAME ; struct QMetaObject const SmfContactFetcher::staticMetaObject
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/eabi/smfclientu.def	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,426 @@
+EXPORTS
+	_ZN10SmfArtists6setUrlERK4QUrl @ 1 NONAME
+	_ZN10SmfArtists8setImageERK6QImage @ 2 NONAME
+	_ZN10SmfArtists8setNamesERK11QStringList @ 3 NONAME
+	_ZN10SmfArtistsC1ERKS_ @ 4 NONAME
+	_ZN10SmfArtistsC1Ev @ 5 NONAME
+	_ZN10SmfArtistsC2ERKS_ @ 6 NONAME
+	_ZN10SmfArtistsC2Ev @ 7 NONAME
+	_ZN10SmfArtistsD1Ev @ 8 NONAME
+	_ZN10SmfArtistsD2Ev @ 9 NONAME
+	_ZN10SmfArtistsaSERKS_ @ 10 NONAME
+	_ZN10SmfComment12setTimeStampERK9QDateTime @ 11 NONAME
+	_ZN10SmfComment5setIdERK7QString @ 12 NONAME
+	_ZN10SmfComment7setTextERK7QString @ 13 NONAME
+	_ZN10SmfCommentC1ERKS_ @ 14 NONAME
+	_ZN10SmfCommentC1Ev @ 15 NONAME
+	_ZN10SmfCommentC2ERKS_ @ 16 NONAME
+	_ZN10SmfCommentC2Ev @ 17 NONAME
+	_ZN10SmfCommentD1Ev @ 18 NONAME
+	_ZN10SmfCommentD2Ev @ 19 NONAME
+	_ZN10SmfCommentaSERKS_ @ 20 NONAME
+	_ZN10SmfContact8setValueERK7QStringR8QVariant @ 21 NONAME
+	_ZN10SmfContactC1EP7QObject @ 22 NONAME
+	_ZN10SmfContactC1ERKS_ @ 23 NONAME
+	_ZN10SmfContactC2EP7QObject @ 24 NONAME
+	_ZN10SmfContactC2ERKS_ @ 25 NONAME
+	_ZN10SmfContactD1Ev @ 26 NONAME
+	_ZN10SmfContactD2Ev @ 27 NONAME
+	_ZN10SmfGallery11descriptionER10SmfPicture @ 28 NONAME
+	_ZN10SmfGallery11getProviderEv @ 29 NONAME
+	_ZN10SmfGallery11postCommentE10SmfPicture10SmfComment @ 30 NONAME
+	_ZN10SmfGallery11qt_metacallEN11QMetaObject4CallEiPPv @ 31 NONAME
+	_ZN10SmfGallery11qt_metacastEPKc @ 32 NONAME
+	_ZN10SmfGallery14uploadFinishedE5QListIbE @ 33 NONAME
+	_ZN10SmfGallery16staticMetaObjectE @ 34 NONAME DATA 16
+	_ZN10SmfGallery17picturesAvailableEP5QListI10SmfPictureE8SmfError13SmfResultPage @ 35 NONAME
+	_ZN10SmfGallery19customDataAvailableEiP10QByteArray @ 36 NONAME
+	_ZN10SmfGallery19getStaticMetaObjectEv @ 37 NONAME
+	_ZN10SmfGallery6uploadEP10SmfPicture @ 38 NONAME
+	_ZN10SmfGallery6uploadEP5QListI10SmfPictureE @ 39 NONAME
+	_ZN10SmfGallery8picturesEii @ 40 NONAME
+	_ZN10SmfGalleryC1EP11SmfProvider @ 41 NONAME
+	_ZN10SmfGalleryC2EP11SmfProvider @ 42 NONAME
+	_ZN10SmfGalleryD0Ev @ 43 NONAME
+	_ZN10SmfGalleryD1Ev @ 44 NONAME
+	_ZN10SmfGalleryD2Ev @ 45 NONAME
+	_ZN10SmfPicture10addCommentERK10SmfComment @ 46 NONAME
+	_ZN10SmfPicture10setPictureERK6QImage @ 47 NONAME
+	_ZN10SmfPicture13setPostedDateERK9QDateTime @ 48 NONAME
+	_ZN10SmfPicture13setVisibilityERK20SmfPictureVisibility @ 49 NONAME
+	_ZN10SmfPicture14setDescriptionERK7QString @ 50 NONAME
+	_ZN10SmfPicture5setIdERK7QString @ 51 NONAME
+	_ZN10SmfPicture6setUrlERK4QUrl @ 52 NONAME
+	_ZN10SmfPicture7addTagsERK11QStringList @ 53 NONAME
+	_ZN10SmfPicture8setOwnerERK7QString @ 54 NONAME
+	_ZN10SmfPicture8setTitleERK7QString @ 55 NONAME
+	_ZN10SmfPictureC1ERK6QImage @ 56 NONAME
+	_ZN10SmfPictureC1ERKS_ @ 57 NONAME
+	_ZN10SmfPictureC1Ev @ 58 NONAME
+	_ZN10SmfPictureC2ERK6QImage @ 59 NONAME
+	_ZN10SmfPictureC2ERKS_ @ 60 NONAME
+	_ZN10SmfPictureC2Ev @ 61 NONAME
+	_ZN10SmfPictureD1Ev @ 62 NONAME
+	_ZN10SmfPictureD2Ev @ 63 NONAME
+	_ZN10SmfPictureaSERKS_ @ 64 NONAME
+	_ZN11SmfLocation10setCountryERK7QString @ 65 NONAME
+	_ZN11SmfLocation10setZipCodeERK7QString @ 66 NONAME
+	_ZN11SmfLocation18setGeoPositionInfoERKN10QtMobility16QGeoPositionInfoE @ 67 NONAME
+	_ZN11SmfLocation5setIdERK7QString @ 68 NONAME
+	_ZN11SmfLocation6setUrlERK4QUrl @ 69 NONAME
+	_ZN11SmfLocation7setCityERK7QString @ 70 NONAME
+	_ZN11SmfLocation7setNameERK7QString @ 71 NONAME
+	_ZN11SmfLocation9setStreetERK7QString @ 72 NONAME
+	_ZN11SmfLocationC1ERKS_ @ 73 NONAME
+	_ZN11SmfLocationC1Ev @ 74 NONAME
+	_ZN11SmfLocationC2ERKS_ @ 75 NONAME
+	_ZN11SmfLocationC2Ev @ 76 NONAME
+	_ZN11SmfLocationD1Ev @ 77 NONAME
+	_ZN11SmfLocationD2Ev @ 78 NONAME
+	_ZN11SmfLocationaSERKS_ @ 79 NONAME
+	_ZN11SmfPlaylist12setTrackListERK5QListI12SmfTrackInfoE @ 80 NONAME
+	_ZN11SmfPlaylist15setCreationDateERK9QDateTime @ 81 NONAME
+	_ZN11SmfPlaylist16setPlayListTitleERK7QString @ 82 NONAME
+	_ZN11SmfPlaylist5setIdERK7QString @ 83 NONAME
+	_ZN11SmfPlaylistC1ERKS_ @ 84 NONAME
+	_ZN11SmfPlaylistC1Ev @ 85 NONAME
+	_ZN11SmfPlaylistC2ERKS_ @ 86 NONAME
+	_ZN11SmfPlaylistC2Ev @ 87 NONAME
+	_ZN11SmfPlaylistD1Ev @ 88 NONAME
+	_ZN11SmfPlaylistD2Ev @ 89 NONAME
+	_ZN11SmfPlaylistaSERKS_ @ 90 NONAME
+	_ZN11SmfProvider10serviceUrlER4QUrl @ 91 NONAME
+	_ZN11SmfProvider11descriptionER7QString @ 92 NONAME
+	_ZN11SmfProvider11serviceIconER6QImage @ 93 NONAME
+	_ZN11SmfProvider11serviceNameER7QString @ 94 NONAME
+	_ZN11SmfProvider12serviceTypesER11QStringList @ 95 NONAME
+	_ZN11SmfProvider14applicationUrlER4QUrl @ 96 NONAME
+	_ZN11SmfProviderC1EP7QObject @ 97 NONAME
+	_ZN11SmfProviderC2EP7QObject @ 98 NONAME
+	_ZN11SmfProviderD1Ev @ 99 NONAME
+	_ZN11SmfProviderD2Ev @ 100 NONAME
+	_ZN11SmfSubtitle11setDurationERKd @ 101 NONAME
+	_ZN11SmfSubtitle11setLanguageERK7QString @ 102 NONAME
+	_ZN11SmfSubtitle11setSubtitleERK10QByteArray @ 103 NONAME
+	_ZN11SmfSubtitle12setFrameRateERKd @ 104 NONAME
+	_ZN11SmfSubtitle14setReleaseYearERK9QDateTime @ 105 NONAME
+	_ZN11SmfSubtitle5setIdERK7QString @ 106 NONAME
+	_ZN11SmfSubtitleC1ERKS_ @ 107 NONAME
+	_ZN11SmfSubtitleC1Ev @ 108 NONAME
+	_ZN11SmfSubtitleC2ERKS_ @ 109 NONAME
+	_ZN11SmfSubtitleC2Ev @ 110 NONAME
+	_ZN11SmfSubtitleD1Ev @ 111 NONAME
+	_ZN11SmfSubtitleD2Ev @ 112 NONAME
+	_ZN11SmfSubtitleaSERKS_ @ 113 NONAME
+	_ZN12SmfTrackInfo10setArtistsERK10SmfArtists @ 114 NONAME
+	_ZN12SmfTrackInfo10setCommentERK5QListI10SmfCommentE @ 115 NONAME
+	_ZN12SmfTrackInfo11setDurationERK5QTime @ 116 NONAME
+	_ZN12SmfTrackInfo5setIdERK7QString @ 117 NONAME
+	_ZN12SmfTrackInfo7setTagsERK11QStringList @ 118 NONAME
+	_ZN12SmfTrackInfo7setYearERK9QDateTime @ 119 NONAME
+	_ZN12SmfTrackInfo8setAlbumERK8SmfAlbum @ 120 NONAME
+	_ZN12SmfTrackInfo8setGenreERK7QString @ 121 NONAME
+	_ZN12SmfTrackInfo8setTitleERK7QString @ 122 NONAME
+	_ZN12SmfTrackInfo9setRatingERK14SmfMusicRating @ 123 NONAME
+	_ZN12SmfTrackInfoC1ERKS_ @ 124 NONAME
+	_ZN12SmfTrackInfoC1Ev @ 125 NONAME
+	_ZN12SmfTrackInfoC2ERKS_ @ 126 NONAME
+	_ZN12SmfTrackInfoC2Ev @ 127 NONAME
+	_ZN12SmfTrackInfoD1Ev @ 128 NONAME
+	_ZN12SmfTrackInfoD2Ev @ 129 NONAME
+	_ZN12SmfTrackInfoaSERKS_ @ 130 NONAME
+	_ZN14SmfMusicRating12setMaxRatingERKi @ 131 NONAME
+	_ZN14SmfMusicRating12setMinRatingERKi @ 132 NONAME
+	_ZN14SmfMusicRating9setRatingERKi @ 133 NONAME
+	_ZN14SmfMusicRatingC1EP12SmfTrackInfo @ 134 NONAME
+	_ZN14SmfMusicRatingC1ERKS_ @ 135 NONAME
+	_ZN14SmfMusicRatingC2EP12SmfTrackInfo @ 136 NONAME
+	_ZN14SmfMusicRatingC2ERKS_ @ 137 NONAME
+	_ZN14SmfMusicRatingD1Ev @ 138 NONAME
+	_ZN14SmfMusicRatingD2Ev @ 139 NONAME
+	_ZN14SmfMusicRatingaSERKS_ @ 140 NONAME
+	_ZN15SmfMusicProfile13setUserEventsERK5QListI8SmfEventE @ 141 NONAME
+	_ZN15SmfMusicProfile15setInterestInfoERK5QListI12SmfTrackInfoE @ 142 NONAME
+	_ZN15SmfMusicProfile17setMusicUsageInfoERK5QListI12SmfTrackInfoE @ 143 NONAME
+	_ZN15SmfMusicProfile5setIdERK7QString @ 144 NONAME
+	_ZN15SmfMusicProfileC1ERKS_ @ 145 NONAME
+	_ZN15SmfMusicProfileC1Ev @ 146 NONAME
+	_ZN15SmfMusicProfileC2ERKS_ @ 147 NONAME
+	_ZN15SmfMusicProfileC2Ev @ 148 NONAME
+	_ZN15SmfMusicProfileD1Ev @ 149 NONAME
+	_ZN15SmfMusicProfileD2Ev @ 150 NONAME
+	_ZN15SmfMusicProfileaSERKS_ @ 151 NONAME
+	_ZN15SmfPostProvider10updatePostER7SmfPost @ 152 NONAME
+	_ZN15SmfPostProvider11qt_metacallEN11QMetaObject4CallEiPPv @ 153 NONAME
+	_ZN15SmfPostProvider11qt_metacastEPKc @ 154 NONAME
+	_ZN15SmfPostProvider12postDirectedER7SmfPostR10SmfContactP11SmfLocation @ 155 NONAME
+	_ZN15SmfPostProvider12postFinishedEb @ 156 NONAME
+	_ZN15SmfPostProvider14postAppearenceE17SmfAppearenceInfo @ 157 NONAME
+	_ZN15SmfPostProvider14postsAvailableEP5QListI7SmfPostE8SmfError13SmfResultPage @ 158 NONAME
+	_ZN15SmfPostProvider16staticMetaObjectE @ 159 NONAME DATA 16
+	_ZN15SmfPostProvider19customDataAvailableEiP10QByteArray @ 160 NONAME
+	_ZN15SmfPostProvider19getStaticMetaObjectEv @ 161 NONAME
+	_ZN15SmfPostProvider4postER7SmfPostR11SmfLocation @ 162 NONAME
+	_ZN15SmfPostProvider5postsEP10SmfContactii @ 163 NONAME
+	_ZN15SmfPostProvider9sharePostER7SmfPostR10SmfContactb @ 164 NONAME
+	_ZN15SmfPostProviderC1EP11SmfProvider @ 165 NONAME
+	_ZN15SmfPostProviderC2EP11SmfProvider @ 166 NONAME
+	_ZN15SmfPostProviderD0Ev @ 167 NONAME
+	_ZN15SmfPostProviderD1Ev @ 168 NONAME
+	_ZN15SmfPostProviderD2Ev @ 169 NONAME
+	_ZN17SmfContactFetcher10searchNearEP11SmfLocation25SmfLocationSearchBoundaryii @ 170 NONAME
+	_ZN17SmfContactFetcher11getProviderEv @ 171 NONAME
+	_ZN17SmfContactFetcher11qt_metacallEN11QMetaObject4CallEiPPv @ 172 NONAME
+	_ZN17SmfContactFetcher11qt_metacastEPKc @ 173 NONAME
+	_ZN17SmfContactFetcher13customRequestERKiP10QByteArray @ 174 NONAME
+	_ZN17SmfContactFetcher13searchInGroupE8SmfGroupii @ 175 NONAME
+	_ZN17SmfContactFetcher16staticMetaObjectE @ 176 NONAME DATA 16
+	_ZN17SmfContactFetcher18groupListAvailableEP5QListI8SmfGroupE8SmfError13SmfResultPage @ 177 NONAME
+	_ZN17SmfContactFetcher18searchNearFinishedEP5QListI10SmfContactE8SmfError13SmfResultPage @ 178 NONAME
+	_ZN17SmfContactFetcher19customDataAvailableEiP10QByteArray @ 179 NONAME
+	_ZN17SmfContactFetcher19getStaticMetaObjectEv @ 180 NONAME
+	_ZN17SmfContactFetcher20friendsListAvailableEP5QListI10SmfContactE8SmfError13SmfResultPage @ 181 NONAME
+	_ZN17SmfContactFetcher21searchContactFinishedEP5QListI10SmfContactE8SmfError13SmfResultPage @ 182 NONAME
+	_ZN17SmfContactFetcher21searchInGroupFinishedEP5QListI10SmfContactE8SmfError13SmfResultPage @ 183 NONAME
+	_ZN17SmfContactFetcher22followersListAvailableEP5QListI10SmfContactE8SmfError13SmfResultPage @ 184 NONAME
+	_ZN17SmfContactFetcher6groupsEii @ 185 NONAME
+	_ZN17SmfContactFetcher6searchEP10SmfContactii @ 186 NONAME
+	_ZN17SmfContactFetcher7friendsEii @ 187 NONAME
+	_ZN17SmfContactFetcher9followersEii @ 188 NONAME
+	_ZN17SmfContactFetcherC1EP11SmfProvider @ 189 NONAME
+	_ZN17SmfContactFetcherC1EP11SmfProviderP10SmfContact @ 190 NONAME
+	_ZN17SmfContactFetcherC2EP11SmfProvider @ 191 NONAME
+	_ZN17SmfContactFetcherC2EP11SmfProviderP10SmfContact @ 192 NONAME
+	_ZN17SmfContactFetcherD0Ev @ 193 NONAME
+	_ZN17SmfContactFetcherD1Ev @ 194 NONAME
+	_ZN17SmfContactFetcherD2Ev @ 195 NONAME
+	_ZN19SmfMusicFingerPrint19setMusicFingerPrintERK10QByteArray @ 196 NONAME
+	_ZN19SmfMusicFingerPrintC1ERKS_ @ 197 NONAME
+	_ZN19SmfMusicFingerPrintC1Ev @ 198 NONAME
+	_ZN19SmfMusicFingerPrintC2ERKS_ @ 199 NONAME
+	_ZN19SmfMusicFingerPrintC2Ev @ 200 NONAME
+	_ZN19SmfMusicFingerPrintD1Ev @ 201 NONAME
+	_ZN19SmfMusicFingerPrintD2Ev @ 202 NONAME
+	_ZN19SmfMusicFingerPrintaSERKS_ @ 203 NONAME
+	_ZN7SmfPost14setDescriptionERK7QString @ 204 NONAME
+	_ZN7SmfPost5setIdE7QString @ 205 NONAME
+	_ZN7SmfPost6setUrlER4QUrl @ 206 NONAME
+	_ZN7SmfPost8setImageERK6QImage @ 207 NONAME
+	_ZN7SmfPost8setTitleERK7QString @ 208 NONAME
+	_ZN7SmfPostC1E7QStringS0_6QImage4QUrl @ 209 NONAME
+	_ZN7SmfPostC1ERKS_ @ 210 NONAME
+	_ZN7SmfPostC1Ev @ 211 NONAME
+	_ZN7SmfPostC2E7QStringS0_6QImage4QUrl @ 212 NONAME
+	_ZN7SmfPostC2ERKS_ @ 213 NONAME
+	_ZN7SmfPostC2Ev @ 214 NONAME
+	_ZN7SmfPostD1Ev @ 215 NONAME
+	_ZN7SmfPostD2Ev @ 216 NONAME
+	_ZN7SmfPostaSERKS_ @ 217 NONAME
+	_ZN8SmfAlbum10setArtistsERK10SmfArtists @ 218 NONAME
+	_ZN8SmfAlbum5setIdERK7QString @ 219 NONAME
+	_ZN8SmfAlbum7setNameERK7QString @ 220 NONAME
+	_ZN8SmfAlbum8setImageERK6QImage @ 221 NONAME
+	_ZN8SmfAlbumC1ERKS_ @ 222 NONAME
+	_ZN8SmfAlbumC1Ev @ 223 NONAME
+	_ZN8SmfAlbumC2ERKS_ @ 224 NONAME
+	_ZN8SmfAlbumC2Ev @ 225 NONAME
+	_ZN8SmfAlbumD1Ev @ 226 NONAME
+	_ZN8SmfAlbumD2Ev @ 227 NONAME
+	_ZN8SmfAlbumaSERKS_ @ 228 NONAME
+	_ZN8SmfEvent10setArtistsERK10SmfArtists @ 229 NONAME
+	_ZN8SmfEvent11setDurationERK5QTime @ 230 NONAME
+	_ZN8SmfEvent12setTicketUrlERK4QUrl @ 231 NONAME
+	_ZN8SmfEvent16setEventDateTimeERK9QDateTime @ 232 NONAME
+	_ZN8SmfEvent5setIdERK7QString @ 233 NONAME
+	_ZN8SmfEvent8setTitleERK7QString @ 234 NONAME
+	_ZN8SmfEvent8setVenueERK11SmfLocation @ 235 NONAME
+	_ZN8SmfEventC1ERKS_ @ 236 NONAME
+	_ZN8SmfEventC1Ev @ 237 NONAME
+	_ZN8SmfEventC2ERKS_ @ 238 NONAME
+	_ZN8SmfEventC2Ev @ 239 NONAME
+	_ZN8SmfEventD1Ev @ 240 NONAME
+	_ZN8SmfEventD2Ev @ 241 NONAME
+	_ZN8SmfEventaSERKS_ @ 242 NONAME
+	_ZN8SmfGroup10setMembersEP5QListI10SmfContactE @ 243 NONAME
+	_ZN8SmfGroup5setIdER7QString @ 244 NONAME
+	_ZN8SmfGroup7setNameER7QString @ 245 NONAME
+	_ZN8SmfGroupC1EP5QListI10SmfContactE @ 246 NONAME
+	_ZN8SmfGroupC1ERKS_ @ 247 NONAME
+	_ZN8SmfGroupC2EP5QListI10SmfContactE @ 248 NONAME
+	_ZN8SmfGroupC2ERKS_ @ 249 NONAME
+	_ZN8SmfGroupD1Ev @ 250 NONAME
+	_ZN8SmfGroupD2Ev @ 251 NONAME
+	_ZN8SmfGroupaSERKS_ @ 252 NONAME
+	_ZN9SmfClient11GetServicesERK7QString @ 253 NONAME
+	_ZN9SmfClientC1Ev @ 254 NONAME
+	_ZN9SmfClientC2Ev @ 255 NONAME
+	_ZN9SmfClientD1Ev @ 256 NONAME
+	_ZN9SmfClientD2Ev @ 257 NONAME
+	_ZN9SmfLyrics11setLanguageERK7QString @ 258 NONAME
+	_ZN9SmfLyrics14setReleaseYearERK9QDateTime @ 259 NONAME
+	_ZN9SmfLyrics5setIdERK7QString @ 260 NONAME
+	_ZN9SmfLyrics9setLyricsERK10QByteArray @ 261 NONAME
+	_ZN9SmfLyricsC1ERKS_ @ 262 NONAME
+	_ZN9SmfLyricsC1Ev @ 263 NONAME
+	_ZN9SmfLyricsC2ERKS_ @ 264 NONAME
+	_ZN9SmfLyricsC2Ev @ 265 NONAME
+	_ZN9SmfLyricsD1Ev @ 266 NONAME
+	_ZN9SmfLyricsD2Ev @ 267 NONAME
+	_ZN9SmfLyricsaSERKS_ @ 268 NONAME
+	_ZNK10SmfArtists3urlEv @ 269 NONAME
+	_ZNK10SmfArtists5imageEv @ 270 NONAME
+	_ZNK10SmfArtists5namesEv @ 271 NONAME
+	_ZNK10SmfComment2idEv @ 272 NONAME
+	_ZNK10SmfComment4textEv @ 273 NONAME
+	_ZNK10SmfComment9timeStampEv @ 274 NONAME
+	_ZNK10SmfContact5valueERK7QString @ 275 NONAME
+	_ZNK10SmfContact7convertERN10QtMobility8QContactE @ 276 NONAME
+	_ZNK10SmfContact8subTypesEv @ 277 NONAME
+	_ZNK10SmfContact8writeLogE7QString @ 278 NONAME
+	_ZNK10SmfGallery10metaObjectEv @ 279 NONAME
+	_ZNK10SmfPicture10postedDateEv @ 280 NONAME
+	_ZNK10SmfPicture10visibilityEv @ 281 NONAME
+	_ZNK10SmfPicture11descriptionEv @ 282 NONAME
+	_ZNK10SmfPicture2idEv @ 283 NONAME
+	_ZNK10SmfPicture3urlEv @ 284 NONAME
+	_ZNK10SmfPicture4tagsEv @ 285 NONAME
+	_ZNK10SmfPicture5ownerEv @ 286 NONAME
+	_ZNK10SmfPicture5titleEv @ 287 NONAME
+	_ZNK10SmfPicture7pictureEv @ 288 NONAME
+	_ZNK10SmfPicture8commentsEv @ 289 NONAME
+	_ZNK11SmfLocation15geoPositionInfoEv @ 290 NONAME
+	_ZNK11SmfLocation2idEv @ 291 NONAME
+	_ZNK11SmfLocation3urlEv @ 292 NONAME
+	_ZNK11SmfLocation4cityEv @ 293 NONAME
+	_ZNK11SmfLocation4nameEv @ 294 NONAME
+	_ZNK11SmfLocation6streetEv @ 295 NONAME
+	_ZNK11SmfLocation7countryEv @ 296 NONAME
+	_ZNK11SmfLocation7zipCodeEv @ 297 NONAME
+	_ZNK11SmfPlaylist12creationDateEv @ 298 NONAME
+	_ZNK11SmfPlaylist13playListTitleEv @ 299 NONAME
+	_ZNK11SmfPlaylist2idEv @ 300 NONAME
+	_ZNK11SmfPlaylist9trackListEv @ 301 NONAME
+	_ZNK11SmfProvider10serviceUrlEv @ 302 NONAME
+	_ZNK11SmfProvider11descriptionEv @ 303 NONAME
+	_ZNK11SmfProvider11serviceIconEv @ 304 NONAME
+	_ZNK11SmfProvider11serviceNameEv @ 305 NONAME
+	_ZNK11SmfProvider12serviceTypesEv @ 306 NONAME
+	_ZNK11SmfProvider14applicationUrlEv @ 307 NONAME
+	_ZNK11SmfSubtitle11releaseYearEv @ 308 NONAME
+	_ZNK11SmfSubtitle2idEv @ 309 NONAME
+	_ZNK11SmfSubtitle8durationEv @ 310 NONAME
+	_ZNK11SmfSubtitle8languageEv @ 311 NONAME
+	_ZNK11SmfSubtitle8subtitleEv @ 312 NONAME
+	_ZNK11SmfSubtitle9frameRateEv @ 313 NONAME
+	_ZNK12SmfTrackInfo2idEv @ 314 NONAME
+	_ZNK12SmfTrackInfo4tagsEv @ 315 NONAME
+	_ZNK12SmfTrackInfo4yearEv @ 316 NONAME
+	_ZNK12SmfTrackInfo5albumEv @ 317 NONAME
+	_ZNK12SmfTrackInfo5genreEv @ 318 NONAME
+	_ZNK12SmfTrackInfo5titleEv @ 319 NONAME
+	_ZNK12SmfTrackInfo6ratingEv @ 320 NONAME
+	_ZNK12SmfTrackInfo7artistsEv @ 321 NONAME
+	_ZNK12SmfTrackInfo8commentsEv @ 322 NONAME
+	_ZNK12SmfTrackInfo8durationEv @ 323 NONAME
+	_ZNK14SmfMusicRating6ratingEv @ 324 NONAME
+	_ZNK14SmfMusicRating9maxRatingEv @ 325 NONAME
+	_ZNK14SmfMusicRating9minRatingEv @ 326 NONAME
+	_ZNK15SmfMusicProfile10userEventsEv @ 327 NONAME
+	_ZNK15SmfMusicProfile12interestInfoEv @ 328 NONAME
+	_ZNK15SmfMusicProfile14musicUsageInfoEv @ 329 NONAME
+	_ZNK15SmfMusicProfile2idEv @ 330 NONAME
+	_ZNK15SmfPostProvider10metaObjectEv @ 331 NONAME
+	_ZNK15SmfPostProvider11getProviderEv @ 332 NONAME
+	_ZNK15SmfPostProvider14maxCharsInPostEv @ 333 NONAME
+	_ZNK15SmfPostProvider16supportedFormatsEv @ 334 NONAME
+	_ZNK15SmfPostProvider18supportsAppearenceEv @ 335 NONAME
+	_ZNK15SmfPostProvider8maxItemsEv @ 336 NONAME
+	_ZNK17SmfContactFetcher10metaObjectEv @ 337 NONAME
+	_ZNK19SmfMusicFingerPrint16musicFingerPrintEv @ 338 NONAME
+	_ZNK7SmfPost11descriptionEv @ 339 NONAME
+	_ZNK7SmfPost2idEv @ 340 NONAME
+	_ZNK7SmfPost3urlEv @ 341 NONAME
+	_ZNK7SmfPost5imageEv @ 342 NONAME
+	_ZNK7SmfPost5titleEv @ 343 NONAME
+	_ZNK8SmfAlbum2idEv @ 344 NONAME
+	_ZNK8SmfAlbum4nameEv @ 345 NONAME
+	_ZNK8SmfAlbum5imageEv @ 346 NONAME
+	_ZNK8SmfAlbum7artistsEv @ 347 NONAME
+	_ZNK8SmfEvent13eventDateTimeEv @ 348 NONAME
+	_ZNK8SmfEvent2idEv @ 349 NONAME
+	_ZNK8SmfEvent5titleEv @ 350 NONAME
+	_ZNK8SmfEvent5venueEv @ 351 NONAME
+	_ZNK8SmfEvent7artistsEv @ 352 NONAME
+	_ZNK8SmfEvent8durationEv @ 353 NONAME
+	_ZNK8SmfEvent9ticketUrlEv @ 354 NONAME
+	_ZNK8SmfGroup2idEv @ 355 NONAME
+	_ZNK8SmfGroup4nameEv @ 356 NONAME
+	_ZNK8SmfGroup7membersEv @ 357 NONAME
+	_ZNK9SmfClient8writeLogE7QString @ 358 NONAME
+	_ZNK9SmfLyrics11releaseYearEv @ 359 NONAME
+	_ZNK9SmfLyrics2idEv @ 360 NONAME
+	_ZNK9SmfLyrics6lyricsEv @ 361 NONAME
+	_ZNK9SmfLyrics8languageEv @ 362 NONAME
+	_ZTI10SmfGallery @ 363 NONAME
+	_ZTI15SmfPostProvider @ 364 NONAME
+	_ZTI16SmfClientPrivate @ 365 NONAME
+	_ZTI17CSmfClientSymbian @ 366 NONAME
+	_ZTI17SmfContactFetcher @ 367 NONAME
+	_ZTI17SmfGalleryPrivate @ 368 NONAME
+	_ZTI22SmfPostProviderPrivate @ 369 NONAME
+	_ZTI24SmfContactFetcherPrivate @ 370 NONAME
+	_ZTV10SmfGallery @ 371 NONAME
+	_ZTV15SmfPostProvider @ 372 NONAME
+	_ZTV16SmfClientPrivate @ 373 NONAME
+	_ZTV17CSmfClientSymbian @ 374 NONAME
+	_ZTV17SmfContactFetcher @ 375 NONAME
+	_ZTV17SmfGalleryPrivate @ 376 NONAME
+	_ZTV22SmfPostProviderPrivate @ 377 NONAME
+	_ZTV24SmfContactFetcherPrivate @ 378 NONAME
+	_ZlsR11QDataStreamRK10SmfArtists @ 379 NONAME
+	_ZlsR11QDataStreamRK10SmfComment @ 380 NONAME
+	_ZlsR11QDataStreamRK10SmfContact @ 381 NONAME
+	_ZlsR11QDataStreamRK10SmfPicture @ 382 NONAME
+	_ZlsR11QDataStreamRK11SmfLocation @ 383 NONAME
+	_ZlsR11QDataStreamRK11SmfPlaylist @ 384 NONAME
+	_ZlsR11QDataStreamRK11SmfProvider @ 385 NONAME
+	_ZlsR11QDataStreamRK11SmfSubtitle @ 386 NONAME
+	_ZlsR11QDataStreamRK12SmfTrackInfo @ 387 NONAME
+	_ZlsR11QDataStreamRK14SmfMusicRating @ 388 NONAME
+	_ZlsR11QDataStreamRK15SmfMusicProfile @ 389 NONAME
+	_ZlsR11QDataStreamRK19SmfMusicFingerPrint @ 390 NONAME
+	_ZlsR11QDataStreamRK7SmfPost @ 391 NONAME
+	_ZlsR11QDataStreamRK8SmfAlbum @ 392 NONAME
+	_ZlsR11QDataStreamRK8SmfEvent @ 393 NONAME
+	_ZlsR11QDataStreamRK8SmfGroup @ 394 NONAME
+	_ZlsR11QDataStreamRK9SmfLyrics @ 395 NONAME
+	_ZlsR11QDataStreamRKN10QtMobility12QContactNameE @ 396 NONAME
+	_ZrsR11QDataStreamR10SmfArtists @ 397 NONAME
+	_ZrsR11QDataStreamR10SmfComment @ 398 NONAME
+	_ZrsR11QDataStreamR10SmfContact @ 399 NONAME
+	_ZrsR11QDataStreamR10SmfPicture @ 400 NONAME
+	_ZrsR11QDataStreamR11SmfLocation @ 401 NONAME
+	_ZrsR11QDataStreamR11SmfPlaylist @ 402 NONAME
+	_ZrsR11QDataStreamR11SmfProvider @ 403 NONAME
+	_ZrsR11QDataStreamR11SmfSubtitle @ 404 NONAME
+	_ZrsR11QDataStreamR12SmfTrackInfo @ 405 NONAME
+	_ZrsR11QDataStreamR14SmfMusicRating @ 406 NONAME
+	_ZrsR11QDataStreamR15SmfMusicProfile @ 407 NONAME
+	_ZrsR11QDataStreamR19SmfMusicFingerPrint @ 408 NONAME
+	_ZrsR11QDataStreamR7SmfPost @ 409 NONAME
+	_ZrsR11QDataStreamR8SmfAlbum @ 410 NONAME
+	_ZrsR11QDataStreamR8SmfEvent @ 411 NONAME
+	_ZrsR11QDataStreamR8SmfGroup @ 412 NONAME
+	_ZrsR11QDataStreamR9SmfLyrics @ 413 NONAME
+	_ZrsR11QDataStreamRN10QtMobility12QContactNameE @ 414 NONAME
+	_ZN13SmfPluginUtil11getAuthKeysER4QMapI7QStringS1_ES1_S1_ @ 415 NONAME
+	_ZN13SmfPluginUtil11getInstanceEv @ 416 NONAME
+	_ZN13SmfPluginUtil12m_myInstanceE @ 417 NONAME DATA 4
+	_ZN13SmfPluginUtil13getJsonHandleEv @ 418 NONAME
+	_ZN13SmfPluginUtil21createParameterStringERK7QStringN21QNetworkAccessManager9OperationERK10QByteArrayS7_18SmfSignatureMethodRK9QMultiMapIS5_S5_E14SmfParsingMode @ 419 NONAME
+	_ZN13SmfPluginUtil8getNonceER7QString @ 420 NONAME
+	_ZN13SmfPluginUtilC1Ev @ 421 NONAME
+	_ZN13SmfPluginUtilC2Ev @ 422 NONAME
+	_ZN13SmfPluginUtilD1Ev @ 423 NONAME
+	_ZN13SmfPluginUtilD2Ev @ 424 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/ABLD.BAT	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/Makefile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,270 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.1) on: Tue May 18 15:53:35 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+#  Name        : Makefile
+#  Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE          = Makefile
+QMAKE             = d:\Qt\4.6.1\bin\qmake
+DEL_FILE          = del
+DEL_DIR           = rmdir
+MOVE              = move
+XCOPY             = xcopy /d /f /h /r /y /i
+ABLD              = ABLD.BAT
+DEBUG_PLATFORMS   = winscw gcce armv5 armv6
+RELEASE_PLATFORMS = gcce armv5 armv6
+MAKE              = make
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+DEFINES	 = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS -DWRITE_LOG -DSMFCLIENT_LIB_EXPORT -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
+INCPATH	 =  -I"D:/Qt/4.6.1/include/QtCore" -I"D:/Qt/4.6.1/include/QtCore/tmp" -I"D:/Qt/4.6.1/include/QtNetwork" -I"D:/Qt/4.6.1/include/QtNetwork/tmp" -I"D:/Qt/4.6.1/include/QtGui" -I"D:/Qt/4.6.1/include/QtGui/tmp" -I"D:/Qt/4.6.1/include" -I"D:/Qt/4.6.1/include/tmp" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfclient" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfclient/tmp" -I"D:/Qt/4.6.1/mkspecs/common/symbian" -I"D:/Qt/4.6.1/mkspecs/common/symbian/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/sys" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfclient/client" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfclient/client/tmp" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfclient/common" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfclient/common/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/middleware" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/middleware" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/applications" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/applications" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/middleware/loc" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/stlport"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+	$(QMAKE) -spec symbian-abld -o "bld.inf" "D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfclient/smfclient.pro"
+
+bld.inf:
+	$(QMAKE)
+
+$(ABLD): bld.inf
+	bldmake bldfiles
+
+debug: $(ABLD)
+	$(ABLD) build winscw udeb
+	$(ABLD) build gcce udeb
+	$(ABLD) build armv5 udeb
+	$(ABLD) build armv6 udeb
+
+release: $(ABLD)
+	$(ABLD) build gcce urel
+	$(ABLD) build armv5 urel
+	$(ABLD) build armv6 urel
+
+debug-winscw: $(ABLD)
+	$(ABLD) build winscw udeb
+debug-gcce: $(ABLD)
+	$(ABLD) build gcce udeb
+debug-armv5: $(ABLD)
+	$(ABLD) build armv5 udeb
+debug-armv6: $(ABLD)
+	$(ABLD) build armv6 udeb
+release-gcce: $(ABLD)
+	$(ABLD) build gcce urel
+release-armv5: $(ABLD)
+	$(ABLD) build armv5 urel
+release-armv6: $(ABLD)
+	$(ABLD) build armv6 urel
+
+export: $(ABLD)
+	$(ABLD) export
+
+cleanexport: $(ABLD)
+	$(ABLD) cleanexport
+
+D:\Qt\4.6.1\bin\moc.exe:
+	(cd $(QTDIR)/src/tools/moc && $(MAKE))
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all: moc_smfcontactfetcher.cpp moc_smfpostprovider.cpp moc_smfgallery.cpp moc_smfclient_p.cpp moc_smfcontactfetcher_p.cpp moc_smfpostprovider_p.cpp moc_smfgallery_p.cpp
+compiler_moc_header_clean:
+	-$(DEL_FILE) moc_smfcontactfetcher.cpp moc_smfpostprovider.cpp moc_smfgallery.cpp moc_smfclient_p.cpp moc_smfcontactfetcher_p.cpp moc_smfpostprovider_p.cpp moc_smfgallery_p.cpp 2> NUL
+moc_smfcontactfetcher.cpp: client\smfcontactfetcher.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN client\smfcontactfetcher.h -o moc_smfcontactfetcher.cpp
+
+moc_smfpostprovider.cpp: client\smfpostprovider_p.h \
+		client\smfpostprovider.h \
+		client\smfpostprovider.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN client\smfpostprovider.h -o moc_smfpostprovider.cpp
+
+moc_smfgallery.cpp: client\smfgallery.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN client\smfgallery.h -o moc_smfgallery.cpp
+
+moc_smfclient_p.cpp: client\smfclient.h \
+		client\smfclientsymbian.h \
+		client\smfclientsymbiansession.h \
+		client\smfclient_p.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN client\smfclient_p.h -o moc_smfclient_p.cpp
+
+moc_smfcontactfetcher_p.cpp: client\smfcontactfetcher.h \
+		client\smfpostprovider.h \
+		client\smfpostprovider_p.h \
+		client\smfcontactfetcher_p.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN client\smfcontactfetcher_p.h -o moc_smfcontactfetcher_p.cpp
+
+moc_smfpostprovider_p.cpp: client\smfpostprovider.h \
+		client\smfpostprovider_p.h \
+		client\smfpostprovider_p.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN client\smfpostprovider_p.h -o moc_smfpostprovider_p.cpp
+
+moc_smfgallery_p.cpp: client\smfgallery.h \
+		client\smfgallery_p.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN client\smfgallery_p.h -o moc_smfgallery_p.cpp
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+	-$(DEL_FILE) qmake_image_collection.cpp 2> NUL
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all:
+compiler_uic_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean 
+
+create_temps:
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtCore\tmp" mkdir "D:\Qt\4.6.1\include\QtCore\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtNetwork\tmp" mkdir "D:\Qt\4.6.1\include\QtNetwork\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtGui\tmp" mkdir "D:\Qt\4.6.1\include\QtGui\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\tmp" mkdir "D:\Qt\4.6.1\include\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" mkdir "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\client\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\client\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\common\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\common\tmp"
+
+extension_clean: compiler_clean
+	-@ if EXIST "D:\Qt\4.6.1\include\QtCore\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtCore\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\QtNetwork\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtNetwork\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\QtGui\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtGui\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\client\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\client\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\common\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\common\tmp"
+
+pre_targetdeps: \
+	generated_sources \
+	all_source_deps
+
+generated_sources: \
+	moc_smfcontactfetcher.cpp \
+	moc_smfpostprovider.cpp \
+	moc_smfgallery.cpp \
+	moc_smfclient_p.cpp \
+	moc_smfcontactfetcher_p.cpp \
+	moc_smfpostprovider_p.cpp \
+	moc_smfgallery_p.cpp
+
+all_source_deps: \
+	client\smfgallery.h \
+	client\smfgallery_p.h \
+	client\smfclientsymbian.h \
+	client\smfclientsymbiansession.h \
+	client\smfpostprovider.h \
+	client\smfpostprovider_p.h \
+	client\smfclient.h \
+	client\smfclient_p.h \
+	client\smfcontactfetcher.h \
+	client\smfcontactfetcher_p.h \
+	client\SmfClientSymbian.h \
+	common\smfcomment.h \
+	common\smfcomment_p.h \
+	common\smfcontact.h \
+	common\SmfClientGlobal.h \
+	common\smfcontact_p.h \
+	common\smfgroup.h \
+	common\smfclientglobal.h \
+	common\smfgroup_p.h \
+	common\smfpost.h \
+	common\smfpost_p.h \
+	common\smfprovider.h
+
+finalize:
+
+winscw_deployment:
+
+winscw_deployment_clean:
+
+sis: restore_build
+	$(if $(wildcard smfclient_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+	createpackage.bat $(QT_SIS_OPTIONS) smfclient_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+	$(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+	$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+restore_build:
+-include .make.cache
+
+store_build:
+	@echo # ============================================================================== > .make.cache
+	@echo # This file is generated by make and should not be modified by the user >> .make.cache
+	@echo #  Name        : .make.cache >> .make.cache
+	@echo #  Part of     : smfclient >> .make.cache
+	@echo #  Description : This file is used to cache last build target for >> .make.cache
+	@echo #                make sis target. >> .make.cache
+	@echo #  Version     :  >> .make.cache
+	@echo # >> .make.cache
+	@echo # ============================================================================== >> .make.cache
+	@echo. >> .make.cache
+	@echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> .make.cache
+
+dodistclean:
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\Makefile" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\Makefile"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\Makefile_0xE08059D4.mk" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\Makefile_0xE08059D4.mk"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\smfclient_0xE08059D4.mmp" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\smfclient_0xE08059D4.mmp"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\.make.cache" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\.make.cache"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\bld.inf" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfclient\bld.inf"
+
+distclean: clean dodistclean
+
+clean: $(ABLD)
+	-$(ABLD) reallyclean
+	-bldmake clean
+
+clean-debug: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+	$(ABLD) reallyclean gcce udeb
+	$(ABLD) reallyclean armv5 udeb
+	$(ABLD) reallyclean armv6 udeb
+
+clean-release: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+	$(ABLD) reallyclean armv5 urel
+	$(ABLD) reallyclean armv6 urel
+
+clean-debug-winscw: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+clean-debug-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce udeb
+clean-debug-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 udeb
+clean-debug-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 udeb
+clean-release-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+clean-release-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 urel
+clean-release-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 urel
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/bld.inf	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,75 @@
+// ============================================================================
+// * Makefile for building: smfclient
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-18T15:53:35
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// * Project:  smfclient.pro
+// * Template: lib
+// ============================================================================
+
+#define BLD_INF_SMFCLIENT_FA53C5DE
+
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+
+prj_mmpfiles
+
+gnumakefile Makefile_0xE08059D4.mk
+smfclient_0xE08059D4.mmp
+
+prj_extensions
+
+
+
+prj_exports
+
+client/smfclient.h
+client/smfclient_p.h
+client/smfcontactfetcher.h
+client/smfcontactfetcher_p.h
+client/smfclientsymbian.h
+client/smfclientsymbiansession.h
+client/smfpostprovider.h
+client/smfpostprovider_p.h
+client/smfgallery.h
+client/smfgallery_p.h
+common/smfclientglobal.h
+common/smfglobal.h
+common/smfobserver.h
+common/smfalbum.h
+common/smfalbum_p.h
+common/smfartists.h
+common/smfartists_p.h
+common/smfcomment.h
+common/smfcomment_p.h
+common/smfcontact.h
+common/smfcontact_p.h
+common/smfevent.h
+common/smfevent_p.h
+common/smfgroup.h
+common/smfgroup_p.h
+common/smflocation.h
+common/smflocation_p.h
+common/smflyrics.h
+common/smflyrics_p.h
+common/smfmusicfingerprint.h
+common/smfmusicfingerprint_p.h
+common/smfmusicprofile.h
+common/smfmusicprofile_p.h
+common/smfmusicrating.h
+common/smfmusicrating_p.h
+common/smfpicture.h
+common/smfpicture_p.h
+common/smfplaylist.h
+common/smfplaylist_p.h
+common/smfpluginutil.h
+common/smfpost.h
+common/smfpost_p.h
+common/smfprovider.h
+common/smfsubtitle.h
+common/smfsubtitle_p.h
+common/smftrackinfo.h
+common/smftrackinfo_p.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/client.pri	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,34 @@
+INCLUDEPATH += client \
+    ./
+PUBLIC_HEADERS += client/smfclient.h \
+    client/smfcontactfetcher.h \
+    client/smfpostprovider.h \
+    client/smfgallery.h \
+    client/smfclientsymbian.h \
+    client/smfclientsymbiansession.h
+PRIVATE_HEADERS += client/smfclient_p.h \
+    client/smfcontactfetcher_p.h \
+    client/smfpostprovider_p.h \
+    client/smfgallery_p.h
+SOURCES += client/smfgallery.cpp \ 
+	client/smfgallery_p.cpp \
+    client/smfpostprovider.cpp \
+    client/smfpostprovider_p.cpp \
+    client/smfclient.cpp \
+    client/smfclient_p.cpp \
+    client/smfcontactfetcher.cpp \
+    client/smfcontactfetcher_p.cpp \
+    client/smfclientsymbian.cpp
+symbian: { 
+    BLD_INF_RULES.prj_exports += client/smfclient.h
+    BLD_INF_RULES.prj_exports += client/smfclient_p.h
+    BLD_INF_RULES.prj_exports += client/smfcontactfetcher.h
+    BLD_INF_RULES.prj_exports += client/smfcontactfetcher_p.h
+    BLD_INF_RULES.prj_exports += client/smfclientsymbian.h
+    BLD_INF_RULES.prj_exports += client/smfclientsymbiansession.h
+    BLD_INF_RULES.prj_exports += client/smfpostprovider.h
+    BLD_INF_RULES.prj_exports += client/smfpostprovider_p.h
+    BLD_INF_RULES.prj_exports += client/smfgallery.h
+    BLD_INF_RULES.prj_exports += client/smfgallery_p.h
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfclient.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+#include "smfclient.h"
+#include "smfclient_p.h"
+
+
+SmfClient::SmfClient()
+	{
+	writeLog("SmfClient::SmfClient");
+	//Create instance of the private wrapper
+	m_private = new SmfClientPrivate(this);
+	m_providerList = NULL;
+	}
+SmfClient::~SmfClient()
+	{
+	if(m_private)
+		{
+		delete m_private;
+		m_private = NULL;
+		}
+	}
+
+QList<SmfProvider>* SmfClient::GetServices(const QString& serviceName)
+	{
+	writeLog("SmfClient::GetServices");
+	if(m_providerList)
+		{
+		delete m_providerList;
+		m_providerList = NULL;
+		}
+	writeLog("Before m_private->GetServices");
+	//Getting the data synchronously
+	m_providerList = m_private->GetServices(serviceName);
+	writeLog("After m_private->GetServices");
+	return m_providerList;
+	}
+void SmfClient::writeLog(QString log) const
+	{
+#ifdef WRITE_LOG
+	QFile file("c:\\data\\SmfClientLogs.txt");
+    if (!file.open(QIODevice::Append | QIODevice::Text))
+	         ;
+    QTextStream out(&file);
+    out << log << "\n";
+    file.close();
+#endif
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfclient.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,80 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfClient class provides a set of APIs to get list of service provider
+ * who implement the given interface. Calling GetServices of the instance of this
+ * class is mandatory before using any other interface.
+ *
+ */
+
+#ifndef SMFCLIENT_H
+#define SMFCLIENT_H
+
+#include <QObject>
+#include "smfclientglobal.h"
+
+#ifdef WRITE_LOG 
+#include <QFile>
+#include <QTextStream>
+#endif
+//Forward declarations
+class SmfProvider;
+class SmfClientPrivate;
+/**
+ * @ingroup smf_client_group 
+ * Interface for a base service provider. Other service provider classes contains 
+ * implementation of this base class so that each has access to service provider 
+ * information.
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ */
+class  SMFCLIENT_EXPORT SmfClient
+{
+
+public:
+	/**
+	 * Constructs SmfClient
+	 */
+	SmfClient();
+	~SmfClient();
+  /**
+   * @param name of the service 
+   * @return service provider list
+   * 
+   * More overloaded APIs will be provided later
+   */
+  QList<SmfProvider>* GetServices(const QString& serviceName); 
+  //QList<SmfProvider>* GetServices(const QString& serviceName, const QString& providerName);
+  //QList<SmfProvider>* GetServices(const QString& serviceName, const SmfProvider& provider);
+
+	/**
+	* Debugging purpose only
+	*/
+	void writeLog(QString log)const;
+private:
+  /**
+   * Private impl wrapper.
+   */
+  SmfClientPrivate* m_private;
+  /**
+   * List of SmfProvider to be returned to the requested code
+   */
+  QList<SmfProvider>* m_providerList;
+  
+
+};
+
+
+#endif // SMFCLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfclient_p.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,53 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+
+#include "smfclient_p.h"
+
+SmfClientPrivate::SmfClientPrivate(SmfClient* client):m_client(client)
+	{
+	m_client->writeLog("SmfClientPrivate::SmfClientPrivate");
+	//private impl for symbian
+	#ifdef Q_OS_SYMBIAN
+	m_SmfClientPrivate = CSmfClientSymbian::NewL(this);
+	#endif
+
+	}
+QList<SmfProvider>* SmfClientPrivate::GetServices(const QString serviceName)
+	{
+	m_client->writeLog("SmfClientPrivate::GetServices");
+	m_baseProvider = NULL;
+	  
+	QString intfName(serviceName);
+  
+	m_providerSerialized.clear();
+	m_client->writeLog("Before m_SmfClientPrivate->sendRequest");
+	//Getting the serialized list of SmfProvider synchronously
+	m_providerSerialized = m_SmfClientPrivate->sendRequest(intfName,SmfGetService);;
+	if(m_baseProvider)
+		{
+		delete m_baseProvider;
+		m_baseProvider = NULL;
+		}
+	m_baseProvider = new QList<SmfProvider>;
+	//De-serialize it into QList <SmfProvider>
+	QDataStream reader(&m_providerSerialized,QIODevice::ReadOnly);
+	reader>>*(m_baseProvider);
+	return m_baseProvider;
+	}
+//This api is not reqd as result will be synchronous
+void SmfClientPrivate::resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error)
+	{
+
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfclient_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+
+#ifndef SMFCLIENT_P_H_
+#define SMFCLIENT_P_H_
+
+#include "smfprovider.h"
+#include "SmfObserver.h"
+#include <QObject>
+#include <QDateTime>
+#include <QStringList>
+#include "smfclient.h"
+#include "smfclientglobal.h"
+#include "smfglobal.h"
+#ifdef Q_OS_SYMBIAN
+#include "smfclientsymbian.h"
+#else
+class SmfClientQt;
+#endif
+
+/**
+ * Private Qt wrapper
+ * Provided to accomodate diff facilities in diff platforms.
+ * Uses Symbian client-server for Symbian
+ * QDbus for linux
+ * QLocalserver for rest of the platforms
+ * Note:- only symbian client-server impl is provided at the moment
+ */
+class SmfClientPrivate : public smfObserver
+{
+  Q_OBJECT
+
+public:
+
+  /**
+   * Constructs SmfClientPrivate
+   * @param client SmfClient instance, so that it can directly emit SmfClient's signal
+   */
+  SmfClientPrivate(SmfClient* client=0);
+  ~SmfClientPrivate(){};
+public:
+  /**
+   * Corresponds to SmfClient::GetServices(const QString )
+   */
+  QList<SmfProvider>* GetServices(const QString serviceName);
+   /**
+    * From smfobserver.
+    * This callback is invoked when requested result is available from
+    * other components of Smf (specially from plugin manager).
+    * @param result Parsed and serialized result.
+    * @param opcode Request code.
+    * @param error Error
+    */
+   void resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error);
+private:
+  QList<SmfProvider>* m_baseProvider;
+  //serialized byte array of provider
+  QByteArray m_providerSerialized;
+#ifdef Q_OS_SYMBIAN
+  CSmfClientSymbian* m_SmfClientPrivate;
+  friend class CSmfClientSymbian;
+#else
+  SmfClientQt* m_SmfClientPrivate;
+  friend class SmfClientQt;
+#endif
+  bool m_connected;
+  SmfClient* m_client;
+  //debugging only
+  void writeLog(QString log) const;
+
+};
+
+#endif /* SMFCLIENT_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfclientsymbian.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,471 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+
+#include "smfclientsymbian.h"
+#include <e32cmn.h>
+#include <QtGlobal>
+#include <e32svr.h>
+#include <e32base.h>
+#include <QByteArray>
+#include "smfglobal.h"
+#include "smfclientglobal.h"
+//testing purpose
+#include <QProcess>
+#include <QTextStream>
+#include <QFile>
+//testing end
+// For starting the server process
+static TInt StartServerL();
+static TInt CreateServerProcessL();
+
+CSmfClientSymbian::CSmfClientSymbian(smfObserver* aObserver)
+: iObserver(aObserver),CActive( EPriorityStandard ),iDataPtr(NULL, 0, 0)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+CSmfClientSymbian* CSmfClientSymbian::NewL(smfObserver* aObserver )
+    {
+	CSmfClientSymbian* self = NewLC( aObserver );
+    CleanupStack::Pop( self );
+    return( self ) ;
+    }
+
+CSmfClientSymbian* CSmfClientSymbian::NewLC(smfObserver* aObserver )
+    {
+	CSmfClientSymbian* self =
+        new ( ELeave ) CSmfClientSymbian( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+void CSmfClientSymbian::ConstructL()
+    {
+	writeLog("CSmfClientSymbian::ConstructL");
+
+    User::LeaveIfError(iSession.connectToServer());
+    }
+void CSmfClientSymbian::writeLog(QString log) 
+	{
+#ifdef WRITE_LOG
+	QFile file("c:\\data\\SmfClientLogs.txt");
+    if (!file.open(QIODevice::Append | QIODevice::Text))
+	         return;
+    QTextStream out(&file);
+    out << log << "\n";
+    file.close();
+#endif
+	}
+
+void CSmfClientSymbian::DoCancel()
+	{
+	Cancel();
+	}
+
+TInt CSmfClientSymbian::RunError(TInt aError)
+	{
+	QString log2("CSmfClientSymbian::RunError=");
+	
+	log2 += QString::number(aError);
+	writeLog(log2);
+	return KErrNone;
+	}
+
+void CSmfClientSymbian::RunL()
+	{
+	QString log2("CSmfClientSymbian::RunL=");
+	log2 += QString::number(iStatus.Int());
+	writeLog(log2);
+    switch ( iStatus.Int() )
+        {
+        case KErrCancel:
+            // The request was canceled
+        	writeLog("KErrCancel");
+            break ;
+
+        case KErrNotReady:
+        	writeLog("KErrNotReady");
+        	break;
+
+        default:
+        	{
+        	writeLog("RunL:-SmfContactRetrievePostsComplete");
+        	//This contains error followed by actual data
+        	QByteArray receivedData(reinterpret_cast<const char*>(iSession.iDataPtr.Ptr()),iSession.iDataPtr.Length());
+        	QString errStr;
+        	SmfError errVal;
+        	int errInt;
+        	QByteArray data;
+        	QDataStream reader(&receivedData,QIODevice::ReadOnly);
+        	reader>>errInt;
+        	errVal = (SmfError)errInt;
+        	reader>>data;
+        	SmfRequestTypeID opcode = (SmfRequestTypeID)iSession.getLastRequest();
+        	iObserver->resultsAvailable(data,opcode,errVal);
+        	}
+        	break;
+        }
+	}
+
+QByteArray CSmfClientSymbian::sendRequest(QString aInterfaceName,
+		 SmfRequestTypeID requestType)
+	{
+	//This will be a synchronous request
+	//note session is opened in ctor and closed in dtor
+	writeLog("CSmfClientSymbian::sendRequest=");
+	writeLog(aInterfaceName);
+	//Gets data synchronously from the server
+    TPtr8 symbianBuf(iSession.sendSyncRequest(aInterfaceName,requestType));
+    //convert this into bytearray
+    QByteArray receivedData(reinterpret_cast<const char*>(symbianBuf.Ptr()),symbianBuf.Length());
+    return receivedData;
+    //
+	}
+
+TInt CSmfClientSymbian::sendRequest(QByteArray& aSerializedData,
+		 QString aInterfaceName,
+		 SmfRequestTypeID requestType)
+	{
+	//TODO:-testing puspose only, should be removed in the release
+	if(requestType == SmfTest)
+		{
+		QString log("Before iSesson.SendAsync");
+		writeLog(log);
+		iSession.sendAsyncRequest(aSerializedData,aInterfaceName,requestType,iStatus);
+		SetActive();
+		QString log2("After setactive");
+		writeLog(log2);
+		}
+	else
+		{
+		//RSessionBase objects sendreceive is called
+		iSession.sendAsyncRequest(aSerializedData,aInterfaceName,requestType,iStatus);
+		SetActive();
+		}
+	}
+
+TInt CSmfClientSymbian::sendDummyRequest(QByteArray* provider,QString aInterfaceName,
+		 SmfRequestTypeID requestType)
+	{
+	switch(requestType)
+		{
+		case SmfTest:
+			{
+
+			}
+			break;
+		default:
+			//should panic
+			break;
+		}
+	}
+
+CSmfClientSymbian::~CSmfClientSymbian()
+	{
+	writeLog("~CSmfClientSymbian");
+    Cancel(); // Causes call to DoCancel()
+    iSession.Close();
+	}
+
+RSmfClientSymbianSession::RSmfClientSymbianSession()
+:iDataPtr(NULL, 0, 0),iDataPtr16(NULL,0),iIntfNamePtr(NULL,0),iIntfNamePtr8(NULL,0),iPtrProvider(NULL,0)
+    {
+    // No implementation required
+    }
+
+TInt RSmfClientSymbianSession::connectToServer()
+    {
+	writeLog("RSmfClientSymbianSession::connectToServer");
+    TInt error = ::StartServerL();
+    writeLog("StartServerL=");
+    QString err = QString::number(error);
+    writeLog(err);
+    if ( KErrNone == error )
+        {
+		
+        error = CreateSession( KSmfServerName,
+                               Version(),
+                               4 );
+        QString crtSessionErr = QString::number(error);
+        writeLog(crtSessionErr);
+        }
+    return error;
+    }
+
+//testing
+void RSmfClientSymbianSession::writeLog(QString log) const
+	{
+#ifdef WRITE_LOG
+	QFile file("c:\\data\\SmfClientLogs.txt");
+    if (!file.open(QIODevice::Append | QIODevice::Text))
+	         ;
+    QTextStream out(&file);
+    out << log << "\n";
+    file.close();
+#endif
+	}
+
+TPtr8 RSmfClientSymbianSession::sendSyncRequest(QString aInterfaceName,
+		SmfRequestTypeID aRequestType)
+	{
+	iLastRequest = aRequestType;
+	/**
+	 * The message body consists of.- 
+	 * 1. Interface name as string ("org.symbian.smf.client.gallery")
+	 * 2. Data pointer to be filled by serialized data(QList<smfProvider>)
+	 */
+	QString log("RSmfClientSymbianSession::sendSyncRequest-start-");
+	writeLog(log);
+	writeLog(QString("aInterfaceName=")+aInterfaceName);
+	
+	iInterfaceNamebyte.clear();
+	//Convert the interface name into TPtr
+	iInterfaceName.clear();
+	iInterfaceName = aInterfaceName ;
+	writeLog(QString("iInterfaceName=")+iInterfaceName);
+	//lets pass serialized QString
+	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
+	intfNameStream<<iInterfaceName;
+	log.clear();
+    log = QString("iInterfaceNamebyte size=");
+    log += QString::number(iInterfaceNamebyte.size());
+    writeLog(log);
+	if(iIntfNameBuffer8)
+		{
+		delete iIntfNameBuffer8;
+		iIntfNameBuffer8 =NULL;
+		}
+	TInt serializedintfsize = iInterfaceNamebyte.size();
+	writeLog("iInterfaceNamebyte.size()=");
+	writeLog(QString::number(serializedintfsize));
+	iIntfNameBuffer8 = HBufC8::NewL(iInterfaceNamebyte.size()*2);
+	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
+	iIntfNamePtr8.Copy(reinterpret_cast<TUint8*>(iInterfaceNamebyte.data()),iInterfaceNamebyte.length());
+	log.clear();
+    log = QString("iIntfNamePtr8 size=")+QString::number(iIntfNamePtr8.Size());
+    writeLog(log);
+
+    writeLog("Before provider symbian copy");
+	
+	
+	iInterfaceSymbian8.Copy(iIntfNamePtr8);	
+	if(iBuffer)
+		{
+		delete iBuffer;
+		iBuffer = NULL;
+		}
+	iMaxMessageSize = 1000 ;
+    iBuffer = HBufC8::NewL(iMaxMessageSize);
+    iDataPtr.Set(iBuffer->Des());
+    log.clear();
+    log = QString("After iDataPtr.Set");
+    writeLog(log);
+
+	
+    TIpcArgs args;
+
+    args.Set(0, &iInterfaceSymbian8);
+    args.Set(1, &iDataPtr);
+    
+    TInt err(KErrBadHandle);
+    writeLog("Before handle");
+	log.clear();
+    log = QString("iInterfaceSymbian8 size=")+QString::number(iInterfaceSymbian8.Size());
+    writeLog(log);
+    if (Handle()) 
+    	{
+        err = KErrNone;
+        log.clear();
+        log = QString("Before sendreceive");
+        writeLog(log);
+        //synchronous request
+        TInt sendErr = SendReceive(aRequestType, args);
+        if(sendErr)
+        	{
+			writeLog("SendReceive error=");
+			QString errStr = QString::number(sendErr);
+			writeLog(errStr);
+        	}
+        return iDataPtr;
+        }
+	}
+
+/**
+ * Calls SendReceive() after converting into symbian descriptors
+ *
+ */
+void RSmfClientSymbianSession::sendAsyncRequest(QByteArray& aSerializedData,
+		QString aInterfaceName,
+		SmfRequestTypeID aRequestType,
+		TRequestStatus& aStatus)
+	{
+	iLastRequest = aRequestType;
+	/**
+	 * The message body consists of.- 
+	 * 1. Provider Info(SmfProvider*)+ Other common class data
+	 *  (when applicable)-serialized
+	 * 2. Interface name as string ("org.symbian.smf.client.gallery")
+	 * 3. Data pointer to be filled by serialized data
+	 */
+	QString log("RSmfClientSymbianSession::sendAsyncRequest-start-");
+	writeLog(log);
+	
+	iBaseProvider= aSerializedData;
+	iInterfaceName = aInterfaceName ;
+	
+    int size = aSerializedData.size();
+    log.clear();
+    log = QString("aSerializedData size=")+ QString::number(size);
+    
+    writeLog(log);
+    if(iProviderBuf)
+    	{
+		delete iProviderBuf;
+		iProviderBuf = NULL;
+    	}
+    //TODO:- KSmfProviderMaxSize
+    iProviderBuf = HBufC8::NewL(iBaseProvider.size()*2);
+    iPtrProvider.Set(iProviderBuf->Des());
+	//convert the QByteArray into TPtr
+    iPtrProvider.Copy(reinterpret_cast<const TText8*>(iBaseProvider.constData()),iBaseProvider.length());
+    
+	
+    log.clear();
+    log = QString("iPtrProvider.Copy");
+    writeLog(log);
+    
+	//Convert the interface name into TPtr////////////////////////
+	iInterfaceName.clear();
+	iInterfaceName = aInterfaceName ;
+	writeLog(QString("iInterfaceName=")+iInterfaceName);
+	//Pass serialized QString for interface name
+	QDataStream intfNameStream(&iInterfaceNamebyte,QIODevice::WriteOnly);
+	intfNameStream<<iInterfaceName;
+	log.clear();
+    log = QString("iInterfaceNamebyte size=");
+    log += QString::number(iInterfaceNamebyte.size());
+    writeLog(log);
+	if(iIntfNameBuffer8)
+		{
+		delete iIntfNameBuffer8;
+		iIntfNameBuffer8 =NULL;
+		}
+	iIntfNameBuffer8 = HBufC8::NewL(aInterfaceName.size()*2);
+	iIntfNamePtr8.Set(iIntfNameBuffer8->Des());
+	//Convert into symbian data type
+	iIntfNamePtr8.Copy(reinterpret_cast<TUint8*>(iInterfaceNamebyte.data()),iInterfaceNamebyte.length());
+	log.clear();
+    log = QString("iIntfNamePtr8 size=")+QString::number(iIntfNamePtr8.Size());
+    writeLog(log);
+	
+
+	if(iBuffer)
+		{
+		delete iBuffer;
+		iBuffer = NULL;
+		}
+	//TODO:-KSmfMaxDataSize
+	iMaxMessageSize = 2000 ;
+    iBuffer = HBufC8::NewL(iMaxMessageSize);
+    iDataPtr.Set(iBuffer->Des());
+    log.clear();
+    log = QString("After iDataPtr.Set");
+    writeLog(log);
+	
+	
+    TIpcArgs args;
+    
+
+    args.Set(0, &iPtrProvider);
+    args.Set(1, &iIntfNamePtr8);
+    args.Set(2, &iDataPtr);
+    
+    TInt err(KErrBadHandle);
+    log.clear();
+    log = QString("Before Handle()");
+    writeLog("Before handle");
+    if (Handle()) 
+    	{
+        err = KErrNone;
+        log.clear();
+        log = QString("Before sendreceive");
+        writeLog(log);
+       SendReceive(aRequestType, args, aStatus);
+
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// StartServerL()
+// Starts the server if it is not already running
+// -----------------------------------------------------------------------------
+//
+static TInt StartServerL()
+    {
+    TInt result;
+
+    TFindServer findSmfServer( KSmfServerName );
+    TFullName name;
+
+    result = findSmfServer.Next( name );
+    if ( result == KErrNone )
+        {
+        // Server already running
+        return KErrNone;
+        }
+
+    result = CreateServerProcessL();
+    if ( result != KErrNone )
+        {
+        return  result;
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CreateServerProcessL()
+// Creates a server process
+// -----------------------------------------------------------------------------
+//
+static TInt CreateServerProcessL()
+    {
+    TInt result;
+    //SmfServer SID
+    TUid KSmfServerUID3 = { 0xE5027327 };
+    const TUidType serverUid( KNullUid, KNullUid, KSmfServerUID3 );
+
+    RProcess server;
+
+    result = server.Create( KSmfServerFilename, KNullDesC, serverUid );
+    User::LeaveIfError(result);
+    if (KErrNone != result) {
+        return  result; 
+    }
+    else {
+		//User::WaitForRequest going for infinite loop, temporary work-around
+        //TRequestStatus status;
+        //server.Rendezvous(status);
+        server.Resume(); // logon OK - start the server
+        //Going for infinite loop
+        //User::WaitForRequest(status);// wait for start or death
+        User::After(700000);
+        server.Close();
+        return KErrNone;
+        //return status.Int(); // return the error
+    }
+    return  KErrNone;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfclientsymbian.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,148 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+
+#ifndef SMFCLIENTSYMBIAN_H_
+#define SMFCLIENTSYMBIAN_H_
+
+#include <e32base.h>
+#include <e32cmn.h>
+#include "smfglobal.h"
+#include "smfobserver.h"
+#include "smfprovider.h"
+#include <QStringList>
+#include "smfclientsymbiansession.h"
+
+/**
+ * Private client implementation for Symbian.
+ */
+class CSmfClientSymbian : public CActive
+{
+
+public: // Constructors and destructors
+	
+	/**
+	 * Two phase contruction.
+	 * @param aObserver For callback
+	 */
+     static CSmfClientSymbian* NewL(smfObserver* aObserver);
+
+
+     static CSmfClientSymbian* NewLC(smfObserver* aObserver);
+     CSmfClientSymbian(smfObserver* aObserver);
+
+     /**
+     * ~CSmfClientSymbian.
+     * Destructor.
+     * Destroys the object and release all memory objects.
+     */
+     virtual ~CSmfClientSymbian();
+
+ public: 
+     /**
+      * Calls SendReceive of the RSessionBase object.
+      * @param aSerializedData serialized by the caller.
+      * @param aInterfaceName Interface name
+      * @param requestType Opcode
+      */
+     TInt sendRequest(QByteArray& aSerializedData,
+    		 QString aInterfaceName,
+    		 SmfRequestTypeID requestType);
+     /**
+      * This overloaded API is for ESmfGetServices, where data should be
+      * fetched synchronously
+      */
+     QByteArray sendRequest(QString aInterfaceName,
+    		 SmfRequestTypeID requestType);
+     /**
+      * For testing purpose only
+      */
+     TInt sendDummyRequest(QByteArray* provider,QString aInterfaceName,
+    		 SmfRequestTypeID requestType);
+
+     /**
+     * CancelRequest.
+     * Cancels an outstanding request.
+     */
+     void CancelRequest() ;
+     
+
+
+ protected: // Functions from base classes
+
+     /**
+     * From CActive, RunL.
+     * Callback function.
+     * Invoked to handle responses from the server.
+     */
+     void RunL();
+
+     /**
+     * From CActive, DoCancel.
+     * Cancels any outstanding operation.
+     */
+     void DoCancel();
+     
+     TInt RunError(TInt aError);
+
+ private: // Constructors and destructors
+
+     /**
+     * CSmfClientSymbian.
+     * Performs the first phase of two phase construction.
+     */
+     CSmfClientSymbian();
+
+     /**
+     * ConstructL.
+     * Performs the second phase construction of a
+     * CSmfClientSymbian object.
+     */
+     void ConstructL();
+     
+     //debugging
+     void writeLog(QString log);
+
+ private: // Data
+
+     /**
+     * iSession, the server session.
+     */
+     RSmfClientSymbianSession iSession;
+     /**
+      * For callback, when the client gets serviced by the server
+      */
+     smfObserver* iObserver;
+     
+     //Interface name, to be passed to the server
+     TBuf<128> iInterfaceName;
+     QString iInterfaceNameQt;
+     //Data ptr
+     TPtr iDataPtr;
+     
+     //Bytearray
+     QByteArray* iBytearray;
+     HBufC* iBuffer;
+     TInt iMaxMessageSize;
+     
+ 	/**
+ 	 * Testing
+ 	 */
+ 	QStringList dummyList;
+ 	QByteArray* dummyArray;
+
+ 	
+};
+
+#endif /* SMFCLIENTSYMBIAN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfclientsymbiansession.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+
+#ifndef SMFCLIENTSYMBIANSESSION_H_
+#define SMFCLIENTSYMBIANSESSION_H_
+
+#include <e32cmn.h>
+#include <QByteArray>
+#include <QString>
+#include <QVariant>
+#include <QList>
+#include "smfglobal.h"
+
+/**
+ * Corresponds to client session in Symbian
+ */
+class RSmfClientSymbianSession : public RSessionBase
+{
+public:
+	/**
+	 * Constructs
+	 */
+	RSmfClientSymbianSession();
+	/**
+	 * Creates the server process if not already running and creates session
+	 * @return Error code while creating server process/ creating session
+	 */
+    TInt connectToServer();
+    TVersion Version() const{return TVersion(0,0,1);};
+    /**
+     * Calls SendReceive with requestType opcode and packaged data
+     * depending on requestType
+     */
+    TInt sendRequest(SmfRequestTypeID requestType);
+    void Close(){};
+	bool isConnected();
+	bool connected;
+	void sendAsyncRequest(QByteArray& aSerializedData,
+			QString aInterfaceName,
+			SmfRequestTypeID aRequestType,
+			TRequestStatus& aStatus);
+	/**
+	 * This for getservices only
+	 */
+	TPtr8 sendSyncRequest(QString aInterfaceName,
+			SmfRequestTypeID aRequestType);
+	void writeLog(QString log) const;
+    /**
+     * Returns data,used to return back the data received from server
+     */
+    TPtr8 getData()
+			{
+			 return iDataPtr;
+			}
+    TInt getLastRequest()
+    	{
+    	return iLastRequest;
+    	}
+	/**
+	 * Following are to form message body.
+	 */
+	QByteArray iBaseProvider;
+    TBuf8<525> iProviderSymbian;
+    TBuf<125> iInterfaceSymbian;
+    TBuf8<125> iInterfaceSymbian8;
+	QString iInterfaceName;
+	QByteArray iInterfaceNamebyte;
+
+	TPtr8 iDataPtr;
+	TPtr iDataPtr16;
+	HBufC8* iBuffer;
+	HBufC* iBuffer16;
+	HBufC* iIntfNameBuffer;
+	HBufC8* iIntfNameBuffer8;
+	HBufC8* iProviderBuf;
+	TPtr8 iPtrProvider;
+	TPtr iIntfNamePtr;
+	TPtr8 iIntfNamePtr8;
+	
+	TInt iMaxMessageSize;
+	/**
+	 * Last request opcode
+	 */
+	TInt iLastRequest;
+	
+private:
+	QList<QVariant*> result;
+	
+
+	
+};
+#endif /* SMFCLIENTSYMBIANSESSION_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfcontactfetcher.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,81 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfContactFetcher class is for fetching SmfContact related info
+ *
+ */
+
+#include "smfcontactfetcher.h"
+#include "smfcontactfetcher_p.h"
+
+SmfContactFetcher::SmfContactFetcher(SmfProvider* baseProvider)
+  {
+  m_baseProvider = baseProvider;
+  //creating private impl wrapper
+  m_private = new SmfContactFetcherPrivate(this);
+  }
+SmfContactFetcher::SmfContactFetcher(SmfProvider* baseProvider, SmfContact* contact)
+{
+	m_baseProvider = baseProvider;
+	m_frndContact = contact;
+	//creating private impl wrapper
+	m_private = new SmfContactFetcherPrivate(this);
+}
+SmfContactFetcher::~SmfContactFetcher()
+{
+	if(m_baseProvider)
+	{
+		delete m_baseProvider;
+		m_baseProvider = NULL;
+	}
+	if(m_frndContact)
+	{
+		delete m_frndContact;
+		m_frndContact = NULL;
+	}
+	//TODO:- Request to unload the plugin
+}
+bool  SmfContactFetcher::friends(int pageNum,int perPage)
+{
+m_private->friends(pageNum,perPage);
+}
+bool SmfContactFetcher::followers(int pageNum,int perPage)
+{
+	m_private->followers(pageNum,perPage);
+}
+void  SmfContactFetcher::search(SmfContact* contact,int pageNum,int perPage) 
+{
+	m_private->search(contact,pageNum,perPage);
+}
+bool  SmfContactFetcher::searchNear(SmfLocation* location,SmfLocationSearchBoundary proximity,int pageNum,int perPage) 
+{
+	//To be implemented
+}
+bool SmfContactFetcher::groups(int pageNum,int perPage) 
+{
+	m_private->groups(pageNum,perPage);
+}
+bool  SmfContactFetcher::searchInGroup(SmfGroup group,int pageNum,int perPage) 
+{
+	m_private->searchInGroup(group,pageNum,perPage);
+}
+void SmfContactFetcher::customRequest(const int& operationId,QByteArray* customData)
+{
+	//To be implemented
+}
+SmfProvider*  SmfContactFetcher::getProvider() 
+{
+	return m_baseProvider;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfcontactfetcher.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,231 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#ifndef SMFCONTACTHETCHER_H
+#define SMFCONTACTHETCHER_H
+
+#include <QObject>
+#include "smfglobal.h"
+#include "smfprovider.h"
+#include "smfcontact.h"
+#include "smflocation.h"
+#include "smfgroup.h"
+class SmfProvider; //base-class for service provider
+class SmfContact; //class for Contact in a social network
+class SmfGroup; //class for a group in social network
+
+typedef QList<SmfContact>  SmfContactList;
+typedef QList<SmfGroup> SmfGroupList;
+/**
+ * @ingroup smf_client_group 
+ * Interface to search for contacts/connections from a service provider. This class
+ * provides basic functionality to allow applications to obtain list of
+ * contacts or friends in a social networking service.
+ * Note that to get the base provider info like service name, icon, description etc
+ * use getProvider().
+ * See also:
+ * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ * Interface name:- org.symbian.smf.client.contact.fetcher
+ */
+class  SMFCLIENT_EXPORT SmfContactFetcher : public QObject
+{
+  Q_OBJECT
+
+public:
+
+  /**
+   * Constructs the SmfContactFetcher.
+   * @param parent base provider info
+   * @param contact Used for searching friends of the given contact
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind
+   */
+  SmfContactFetcher(SmfProvider* baseProvider);
+  SmfContactFetcher(SmfProvider* baseProvider, SmfContact* contact);
+  ~SmfContactFetcher();
+
+public:
+  /**
+   * Get the friend listing asynchronously. The friendsListAvailable() signal
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  bool friends(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+
+  /**
+   * Get the list of followers asynchronously. The followersListAvailable() signal
+   * is emitted with SmfContactList once data is arrived. Please note that some
+   * service may not support followers/fans - FALSE is returned if not supported.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  bool followers(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE); // list of contact objects
+
+  /**
+   * Searches for a contact The searchContactFinished() signal
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  void search(SmfContact* contact,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of contact objects
+
+  /**
+   * Searches for a contacts (friends) who are near the user.
+   * Signal searchNearFinished() is emitted with SmfContactList once data is arrived.
+   * Proximity defines accuracy level
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  bool searchNear(SmfLocation* location,SmfLocationSearchBoundary proximity,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ;
+
+
+  /**
+   * Get the list of groups. The groupListAvailable() signal
+   * is emitted with SmfGroupList once data is arrived. False might be returned
+   * if this service doesn't support any mode of grouping (very rare).
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+   bool groups(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of group objects
+
+  /**
+   * Searches for Smf Contacts in an Smf group.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   * @param  group The group to be searcged in
+   */
+   bool searchInGroup(SmfGroup group,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE); // list of contact objects
+   
+   /**
+    * Request for a custom operation.
+    * @param operationId OperationId
+    * @param customData Custom data to be sent
+    * Note:-Interpretation of operationId and customData is upto the concerned
+    * plugin and client application. service provider should provide some
+    * serializing-deserializing utilities for these custom data
+    */
+   void customRequest(const int& operationId,QByteArray* customData);
+
+  //APIs to get/set base provider info (SmfProvider)
+
+  /**
+   * Gets the base provider info
+   */
+   SmfProvider* getProvider() ;
+
+signals:
+
+	/**
+	 * This signal is emitted when a request to get friends is completed.
+	 * Note if number of friends is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 *  @param list list of friends
+	 *  @param error error value
+	 *  @param resultPage Page number info
+	 *  @see friends()
+	 */
+	void friendsListAvailable(SmfContactList* list, SmfError error, SmfResultPage resultPage);
+
+	/**
+	 * This signal is emitted when a request to get followers is completed
+	 *  Note if number of followers is large, then it can download the list page by page
+	 *  In that case this signal is emitted multiple times.
+	 *  @param list list of followers
+	 *  @param error error value
+	 *  @param resultPage Page number info
+	 *  @see followers()
+	 */
+	void followersListAvailable(SmfContactList* list, SmfError error, SmfResultPage resultPage);
+
+	/**
+	 * This signal is emitted when a request to get groups is completed
+	 * Note if number of groups is large, then it can download the list page by page
+	 *  In that case this signal is emitted multiple times.
+	 *  @param list list of groups
+	 *  @param error error value
+	 *  @param resultPage Page number info
+	 *  @see groups()
+	 */
+	void groupListAvailable(SmfGroupList* list, SmfError error, SmfResultPage resultPage);
+
+	/**
+	 * Emitted when search for a contact is finished.
+	 * Note if number of contacts in the search is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list List of filtered contacts
+	 * @param resultPage Page number info
+	 * @see search()
+	 */
+	void searchContactFinished(SmfContactList* list,SmfError error, SmfResultPage resultPage);
+
+
+	/**
+	 * Emitted when search for contacts who are near a geographic location, is finished.
+	 * Note if number of contacts in the search is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list List of filtered contacts
+	 * @param resultPage Page number info
+	 * @see search()
+	 */
+	void searchNearFinished(SmfContactList* list,SmfError error, SmfResultPage resultPage);
+
+	/**
+	 * Emitted when search for a contact in a group is finished
+	 * Note if number of contacts in the search is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list list of filtered contacts
+	 * @param resultPage Page number info
+	 * @see searchInGroup()
+	 */
+	void searchInGroupFinished(SmfContactList* list,SmfError error, SmfResultPage resultPage);
+	
+	/**
+	 * Emitted when custom data is available
+	 * @param operationId Requested operation id
+	 * @param customData Custom data received, interpretation is not the responsibility of Smf
+	 */
+	void customDataAvailable(int operationId, QByteArray* customData);
+	//so that private impl can directly call emit
+	friend class SmfContactFetcherPrivate;
+private:
+  SmfProvider* m_baseProvider;
+  SmfContact* m_frndContact; //used for searching
+  //private impl wrapper
+  SmfContactFetcherPrivate* m_private;
+
+};
+
+SMF_SERVICE_NAME(SmfContactFetcher, "org.symbian.smf.client.contact.fetcher\0.2")
+#endif // SMFCONTACTHETCHER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfcontactfetcher_p.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,323 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+#include "smfcontactfetcher_p.h"
+#ifdef WRITE_LOG
+#include <QFile>
+#include <QTextstream>
+#endif
+#ifdef Q_OS_SYMBIAN
+#include "SmfClientSymbian.h"
+#else
+#include "SmfClientQt.h"
+#endif
+ /**
+   * Constructs the SmfContactFetcher.
+   * @param parent base provider info
+   * @param contact Used for searching friends of the given contact
+   * Seeing as this is a plug-in implementation, these will realistically
+   * be generated by SMF factory of some kind
+   */
+  SmfContactFetcherPrivate::SmfContactFetcherPrivate(SmfContactFetcher* contactFetcher)
+  : m_contactFetcher(contactFetcher),m_contactList(0)
+	  {
+	  //private impl for symbian
+	#ifdef Q_OS_SYMBIAN
+	m_SmfClientPrivate = CSmfClientSymbian::NewL(this);
+	#endif
+	  }
+  SmfContactFetcherPrivate::~SmfContactFetcherPrivate()
+	  {
+
+	  }
+
+  /**
+   * Get the friend listing asynchronously. The friendsListAvailable() signal
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  bool  SmfContactFetcherPrivate::friends(int pageNum,int perPage)
+	  {
+	  m_providerSerialized.clear();
+	  //We need to pass Opcode and SmfProvider serialized into bytearray 
+	  
+	  m_baseProvider = m_contactFetcher->getProvider();
+	  //serialize start
+	  QDataStream write(&m_providerSerialized,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  //serialize end
+	  
+	  
+	  QString intfName(contactFetcherInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_providerSerialized,intfName,SmfContactGetFriends);
+	  }
+
+  /**
+   * Get the list of followers asynchronously. The followersListAvailable() signal
+   * is emitted with SmfContactList once data is arrived. Please note that some
+   * service may not support followers/fans - FALSE is returned if not supported.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  bool SmfContactFetcherPrivate::followers(int pageNum,int perPage)
+	  {
+	  //We need to pass Opcode and SmfProvider serialized into bytearray 
+	  
+	  m_baseProvider = m_contactFetcher->getProvider();
+	  //serialize start
+	  QDataStream write(&m_providerSerialized,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  //serialize end
+	  
+	  
+	  QString intfName(contactFetcherInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_providerSerialized,intfName,SmfContactGetFollowers);
+	  }
+  /**
+   * Searches for a contact The searchContactFinished() signal
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  void  SmfContactFetcherPrivate::search(SmfContact* contact,int pageNum,int perPage) 
+	  {
+	  //We need to pass Opcode and SmfProvider+SmfContact serialized into bytearray 
+	  
+	  m_baseProvider = m_contactFetcher->getProvider();
+	  m_contact = contact;
+	  //serialize start
+	  QDataStream write(&m_providerSerialized,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  //now serialize SmfContact 
+	  write<<*(m_contact);
+	  //serialize end
+	  
+	  
+	  QString intfName(contactFetcherInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_providerSerialized,intfName,SmfContactSearch);
+	  }
+
+  /**
+   * Searches for a contacts (friends) who are near the user.
+   * Signal searchNearFinished() is emitted with SmfContactList once data is arrived.
+   * Proximity defines accuracy level
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  //TODO:-implement
+//   bool  SmfContactFetcherPrivate::searchNear(SmfPlace* location,SmfLocationSearchBoundary proximity,int pageNum,int perPage) 
+//	   {
+//	   
+//	   }
+
+
+  /**
+   * Get the list of groups. The groupListAvailable() signal
+   * is emitted with SmfGroupList once data is arrived. False might be returned
+   * if this service doesn't support any mode of grouping (very rare).
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+   bool SmfContactFetcherPrivate::groups(int pageNum,int perPage) 
+	   {
+		  //We need to pass Opcode and SmfProvider serialized into bytearray 
+		  
+		  m_baseProvider = m_contactFetcher->getProvider();
+		  //serialize start
+		  QDataStream write(&m_providerSerialized,QIODevice::WriteOnly);
+		  write<<*(m_baseProvider);
+		  //serialize end
+		  
+		  
+		  QString intfName(contactFetcherInterface);
+		  
+		  //call private impl's send method
+		  m_SmfClientPrivate->sendRequest(m_providerSerialized,intfName,SmfContactGetGroups);
+	   }
+
+  /**
+   * Searches for Smf Contacts in an Smf group.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   * @param  group The group to be searcged in
+   */
+bool  SmfContactFetcherPrivate::searchInGroup(SmfGroup group,int pageNum,int perPage) 
+   {
+	  //We need to pass Opcode and SmfProvider+SmfGroup serialized into bytearray 
+	  
+	  m_baseProvider = m_contactFetcher->getProvider();
+	  m_grp = group;
+	  //serialize start
+	  QDataStream write(&m_providerSerialized,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  //now serialize SmfGroup 
+	  write<<m_grp;
+	  //serialize end
+	  
+	  
+	  QString intfName(contactFetcherInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_providerSerialized,intfName,SmfContactSearch);
+   }
+
+
+void SmfContactFetcherPrivate::resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error)
+   	{
+	writeLog("SmfContactFetcherPrivate::resultsAvailable");
+	
+	//note:- "result" is serialized and we need to de-serialize it as per opcode
+	//TODO:- order of serialization Error value followed by data
+	
+   	QDataStream reader(&result,QIODevice::ReadOnly);
+   	
+   	//Now de-serialize it based on opcode
+   	switch(opcode)
+   		{
+   		case SmfContactGetFriendsComplete:
+   			{
+
+   			if(m_contactList)
+   				{
+				delete m_contactList;
+				m_contactList = NULL;
+   				}
+   			m_contactList = new SmfContactList;
+   			//TODO
+//   			SmfError error;
+//   			reader>>error;
+//   			writeLog("Error=");
+//   			writeLog(QString::number(error));
+//   			SmfError err = (SmfError)error;
+   			m_frndist.clear();
+   			reader>>m_frndist;
+   			writeLog("m_frndist.count=");
+   			writeLog(QString::number(m_frndist.count()));
+   			//not incorporating paging now
+   			SmfResultPage page;
+
+   			emit m_contactFetcher->friendsListAvailable(&m_frndist,SmfNoError,page);
+   			
+   			}
+   			break;
+   		case SmfContactGetFollowersComplete:
+   			{
+   			if(m_contactList)
+   				{
+				delete m_contactList;
+				m_contactList = NULL;
+   				}
+   			m_contactList = new SmfContactList;
+   			quint32 error;
+   			reader>>error;
+   			SmfError err = (SmfError)error;
+   			reader>>*(m_contactList);
+   			//not incorporating paging now
+   			SmfResultPage page;
+
+   			emit m_contactFetcher->followersListAvailable(m_contactList,err,page);
+			
+   			}
+   			break;
+   		case SmfContactGetGroupsComplete:
+   			{
+   			writeLog("Before m_grpList.clear=");
+   			m_grpList.clear();
+   			writeLog("Before reader>>m_grpList=");
+   			reader>>m_grpList ;
+   			//not incorporating paging now
+   			SmfResultPage page;
+   			writeLog("m_grpList.count=");
+   			writeLog(QString::number(m_grpList.count()));
+   			emit m_contactFetcher->groupListAvailable(&m_grpList,SmfNoError,page);
+   			
+   			}
+   			break;
+   		case SmfContactSearchComplete:
+   			{
+   			if(m_contactList)
+   				{
+				delete m_contactList;
+				m_contactList = NULL;
+   				}
+   			m_contactList = new SmfContactList;
+   			quint32 error;
+   			reader>>error;
+   			SmfError err = (SmfError)error;
+   			reader>>*(m_contactList);
+   			//not incorporating paging now
+   			SmfResultPage page;
+   			//searchContactFinished
+   			emit m_contactFetcher->searchContactFinished(m_contactList,err,page);
+   			}
+   			break;
+   		default:
+   			writeLog("Before m_grpList.clear=");
+   			m_grpList.clear();
+   			writeLog("Before reader>>m_grpList=");
+   			reader>>m_grpList ;
+   			//not incorporating paging now
+   			SmfResultPage page;
+   			writeLog("m_grpList.count=");
+   			writeLog(QString::number(m_grpList.count()));
+   			emit m_contactFetcher->groupListAvailable(&m_grpList,SmfNoError,page);
+   		}
+   	
+   	}
+void SmfContactFetcherPrivate::writeLog(QString log) const
+	{
+	QFile file("c:\\data\\SmfClientLogs.txt");
+    if (!file.open(QIODevice::Append | QIODevice::Text))
+	         return;
+    QTextStream out(&file);
+    out << log << "\n";
+    file.close();
+
+	}
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfError &err )
+	{
+	quint32 errInt = (quint32)err;
+	aDataStream<<errInt;
+	return aDataStream;
+	}
+
+
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfError &err )
+	{
+	quint32 errInt;
+	aDataStream>>errInt;
+	err = (SmfError)errInt;
+	return aDataStream;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfcontactfetcher_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,156 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+
+#ifndef SMFCLIENTPRIVATE_H_
+#define SMFCLIENTPRIVATE_H_
+/**
+ * Private Qt wrapper
+ * Provided to accomodate diff facilities in diff platforms.
+ * Uses Symbian client-server for Symbian
+ * QDbus for linux
+ * QLocalserver for rest of the platforms
+ * Note:- only symbian client-server impl is provided at the moment
+ **/
+#include "smfprovider.h"
+#include "SmfClientGlobal.h"
+#include "smfGlobal.h"
+#include "SmfObserver.h"
+
+class SmfProvider;
+
+
+#include <QObject>
+#include <QDateTime>
+#include <QStringList>
+
+#include "SmfObserver.h"
+#include "smfcontactfetcher.h"
+#include "smfpostprovider.h"
+#ifdef Q_OS_SYMBIAN
+class CSmfClientSymbian;
+#else
+class SmfClientQt;
+#endif
+
+
+class SmfContactFetcherPrivate : public smfObserver
+{
+  Q_OBJECT
+
+public:
+
+
+  SmfContactFetcherPrivate(SmfContactFetcher* contactFetcher=0);
+  ~SmfContactFetcherPrivate();
+  //Note we need to expose the methods later through some macro
+public:
+  /**
+   * Get the friend listing asynchronously. The friendsListAvailable() signal
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  bool friends(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+
+  /**
+   * Get the list of followers asynchronously. The followersListAvailable() signal
+   * is emitted with SmfContactList once data is arrived. Please note that some
+   * service may not support followers/fans - FALSE is returned if not supported.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  bool followers(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE); // list of contact objects
+
+  /**
+   * Searches for a contact The searchContactFinished() signal
+   * is emitted with SmfContactList once data is arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  void search(SmfContact* contact,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of contact objects
+
+  /**
+   * Searches for a contacts (friends) who are near the user.
+   * Signal searchNearFinished() is emitted with SmfContactList once data is arrived.
+   * Proximity defines accuracy level
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  //TODO:-implement 
+  //bool searchNear(SmfPlace* location,SmfLocationSearchBoundary proximity,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ;
+
+
+  /**
+   * Get the list of groups. The groupListAvailable() signal
+   * is emitted with SmfGroupList once data is arrived. False might be returned
+   * if this service doesn't support any mode of grouping (very rare).
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+   bool groups(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ; // list of group objects
+
+  /**
+   * Searches for Smf Contacts in an Smf group.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   * @param  group The group to be searcged in
+   */
+   bool searchInGroup(SmfGroup group,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE) ;
+   
+   //from smfobserver
+   void resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error);
+private:
+  SmfProvider* m_baseProvider;
+  //serialized byte array of provider
+  QByteArray m_providerSerialized;
+#ifdef Q_OS_SYMBIAN
+  CSmfClientSymbian* m_SmfClientPrivate;
+  friend class CSmfClientSymbian;
+#else
+  SmfClientQt* m_SmfClientPrivate;
+  friend class SmfClientQt;
+#endif
+  bool m_connected;
+  SmfContactFetcher* m_contactFetcher;
+  SmfContactList* m_contactList;
+  QList<SmfGroup> m_grpList;
+  SmfContactList m_frndist;
+  SmfContact* m_contact;
+  SmfGroup m_grp;
+  void writeLog(QString log) const;
+  //debugging
+//  SmfLogger* logger;
+  //void writeLog(QString log) const;
+};
+
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfError &err );
+
+
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfError &err );
+#endif /* SMFCLIENTPRIVATE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfgallery.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,99 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0"
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * The SmfGallery class 
+ *
+ */
+
+#include "smfgallery.h"
+#include "smfgallery_p.h"
+
+
+  SmfGallery::SmfGallery(SmfProvider* baseprovider):m_baseProvider(baseprovider)
+	  {
+	  //creating private impl wrapper
+	  m_private = new SmfGalleryPrivate(this);
+	  }
+  SmfGallery::~SmfGallery()
+	  {
+	  if(m_private)
+		  {
+		  delete m_private;
+		  m_private = NULL;
+		  }
+	  }
+
+  /**
+   * Get the picture listing asynchronously.
+   * The picturesAvailable() signal is emitted with SmfPictureList once the pictures have arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  void SmfGallery::pictures(int pageNum,int perPage)
+	  {
+	  m_private->pictures(pageNum,perPage);
+	  }
+
+  /**
+   * Returns a user title/caption for the picture
+   */
+  QString SmfGallery::description(SmfPicture& picture)
+	  {
+	  m_private->description(picture);
+	  }
+
+  //APIs to get/set base provider info (SmfProvider)
+
+  /**
+   * Gets the base provider info
+   */
+   SmfProvider* SmfGallery::getProvider() 
+	   {
+	   return m_baseProvider;
+	   }
+
+	/**
+	 * Upload an image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param image the image to be uploaded
+	 */
+   void SmfGallery::upload(SmfPicture* image) 
+	   {
+	   m_private->upload(image);
+	   }
+
+	/**
+	 * Upload an list image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param images the list image to be uploaded
+	 */
+   void SmfGallery::upload(SmfPictureList* images) 
+	   {
+	   m_private->upload(images);
+	   }
+
+  /**
+   * Posts a comment for an image. uploadFinished() signal is emitted
+   * with success of the post once comment is posted.
+   * @param image Image to comment on
+   * @param comment Comment to post
+   */
+   void SmfGallery::postComment(SmfPicture image, SmfComment comment) 
+	   {
+	   m_private->postComment(image,comment);
+	   }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfgallery.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,152 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0"
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * The SmfGallery class 
+ *
+ */
+
+#ifndef SMFGALLERY_H
+#define SMFGALLERY_H
+
+#include "smfglobal.h"
+#include "smfprovider.h"
+#include "smfclientglobal.h"
+#include "smfpicture.h"
+#include "smfcomment.h"
+
+#include <QObject>
+#include <QDateTime>
+#include <QStringList>
+
+#include <qmobilityglobal.h>
+
+
+
+class SmfGalleryPrivate;
+/**
+ * @ingroup smf_client_group 
+ * Interface to a remote gallery service. This class
+ * provides some basic gallery functionality to allow applications
+ * to interact with a picture gallery in a social network.
+ *
+ * Note that branding information for the particular service implementation
+ * is available from getProvider() API. See also:
+ * SmfProvider::serviceName(), SmfProvider::serviceIcon()
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ * Interface name for SmfGallery org.symbian.smf.client.gallery
+ */
+class SMFCLIENT_EXPORT SmfGallery : public QObject
+{
+  Q_OBJECT
+
+public:
+  /**
+   * Constructs SmfGallery.
+   * @param baseProvider The base provider info
+   * Seeing as this is a plug-in implementation, these will realistically
+   be generated by SMF factory of some kind
+   */
+
+  SmfGallery(SmfProvider* baseprovider);
+  ~SmfGallery();
+
+public:
+  /**
+   * Get the picture listing asynchronously.
+   * The picturesAvailable() signal is emitted with SmfPictureList once the pictures have arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  void pictures(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+
+  /**
+   * Returns a user title/caption for the picture
+   */
+  QString description(SmfPicture& picture);
+  /**
+   * Gets the base provider info
+   */
+   SmfProvider* getProvider() ;
+	//friend so that it can directly emit SmfPostProvider's signal
+	friend class SmfGalleryPrivate;
+public slots:
+	/**
+	 * Upload an image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param image the image to be uploaded
+	 */
+   void upload(SmfPicture* image) ;
+
+	/**
+	 * Upload an list image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param images the list image to be uploaded
+	 */
+   void upload(SmfPictureList* images) ;
+
+  /**
+   * Posts a comment for an image. uploadFinished() signal is emitted
+   * with success of the post once comment is posted.
+   * @param image Image to comment on
+   * @param comment Comment to post
+   */
+   void postComment(SmfPicture image, SmfComment comment) ;
+   /**
+	* Request for a custom operation.
+	* @param operationId OperationId
+	* @param customData Custom data to be sent
+	* Note:-Interpretation of operationId and customData is upto the concerned
+	* plugin and client application. service provider should provide some
+	* serializing-deserializing utilities for these custom data
+	*/
+   void customRequest(const int& operationId,QByteArray* customData){/*to be implemented*/};
+signals:
+	/*
+	 * Notification on arrival of list of SmfPicture as a result of request.
+	 * Note if number of friends is large, then it can download the list page by page.
+	 * In that case this signal is emitted multiple times.
+	 * through pictures().
+	 * @param pics Picture list
+	 * @param error Error string
+	 * @param resultPage Page number info
+	 */
+	void picturesAvailable(SmfPictureList* pics, SmfError error, SmfResultPage resultPage);
+
+  /**
+   * Notification of the success of the uploading of image/comment
+   * @param error The upload success result of each individual pictures
+   */
+  void uploadFinished(QList<bool> error);
+	/**
+	 * Emitted when custom data is available
+	 * @param operationId Requested operation id
+	 * @param customData Custom data received, interpretation is not the responsibility of Smf
+	 */
+	void customDataAvailable(int operationId, QByteArray* customData);
+private:
+	SmfProvider* m_baseProvider;
+	//private impl wrapper
+	SmfGalleryPrivate* m_private;
+
+};
+
+SMF_SERVICE_NAME(SmfGallery, "org.symbian.smf.client.gallery\0.2")
+
+#endif // SMFGALLERY_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfgallery_p.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,218 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0"
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * Private implementation for SmfGallery class 
+ *
+ */
+#include "smfgallery_p.h"
+//logging headers
+#ifdef WRITE_LOG
+#include <QTextStream>
+#include <QFile>
+#endif
+#ifdef Q_OS_SYMBIAN
+#include "smfclientsymbian.h"
+#else
+#include "SmfClientQt.h"
+#endif
+
+  SmfGalleryPrivate::SmfGalleryPrivate(SmfGallery* gallery)
+  : m_gallery(gallery)
+  	{
+  	  //private impl for symbian
+  	#ifdef Q_OS_SYMBIAN
+  	m_SmfClientPrivate = CSmfClientSymbian::NewL(this);
+  	#endif
+  	}
+  SmfGalleryPrivate::~SmfGalleryPrivate()
+	  {
+	  if(m_SmfClientPrivate)
+		  {
+		  delete m_SmfClientPrivate;
+		  m_SmfClientPrivate = NULL;
+		  }
+	  }
+  
+  /**
+   * Get the picture listing asynchronously.
+   * The picturesAvailable() signal is emitted with SmfPictureList once the pictures have arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  void SmfGalleryPrivate::pictures(int pageNum,int perPage)
+	  {
+	  //We need to pass Opcode and SmfProvider serialized into bytearray 
+	  
+	  m_baseProvider = m_gallery->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  //serialize end
+	  QString intfName(galleryInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfPictureGetPictures);
+	  }
+
+  /**
+   * Returns a user title/caption for the picture
+   */
+  QString SmfGalleryPrivate::description(SmfPicture& picture)
+	  {
+	  //We need to pass Opcode and SmfProvider+SmfPicture serialized into bytearray 
+	  
+	  m_baseProvider = m_gallery->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  write<<picture;
+	  //serialize end
+	  QString intfName(galleryInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfPictureDescription);
+	  //TODO:-to be implemented
+	  return QString();
+	  }
+  /**
+	 * Upload an image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param image the image to be uploaded
+	 */
+   void SmfGalleryPrivate::upload(SmfPicture* image)
+	   {
+		  //We need to pass Opcode and SmfProvider+SmfPicture serialized into bytearray 
+		  
+		  m_baseProvider = m_gallery->getProvider();
+		  //serialize start
+		  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+		  write<<*(m_baseProvider);
+		  write<<*(image);
+		  //serialize end
+		  QString intfName(galleryInterface);
+		  
+		  //call private impl's send method
+		  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfPictureUpload);
+		}
+
+	/**
+	 * Upload an list image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param images the list image to be uploaded
+	 */
+   void SmfGalleryPrivate::upload(SmfPictureList* images)
+	   {
+		  //We need to pass Opcode and SmfProvider+SmfPictureList serialized into bytearray 
+		  
+		  m_baseProvider = m_gallery->getProvider();
+		  //serialize start
+		  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+		  write<<*(m_baseProvider);
+		  write<<*(images);
+		  //serialize end
+		  QString intfName(galleryInterface);
+		  
+		  //call private impl's send method
+		  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfPictureMultiUpload);
+		}
+
+  /**
+   * Posts a comment for an image. uploadFinished() signal is emitted
+   * with success of the post once comment is posted.
+   * @param image Image to comment on
+   * @param comment Comment to post
+   */
+   void SmfGalleryPrivate::postComment(SmfPicture image, SmfComment comment)
+	   {
+		  //We need to pass Opcode and SmfProvider+SmfPicture+SmfComment serialized into bytearray 
+		  
+		  m_baseProvider = m_gallery->getProvider();
+		  //serialize start
+		  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+		  write<<*(m_baseProvider);
+		  write<<image;
+		  write<<comment;
+		  //serialize end
+		  QString intfName(galleryInterface);
+		  
+		  //call private impl's send method
+		  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfPicturePostComment);
+		}
+   //from smfobserver
+   void SmfGalleryPrivate::resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error)
+	   {
+		writeLog("SmfPostProviderPrivate::resultsAvailable");
+		
+		//note:- "result" is serialized and we need to de-serialize it as per opcode
+		//TODO:- order of serialization Error value followed by data
+		
+		QDataStream reader(&result,QIODevice::ReadOnly);
+		
+		//Now de-serialize it based on opcode
+		switch(opcode)
+			{
+			case SmfPictureGetPicturesComplete:
+				{
+					if(m_picList)
+						{
+						delete m_picList;
+						m_picList = NULL;
+						}
+
+					m_picList = new SmfPictureList;
+					reader>>*(m_picList);
+					writeLog("m_picList.count=");
+					writeLog(QString::number(m_picList->count()));
+//					foreach(SmfPicture pic,*m_picList)
+//						{
+
+//						}
+					//not incorporating paging now
+					SmfResultPage page;
+
+					emit m_gallery->picturesAvailable(m_picList,error,page);
+				
+				}
+				break;
+			case SmfPictureUploadComplete:
+			case SmfPicturePostCommentComplete:
+				{
+					bool success;
+					reader>>success;
+					writeLog("success=");
+					if(success)
+						writeLog("true");
+					QList<bool> successList;
+					successList.append(success);
+					emit m_gallery->uploadFinished(successList);
+				
+				}
+				break;
+			case SmfPictureMultiUpload:
+				{
+				QList<bool> successList;
+				reader>>successList;
+				emit m_gallery->uploadFinished(successList);
+			
+			}
+				break;
+	//		default:
+	//			//should panic?
+	//			
+			}
+	   }
+   
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfgallery_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,118 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0"
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ *
+ * Description:
+ * Private implementation for SmfGallery class 
+ *
+ */
+/**
+ * Private Qt wrapper
+ * Provided to accomodate diff facilities in diff platforms.
+ * Uses Symbian client-server for Symbian
+ * QDbus for linux
+ * QLocalserver for rest of the platforms
+ * Note:- only symbian client-server impl is provided at the moment
+ **/
+
+#include "smfprovider.h"
+#include "SmfClientGlobal.h"
+#include "smfGlobal.h"
+#include "SmfObserver.h"
+
+class SmfProvider;
+
+
+#include <QObject>
+#include <QDateTime>
+#include <QStringList>
+
+#include "SmfObserver.h"
+#include "smfgallery.h"
+#ifdef Q_OS_SYMBIAN
+class CSmfClientSymbian;
+#else
+class SmfClientQt;
+#endif
+class SmfGalleryPrivate : public smfObserver
+{
+  Q_OBJECT
+
+public:
+
+  SmfGalleryPrivate(SmfGallery* gallery=0);
+  ~SmfGalleryPrivate();
+  
+  /**
+   * Get the picture listing asynchronously.
+   * The picturesAvailable() signal is emitted with SmfPictureList once the pictures have arrived.
+   * When the list is big user can specify the page number and per page item data.
+   * If not supplied by the user default values are used.
+   * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+   * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE
+   */
+  void pictures(int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+
+  /**
+   * Returns a user title/caption for the picture
+   */
+  QString description(SmfPicture& picture); // A user title or caption, maybe?
+
+  /**
+	 * Upload an image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param image the image to be uploaded
+	 */
+   void upload(SmfPicture* image) ;
+
+	/**
+	 * Upload an list image.Implemented as slot to connect to UI controls more easily
+	 * uploadFinished() signal is emitted with the success value of the upload
+	 * @param images the list image to be uploaded
+	 */
+   void upload(SmfPictureList* images) ;
+
+  /**
+   * Posts a comment for an image. uploadFinished() signal is emitted
+   * with success of the post once comment is posted.
+   * @param image Image to comment on
+   * @param comment Comment to post
+   */
+   void postComment(SmfPicture image, SmfComment comment) ;
+   //from smfobserver
+   void resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error);
+private:
+	  SmfProvider* m_baseProvider;
+	  //serialized byte array of provider+other info to be sent to the server
+	  //The order:- SmfProvider then params in order of their appearance in fn
+	  QByteArray m_serializedDataToServer;
+	#ifdef Q_OS_SYMBIAN
+	  CSmfClientSymbian* m_SmfClientPrivate;
+	  friend class CSmfClientSymbian;
+	#else
+	  SmfClientQt* m_SmfClientPrivate;
+	  friend class SmfClientQt;
+	#endif
+	  bool m_connected;
+	  SmfGallery* m_gallery;
+	  SmfPictureList* m_picList;
+	 void writeLog(QString log) const{};
+
+};
+
+
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfpostprovider.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,151 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#include "smfpostprovider.h"
+#include <QVector>
+#include <QTextFormat>
+
+	/**
+	 * Constructs SmfPostProvider.
+	 * @param baseProvider The base provider info
+	 * Seeing as this is a plug-in implementation, these will realistically
+	 * be generated by SMF factory of some kind
+	 */
+	SmfPostProvider::SmfPostProvider(SmfProvider* baseProvider)
+		{
+		  m_baseProvider = baseProvider;
+		  //creating private impl wrapper
+		  m_private = new SmfPostProviderPrivate(this);
+		}
+	SmfPostProvider::~SmfPostProvider()
+		{
+		
+		}
+	/**
+	 * returns maximum no of chars (unicode) that service provider can post without truncation
+	 * negative value means no limit
+	 */
+	qint32 SmfPostProvider::maxCharsInPost() const
+	{ 
+	
+	}
+	/**
+	 * returns maximum no of items that can be returned in a single query to getPosts
+	 * negative value means feature not supported.
+	 */
+	qint32 SmfPostProvider::maxItems() const
+			{ 
+		
+			}
+
+	/**
+	 * returns all the formatting of posts that this service provider supports.
+	 * May return 0 items to mean only QString is supported.
+	 */
+	QVector<QTextFormat> SmfPostProvider::supportedFormats () const
+			{
+		
+			}
+	
+	/**
+	 * returns whether this SP supports Appearence @see SmfAppearenceInfo
+	 */
+	bool SmfPostProvider::supportsAppearence () const
+			{ 
+		
+			}
+
+	/**
+	 * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
+	 * once the post lists are available
+	 * @param user user's contact in this SP, omit for self contact
+	 * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+     * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE 
+	 * @see postsAvailable()
+	 */
+	void SmfPostProvider::posts(SmfContact* user ,int pageNum,int perPage)
+		{ 
+		m_private->posts(user,pageNum,perPage);
+		}
+	
+	/**
+	 * Updates a post to own area, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData data to be posted
+	 * @param location location data
+	 */
+	void SmfPostProvider::post(SmfPost& postData,SmfLocation& location) 
+		{
+		m_private->post(postData,location);
+		} 
+	/**
+	 * Updates the last post to own area with new data, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData edited/new data to be posted
+	 * @param location location data
+	 */
+	void SmfPostProvider::updatePost(SmfPost& postData)
+		{ 
+		m_private->updatePost(postData);
+		} 
+	
+	/**
+	 * Updates a post to a particular Smf contact. the success of the post can be checked with signal
+	 * updatePostFinished() signal.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post is to be directed
+	 * @param location location data
+	 */
+	void SmfPostProvider::postDirected(SmfPost& postData,SmfContact& contact,SmfLocation* location)
+		{ 
+		m_private->postDirected(postData,contact,location);
+		}
+	
+	/**
+	 * Posts appearance info of the user.e.g. appear offline, busy, do-not-disturb
+	 * @param appearence user appearance
+	 * @see SmfPresenceInfo
+	 * @return False on Failure/Not supported 
+	 */
+	bool SmfPostProvider::postAppearence(SmfAppearenceInfo appearence)
+		{ 
+		m_private->postAppearence(appearence);
+		} 
+	/**
+	 * Share /a contact's post to user's friends and followers (e.g. retweet in twitter, share on facebook)
+	 * emits updatePostFinished() signal when done.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post belonged
+	 * @param bool whether user changed items within the post
+	 */
+	void SmfPostProvider::sharePost(SmfPost& postData,SmfContact& contact,bool edited)
+		{
+		m_private->sharePost(postData,contact,edited);
+		}
+	
+	//APIs to get/set base provider info (SmfProvider)
+	
+	/**
+	 * Gets the base provider info
+	 */
+	SmfProvider* SmfPostProvider::getProvider() const
+			{
+			return m_baseProvider;
+			}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfpostprovider.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,180 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+#ifndef SMFPOSTPROVIDER_H
+#define SMFPOSTPROVIDER_H
+
+#include <QObject>
+#include <qmobilityglobal.h>
+#include <qgeopositioninfo.h>
+#include <QTextDocument>
+
+#include "smfglobal.h"
+#include "smfclientglobal.h"
+#include "smfprovider.h"
+#include "smfcontact.h"
+#include "smflocation.h"
+#include "smfpost.h"
+#include "smfpostprovider_p.h"
+
+/**
+ * @ingroup smf_client_group 
+ * Interface to post scrap/tweet like info.
+ * Note that branding information for the particular service implementation
+ * is available from getProvider() API. See also:
+ * SmfProvider::serviceName(), SmfProvider::serviceIcon(), SmfProvider::description()
+ *
+ * Interface name for SmfPostProvider is org.symbian.smf.client.contact.posts
+ */
+class SMFCLIENT_EXPORT SmfPostProvider : public QObject
+	{
+	Q_OBJECT
+
+public:
+	/**
+	 * Constructs SmfPostProvider.
+	 * @param baseProvider The base provider info
+	 * Seeing as this is a plug-in implementation, these will realistically
+	 * be generated by SMF factory of some kind
+	 */
+	SmfPostProvider(SmfProvider* baseProvider);
+	~SmfPostProvider();
+
+
+public:
+	/**
+	 * returns maximum no of chars (unicode) that service provider can post without truncation
+	 * negative value means no limit
+	 */
+	qint32 maxCharsInPost() const;
+	/**
+	 * returns maximum no of items that can be returned in a single query to getPosts
+	 * negative value means feature not supported.
+	 */
+	qint32 maxItems() const;
+
+	/**
+	 * returns all the formatting of posts that this service provider supports.
+	 * May return 0 items to mean only QString is supported.
+	 */
+	QVector<QTextFormat> supportedFormats () const;
+	
+	/**
+	 * returns whether this SP supports Appearence @see SmfAppearenceInfo
+	 */
+	bool supportsAppearence () const;
+
+public slots:
+	/**
+	 * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
+	 * once the post lists are available
+	 * @param user user's contact in this SP, omit for self contact
+	 * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+     * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE 
+	 * @see postsAvailable()
+	 */
+	void posts(SmfContact* user = 0,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+	
+	/**
+	 * Updates a post to own area, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData data to be posted
+	 * @param location location data
+	 */
+	void post(SmfPost& postData,SmfLocation& location) ; 
+	/**
+	 * Updates the last post to own area with new data, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData edited/new data to be posted
+	 * @param location location data
+	 */
+	void updatePost(SmfPost& postData); 
+	
+	/**
+	 * Updates a post to a particular Smf contact. the success of the post can be checked with signal
+	 * updatePostFinished() signal.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post is to be directed
+	 * @param location location data
+	 */
+	void postDirected(SmfPost& postData,SmfContact& contact,SmfLocation* location=0);
+	
+	/**
+	 * Posts appearance info of the user.e.g. appear offline, busy, do-not-disturb
+	 * @param appearence user appearance
+	 * @see SmfPresenceInfo
+	 * @return False on Failure/Not supported 
+	 */
+	bool postAppearence(SmfAppearenceInfo appearence); 
+	/**
+	 * Share /a contact's post to user's friends and followers (e.g. retweet in twitter, share on facebook)
+	 * emits updatePostFinished() signal when done.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post belonged
+	 * @param bool whether user changed items within the post
+	 */
+	void sharePost(SmfPost& postData,SmfContact& contact,bool edited);
+   /**
+	* Request for a custom operation.
+	* @param operationId OperationId
+	* @param customData Custom data to be sent
+	* Note:-Interpretation of operationId and customData is upto the concerned
+	* plugin and client application. service provider should provide some
+	* serializing-deserializing utilities for these custom data
+	*/
+   void customRequest(const int& operationId,QByteArray* customData){/*to be implemented*/};
+	//APIs to get/set base provider info (SmfProvider)
+	
+	/**
+	 * Gets the base provider info
+	 */
+	SmfProvider* getProvider() const;
+	
+signals:
+	
+	/**
+	 * Emitted when a request to  getPosts() is finished
+	 * Note if number of posts is large, then it can download the list page by page
+	 * In that case this signal is emitted multiple times.
+	 * @param list list of posts
+	 * @param error error string
+	 * @param resultPage Page number info
+	 */
+	void postsAvailable(SmfPostList* list, SmfError error, SmfResultPage resultPage);
+	
+	/**
+	 * Emitted when update post is finished.
+	 * @param success the success of the update
+	 */
+	void postFinished(bool success);
+	/**
+	 * Emitted when custom data is available
+	 * @param operationId Requested operation id
+	 * @param customData Custom data received, interpretation is not the responsibility of Smf
+	 */
+	void customDataAvailable(int operationId, QByteArray* customData);
+	//friend so that it can directly emit SmfPostProvider's signal
+	friend class SmfPostProviderPrivate;
+private:
+	SmfProvider* m_baseProvider;
+	//private impl wrapper
+	SmfPostProviderPrivate* m_private;
+};
+
+SMF_SERVICE_NAME(SmfPostProvider, "org.symbian.smf.client.contact.posts\0.2")
+#endif // SMFPOSTPROVIDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfpostprovider_p.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,277 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#include "smfpostprovider_p.h"
+//logging headers
+#ifdef WRITE_LOG
+#include <QTextStream>
+#include <QFile>
+#endif
+#ifdef Q_OS_SYMBIAN
+#include "smfclientsymbian.h"
+#else
+#include "SmfClientQt.h"
+#endif
+SmfPostProviderPrivate::SmfPostProviderPrivate(SmfPostProvider* postProvider)
+: m_postProvider(postProvider),m_postList(NULL)
+	{
+	  //private impl for symbian
+	#ifdef Q_OS_SYMBIAN
+	m_SmfClientPrivate = CSmfClientSymbian::NewL(this);
+	#endif
+	}
+SmfPostProviderPrivate::~SmfPostProviderPrivate()
+	{
+	if(m_SmfClientPrivate)
+		{
+		delete m_SmfClientPrivate;
+		m_SmfClientPrivate = NULL;
+		}
+	}
+/**
+ * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
+ * once the post lists are available
+ * @param user user's contact in this SP, omit for self contact
+ * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+ * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE 
+ * @see postsAvailable()
+ */
+void SmfPostProviderPrivate::posts(SmfContact* user ,int pageNum,int perPage)
+{
+	  //We need to pass Opcode and SmfProvider+SmfContact
+	  // (when user is not NULL) serialized into bytearray 
+	  
+	  m_baseProvider = m_postProvider->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  //TODO:- use different opcode incase post retreival is for other user
+	  //serialize SmfContact if post retrieval is for other user
+	  if(user)
+		  {
+		  //now serialize SmfContact 
+		  write<<*(user);
+		  }
+	  //serialize end
+	  QString intfName(postProviderInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfContactRetrievePosts);
+
+}
+	
+/**
+ * Updates a post to own area, the success of the post can be checked with signal
+ * updatePostFinished() signal
+ * @param postData data to be posted
+ * @param location location data
+ */
+void SmfPostProviderPrivate::post(SmfPost& postData,SmfLocation& location) 
+	{
+	  m_baseProvider = m_postProvider->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  //SmfProvider
+	  write<<*(m_baseProvider);
+	  //SmfPost
+	  write<<postData;
+	  //SmfPlace
+	  write<<location;
+	  
+	  //serialize end
+	  QString intfName(postProviderInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfContactPost);
+	}
+/**
+ * Updates the last post to own area with new data, the success of the post can be checked with signal
+ * updatePostFinished() signal
+ * @param postData edited/new data to be posted
+ * @param location location data
+ */
+void SmfPostProviderPrivate::updatePost(SmfPost& postData)
+	{
+	  m_baseProvider = m_postProvider->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  //SmfProvider
+	  write<<*(m_baseProvider);
+	  //SmfPost
+	  write<<postData;
+
+	  //serialize end
+	  QString intfName(postProviderInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfContactUpdatePost);
+	}
+
+/**
+ * Updates a post to a particular Smf contact. the success of the post can be checked with signal
+ * updatePostFinished() signal.
+ * @param postData data to be posted
+ * @param contact contact to which the post is to be directed
+ * @param location location data
+ */
+void SmfPostProviderPrivate::postDirected(SmfPost& postData,SmfContact& contact,SmfLocation* location)
+	{
+	  m_baseProvider = m_postProvider->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  //SmfProvider
+	  write<<*(m_baseProvider);
+	  //SmfPost
+	  write<<postData;
+	  //SmfContact
+	  write<<contact;
+	  //SmfPlace
+	  write<<location;
+	  //serialize end
+	  
+	  QString intfName(postProviderInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfContactPostDirected);
+	}
+
+/**
+ * Posts appearance info of the user.e.g. appear offline, busy, do-not-disturb
+ * @param appearence user appearance
+ * @see SmfPresenceInfo
+ * @return False on Failure/Not supported 
+ */
+//TODO:-How to return "supported" value? should it be synchronous?
+//Currently doing it asynchronously with the assumption of always supported
+//TODO:- implement some signal completion API
+bool SmfPostProviderPrivate::postAppearence(SmfAppearenceInfo appearence)
+	{
+	  m_baseProvider = m_postProvider->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  write<<appearence;
+	  QString intfName(postProviderInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfContactPostAppearence);
+	}
+/**
+ * Share /a contact's post to user's friends and followers (e.g. retweet in twitter, share on facebook)
+ * emits updatePostFinished() signal when done.
+ * @param postData data to be posted
+ * @param contact contact to which the post belonged
+ * @param bool whether user changed items within the post
+ */
+void SmfPostProviderPrivate::sharePost(SmfPost& postData,SmfContact& contact,bool edited)
+	{
+	  m_baseProvider = m_postProvider->getProvider();
+	  //serialize start
+	  QDataStream write(&m_serializedDataToServer,QIODevice::WriteOnly);
+	  write<<*(m_baseProvider);
+	  write<<postData;
+	  write<<contact;
+	  write<<edited;
+	  QString intfName(postProviderInterface);
+	  
+	  //call private impl's send method
+	  m_SmfClientPrivate->sendRequest(m_serializedDataToServer,intfName,SmfContactSharePost);
+	}
+/**
+* From smfobserver
+*/
+void SmfPostProviderPrivate::resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error)
+   {
+	writeLog("SmfPostProviderPrivate::resultsAvailable");
+	
+	//note:- "result" is serialized and we need to de-serialize it as per opcode
+	//TODO:- order of serialization Error value followed by data
+	
+	QDataStream reader(&result,QIODevice::ReadOnly);
+	
+	//Now de-serialize it based on opcode
+	switch(opcode)
+		{
+		case SmfContactRetrievePostsComplete:
+			{
+				if(m_postList)
+					{
+					delete m_postList;
+					m_postList = NULL;
+					}
+
+				m_postList = new SmfPostList;
+				//TODO
+	//   			SmfError error;
+	//   			reader>>error;
+	//   			writeLog("Error=");
+	//   			writeLog(QString::number(error));
+	//   			SmfError err = (SmfError)error;
+				reader>>*(m_postList);
+				writeLog("postList.count=");
+				writeLog(QString::number(m_postList->count()));
+				foreach(SmfPost post,*m_postList)
+					{
+					writeLog(post.description());
+					}
+				//not incorporating paging now
+				SmfResultPage page;
+
+				emit m_postProvider->postsAvailable(m_postList,error,page);
+			
+			}
+			break;
+		case SmfContactPostComplete:
+			{
+				bool success;
+				reader>>success;
+				writeLog("success=");
+				if(success)
+					writeLog("true");
+				emit m_postProvider->postFinished(success);
+			
+			}
+			break;
+		case SmfContactUpdatePostComplete:
+		case SmfContactPostDirectedComplete:
+		case SmfContactSharePostComplete:
+			{
+			bool success;
+			reader>>success;
+			writeLog("success=");
+			if(success)
+				writeLog("true");
+			emit m_postProvider->postFinished(success);
+			}
+//		default:
+//			//should panic?
+//			
+		}
+   }
+void SmfPostProviderPrivate::writeLog(QString log) const
+	{
+#ifdef WRITE_LOG
+	QFile file("c:\\data\\SmfClientLogs.txt");
+    if (!file.open(QIODevice::Append | QIODevice::Text))
+	         return;
+    QTextStream out(&file);
+    out << log << "\n";
+    file.close();
+#endif
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/client/smfpostprovider_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,136 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * 
+ *
+ */
+#ifndef SMFPOSTPROVIDER_P_H_
+#define SMFPOSTPROVIDER_P_H_
+
+#include "smfprovider.h"
+#include "SmfClientGlobal.h"
+#include "smfGlobal.h"
+#include "SmfObserver.h"
+
+class SmfProvider;
+class SmfPostProvider;
+
+#include <QObject>
+#include <QDateTime>
+#include <QStringList>
+
+#include "smfobserver.h"
+#include "smfpostprovider.h"
+#ifdef Q_OS_SYMBIAN
+class CSmfClientSymbian;
+#else
+class SmfClientQt;
+#endif
+
+/**
+ * Data size limits
+ */
+/**
+ * Single Post-1 MB
+ */
+const int KSmfPostMaxSize = 1000000;
+/**
+ * Private Qt wrapper
+ * Provided to accomodate diff facilities in diff platforms.
+ * Uses Symbian client-server for Symbian
+ * QDbus for linux
+ * QLocalserver for rest of the platforms
+ * Note:- only symbian client-server impl is provided at the moment
+ **/
+class SmfPostProviderPrivate: public smfObserver
+	{
+	Q_OBJECT
+
+public:
+
+	SmfPostProviderPrivate(SmfPostProvider* postProvider=0);
+	~SmfPostProviderPrivate();
+	/**
+	 * From smfobserver
+	 */
+	  void resultsAvailable(QByteArray result,SmfRequestTypeID opcode,SmfError error);
+	/**
+	 * Gets the posts asynchronously. The signal postsAvailable()with SmfPostList is emitted
+	 * once the post lists are available
+	 * @param user user's contact in this SP, omit for self contact
+	 * @param pageNum Page number to download, SMF_FIRST_PAGE denotes fresh query.
+     * @param perPage Item per page, default is SMF_ITEMS_PER_PAGE 
+	 * @see postsAvailable()
+	 */
+	void posts(SmfContact* user = 0,int pageNum=SMF_FIRST_PAGE,int perPage=SMF_ITEMS_PER_PAGE);
+	
+	/**
+	 * Updates a post to own area, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData data to be posted
+	 * @param location location data
+	 */
+	void post(SmfPost& postData,SmfLocation& location) ; 
+	/**
+	 * Updates the last post to own area with new data, the success of the post can be checked with signal
+	 * updatePostFinished() signal
+	 * @param postData edited/new data to be posted
+	 * @param location location data
+	 */
+	void updatePost(SmfPost& postData); 
+	
+	/**
+	 * Updates a post to a particular Smf contact. the success of the post can be checked with signal
+	 * updatePostFinished() signal.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post is to be directed
+	 * @param location location data
+	 */
+	void postDirected(SmfPost& postData,SmfContact& contact,SmfLocation* location=0);
+	
+	/**
+	 * Posts appearance info of the user.e.g. appear offline, busy, do-not-disturb
+	 * @param appearence user appearance
+	 * @see SmfPresenceInfo
+	 * @return False on Failure/Not supported 
+	 */
+	bool postAppearence(SmfAppearenceInfo appearence); 
+	/**
+	 * Share /a contact's post to user's friends and followers (e.g. retweet in twitter, share on facebook)
+	 * emits updatePostFinished() signal when done.
+	 * @param postData data to be posted
+	 * @param contact contact to which the post belonged
+	 * @param bool whether user changed items within the post
+	 */
+	void sharePost(SmfPost& postData,SmfContact& contact,bool edited);
+
+	private:
+	  SmfProvider* m_baseProvider;
+	  //serialized byte array of provider+other info to be sent to the server
+	  //The order:- SmfProvider then params in order of their appearance in fn
+	  QByteArray m_serializedDataToServer;
+	#ifdef Q_OS_SYMBIAN
+	  CSmfClientSymbian* m_SmfClientPrivate;
+	  friend class CSmfClientSymbian;
+	#else
+	  SmfClientQt* m_SmfClientPrivate;
+	  friend class SmfClientQt;
+	#endif
+	  bool m_connected;
+	  SmfPostProvider* m_postProvider;
+	  SmfPostList* m_postList;
+	 void writeLog(QString log) const;
+	};
+#endif /* SMFPOSTPROVIDER_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/common.pri	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,105 @@
+INCLUDEPATH += common \
+    ./
+
+PUBLIC_HEADERS += \
+	common/smfalbum.h \
+	common/smfartists.h \
+	common/smfcomment.h \
+	common/smfcontact.h \
+	common/smfevent.h \
+	common/smfgroup.h \
+	common/smflocation.h \
+	common/smflyrics.h \
+	common/smfmusicfingerprint.h \
+	common/smfmusicprofile.h \
+	common/smfmusicrating.h \
+	common/smfpicture.h \
+	common/smfplaylist.h \
+	common/smfpluginutil.h \
+	common/smfpost.h \
+	common/smfprovider.h \
+	common/smfsubtitle.h \
+	common/smftrackinfo.h \
+	common/smfclientglobal.h \
+	common/smfglobal.h \
+	common/smfobserver.h
+
+PRIVATE_HEADERS += \
+	common/smfalbum_p.h \
+	common/smfartists_p.h \
+	common/smfcomment_p.h \
+	common/smfcontact_p.h \
+	common/smfevent_p.h \
+	common/smfgroup_p.h \
+	common/smflocation_p.h \
+	common/smflyrics_p.h \
+	common/smfmusicfingerprint_p.h \
+	common/smfmusicprofile_p.h \
+	common/smfmusicrating_p.h \
+	common/smfpicture_p.h \
+	common/smfplaylist_p.h \
+	common/smfpost_p.h \
+	common/smfsubtitle_p.h \
+	common/smftrackinfo_p.h \
+	common/smfobserver.h
+
+SOURCES += \
+	common/smfalbum.cpp \
+	common/smfartists.cpp \
+	common/smfcomment.cpp \
+	common/smfcontact.cpp \
+	common/smfevent.cpp \
+	common/smfgroup.cpp \
+	common/smflocation.cpp \
+	common/smflyrics.cpp \
+	common/smfmusicfingerprint.cpp \
+	common/smfmusicprofile.cpp \
+	common/smfmusicrating.cpp \
+	common/smfpicture.cpp \
+	common/smfplaylist.cpp \
+	common/smfpluginutil.cpp \
+	common/smfpost.cpp \
+	common/smfprovider.cpp \
+	common/smfsubtitle.cpp \
+	common/smftrackinfo.cpp
+
+
+symbian: {
+	BLD_INF_RULES.prj_exports += common/smfclientglobal.h
+	BLD_INF_RULES.prj_exports += common/smfglobal.h
+	BLD_INF_RULES.prj_exports += common/smfobserver.h
+	BLD_INF_RULES.prj_exports += common/smfalbum.h
+	BLD_INF_RULES.prj_exports += common/smfalbum_p.h
+	BLD_INF_RULES.prj_exports += common/smfartists.h
+	BLD_INF_RULES.prj_exports += common/smfartists_p.h
+	BLD_INF_RULES.prj_exports += common/smfcomment.h
+	BLD_INF_RULES.prj_exports += common/smfcomment_p.h
+	BLD_INF_RULES.prj_exports += common/smfcontact.h
+	BLD_INF_RULES.prj_exports += common/smfcontact_p.h
+	BLD_INF_RULES.prj_exports += common/smfevent.h
+	BLD_INF_RULES.prj_exports += common/smfevent_p.h
+	BLD_INF_RULES.prj_exports += common/smfgroup.h
+	BLD_INF_RULES.prj_exports += common/smfgroup_p.h
+	BLD_INF_RULES.prj_exports += common/smflocation.h
+	BLD_INF_RULES.prj_exports += common/smflocation_p.h
+	BLD_INF_RULES.prj_exports += common/smflyrics.h
+	BLD_INF_RULES.prj_exports += common/smflyrics_p.h
+	BLD_INF_RULES.prj_exports += common/smfmusicfingerprint.h
+	BLD_INF_RULES.prj_exports += common/smfmusicfingerprint_p.h
+	BLD_INF_RULES.prj_exports += common/smfmusicprofile.h
+	BLD_INF_RULES.prj_exports += common/smfmusicprofile_p.h
+	BLD_INF_RULES.prj_exports += common/smfmusicrating.h
+	BLD_INF_RULES.prj_exports += common/smfmusicrating_p.h
+	BLD_INF_RULES.prj_exports += common/smfpicture.h
+	BLD_INF_RULES.prj_exports += common/smfpicture_p.h
+	BLD_INF_RULES.prj_exports += common/smfplaylist.h
+	BLD_INF_RULES.prj_exports += common/smfplaylist_p.h
+	BLD_INF_RULES.prj_exports += common/smfpluginutil.h
+	BLD_INF_RULES.prj_exports += common/smfpost.h
+	BLD_INF_RULES.prj_exports += common/smfpost_p.h
+	BLD_INF_RULES.prj_exports += common/smfprovider.h
+	BLD_INF_RULES.prj_exports += common/smfsubtitle.h
+	BLD_INF_RULES.prj_exports += common/smfsubtitle_p.h
+	BLD_INF_RULES.prj_exports += common/smftrackinfo.h
+	BLD_INF_RULES.prj_exports += common/smftrackinfo_p.h
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfalbum.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,182 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfAlbum class represents a music album
+ *
+ */
+
+#include <smfalbum.h>
+#include <smfalbum_p.h>
+
+
+/**
+ * Constructor with default argument
+ */
+SmfAlbum::SmfAlbum( )
+	{
+	d = new SmfAlbumPrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfAlbum::SmfAlbum( const SmfAlbum &aOther )
+	: d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfAlbum& SmfAlbum::operator=( const SmfAlbum &aOther )
+	{
+	d->m_name = aOther.d->m_name;
+	d->m_image = aOther.d->m_image;
+	d->m_artists = aOther.d->m_artists;
+	d->m_albumId = aOther.d->m_albumId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfAlbum::~SmfAlbum( )
+	{
+	}
+
+/**
+ * Method to get the album name
+ * @return The album name
+ */
+QString SmfAlbum::name( ) const
+	{
+	return d->m_name;
+	}
+
+/**
+ * Method to get the album's image
+ * @return The album's image
+ */
+QImage SmfAlbum::image( ) const
+	{
+	return d->m_image;
+	}
+
+/**
+ * Method to get the artist names
+ * @return The list of artists in the album
+ */
+SmfArtists SmfAlbum::artists( ) const
+	{
+	return d->m_artists;
+	}
+
+/**
+ * Method to get the id of the album
+ * @return The ID value 
+ */
+QString SmfAlbum::id( ) const
+	{
+	return d->m_albumId;
+	}
+
+/**
+ * Method to set the album name
+ * @param aName The album name
+ */
+void SmfAlbum::setName( const QString &aName )
+	{
+	d->m_name = aName;
+	}
+
+/**
+ * Method to set the album's image
+ * @param aImage The album's image
+ */
+void SmfAlbum::setImage( const QImage &aImage )
+	{
+	d->m_image = aImage;
+	}
+
+/**
+ * Method to set the artist names
+ * @param aArtists The list of artists in the album
+ */
+void SmfAlbum::setArtists( const SmfArtists &aArtists )
+	{
+	d->m_artists = aArtists;
+	}
+
+/**
+ * Method to set the id of the album
+ * @param aId The ID value 
+ */
+void SmfAlbum::setId( const QString &aId )
+	{
+	d->m_albumId = aId;
+	}
+
+/**
+ * Method for Externalization. Writes the SmfAlbum object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aAlbum The SmfAlbum object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfAlbum &aAlbum )
+	{
+	// Serialize d->m_name
+	aDataStream<<aAlbum.d->m_name;
+	
+	// Serialize d->m_image
+	aDataStream<<aAlbum.d->m_image;
+	
+	// Serialize d->m_artists
+	aDataStream<<aAlbum.d->m_artists;
+	
+	// Serialize d->m_albumId
+	aDataStream<<aAlbum.d->m_albumId;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfAlbum object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aAlbum The SmfAlbum object to be internalized
+ * @return reference to the stream
+ */
+ QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfAlbum &aAlbum)
+	{
+	// Deserialize d->m_name
+	aDataStream>>aAlbum.d->m_name;
+	
+	// Deserialize d->m_image
+	aDataStream>>aAlbum.d->m_image;
+	
+	// Deserialize d->m_artists
+	aDataStream>>aAlbum.d->m_artists;
+	
+	// Deserialize d->m_albumId
+	aDataStream>>aAlbum.d->m_albumId;
+	
+	return aDataStream;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfalbum.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,144 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfAlbum class represents a music album
+ *
+ */
+#ifndef SMFALBUM_H_
+#define SMFALBUM_H_
+
+#include <QImage>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfAlbumPrivate;
+class SmfArtists;
+
+/**
+ * @ingroup smf_common_group
+ * The SmfAlbum class represents a music album
+ */
+class SMFCLIENT_EXPORT SmfAlbum
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfAlbum( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfAlbum( const SmfAlbum &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 * @return The target reference value
+	 */
+	SmfAlbum& operator=( const SmfAlbum &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfAlbum( );
+	
+	/**
+	 * Method to get the album name
+	 * @return The album name
+	 */
+	QString name( ) const;
+	
+	/**
+	 * Method to get the album's image
+	 * @return The album's image
+	 */
+	QImage image( ) const;
+	
+	/**
+	 * Method to get the artist names
+	 * @return The list of artists in the album
+	 */
+	SmfArtists artists( ) const;
+	
+	/**
+	 * Method to get the id of the album
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the album name
+	 * @param aName The album name
+	 */
+	void setName( const QString &aName );
+	
+	/**
+	 * Method to set the album's image
+	 * @param aImage The album's image
+	 */
+	void setImage( const QImage &aImage );
+	
+	/**
+	 * Method to set the artist names
+	 * @param aArtists The list of artists in the album
+	 */
+	void setArtists( const SmfArtists &aArtists );
+	
+	/**
+	 * Method to set the id of the album
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId );
+	
+private:
+	QSharedDataPointer<SmfAlbumPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfAlbum &aAlbum );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfAlbum &aAlbum );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfAlbum object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aAlbum The SmfAlbum object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfAlbum &aAlbum );
+
+/**
+ * Method for Internalization. Reads a SmfAlbum object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aAlbum The SmfAlbum object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfAlbum &aAlbum);
+
+// Make the class SmfAlbum known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfAlbum)
+
+#endif /* SMFALBUM_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfalbum_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,64 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfAlbum class
+ *
+ */
+
+#ifndef SMFALBUM_P_H_
+#define SMFALBUM_P_H_
+
+#include <smfartists.h>
+#include <QStringList>
+#include <QSharedData>
+
+class SmfAlbumPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfAlbumPrivate( ) { 
+		m_name.clear(); 
+		m_albumId.clear();
+		
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfAlbumPrivate( const SmfAlbumPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_name ( aOther.m_name ), 
+		m_image ( aOther.m_image ),
+		m_artists ( aOther.m_artists ),
+		m_albumId ( aOther.m_albumId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfAlbumPrivate( )
+		{
+		}
+  
+	QString		m_name;		// album name
+	QImage 		m_image;	// album image
+	SmfArtists m_artists;	// album's artists
+	QString 	m_albumId;	// album Id
+	
+};
+
+#endif /* SMFALBUM_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfartists.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,157 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfArtists class represents the artists in a track or an album
+ *
+ */
+
+#include <smfartists.h>
+#include <smfartists_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfArtists::SmfArtists( )
+	{
+	d = new SmfArtistsPrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfArtists::SmfArtists( const SmfArtists &aOther )
+	:d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfArtists& SmfArtists::operator=( const SmfArtists &aOther )
+	{
+	d->m_names = aOther.d->m_names;
+	d->m_image = aOther.d->m_image;
+	d->m_url = aOther.d->m_url;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfArtists::~SmfArtists( )
+	{
+	}
+
+/**
+ * Method to get the artists names
+ * @return The list of artists
+ */
+QStringList SmfArtists::names( ) const
+	{
+	return d->m_names;
+	}
+
+/**
+ * Method to get the image of the artists
+ * @return The image of te artists
+ */
+QImage SmfArtists::image( ) const
+	{
+	return d->m_image;
+	}
+
+/**
+ * Method to get the url of the artists
+ * @return The url of the artists
+ */
+QUrl SmfArtists::url( ) const
+	{
+	return d->m_url;
+	}
+
+/**
+ * Method to set the artists names
+ * @param aList The list of artists names
+ */
+void SmfArtists::setNames( const QStringList &aList )
+	{
+	d->m_names = aList;
+	}
+
+/**
+ * Method to set the image of the artists
+ * @param aImage The image of the artists
+ */
+void SmfArtists::setImage( const QImage &aImage )
+	{
+	d->m_image = aImage;
+	}
+
+/**
+ * Method to set the url of the artists
+ * @param aUrl The url of the artists
+ */
+void SmfArtists::setUrl( const QUrl &aUrl )
+	{
+	d->m_url = aUrl;
+	}
+	
+/**
+ * Method for Externalization. Writes the SmfArtists object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aArtists The SmfArtists object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfArtists &aArtists )
+	{
+	// Serialize d->m_image
+	aDataStream<<aArtists.d->m_image;
+	
+	// Serialize d->m_names
+	aDataStream<<aArtists.d->m_names;
+	
+	// Serialize d->m_url
+	aDataStream<<aArtists.d->m_url;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfArtists object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aArtists The SmfArtists object to be internalized
+ * @return reference to the stream
+ */
+ QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfArtists &aArtists)
+	{
+	// Deserialize d->m_image
+	aDataStream>>aArtists.d->m_image;
+	
+	// Deserialize d->m_names
+	aDataStream>>aArtists.d->m_names;
+	
+	// Deserialize d->m_url
+	aDataStream>>aArtists.d->m_url;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfartists.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,132 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfArtists class represents the artists in a track or an album
+ *
+ */
+
+#ifndef SMFARTISTS_H_
+#define SMFARTISTS_H_
+
+#include <QImage>
+#include <QUrl>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfArtistsPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The SmfArtists class represents the artists in a track or an album
+ */
+class SMFCLIENT_EXPORT SmfArtists
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfArtists( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfArtists( const SmfArtists &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 */
+	SmfArtists& operator=( const SmfArtists &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfArtists( );
+	
+	/**
+	 * Method to get the artists names
+	 * @return The list of artists
+	 */
+	QStringList names( ) const;
+	
+	/**
+	 * Method to get the image of the artists
+	 * @return The image of te artists
+	 */
+	QImage image( ) const;
+	
+	/**
+	 * Method to get the url of the artists
+	 * @return The url of the artists
+	 */
+	QUrl url( ) const;
+	
+	/**
+	 * Method to set the artists names
+	 * @param aList The list of artists names
+	 */
+	void setNames( const QStringList &aList );
+	
+	/**
+	 * Method to set the image of the artists
+	 * @param aImage The image of the artists
+	 */
+	void setImage( const QImage &aImage );
+	
+	/**
+	 * Method to set the url of the artists
+	 * @param aUrl The url of the artists
+	 */
+	void setUrl( const QUrl &aUrl );
+		
+private:
+	QSharedDataPointer<SmfArtistsPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfArtists &aArtists );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfArtists &aArtists );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfArtists object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aArtists The SmfArtists object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfArtists &aArtists );
+
+/**
+ * Method for Internalization. Reads a SmfArtists object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aArtists The SmfArtists object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfArtists &aArtists);
+
+// Make the class SmfArtists known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfArtists)
+
+#endif /* SMFARTISTS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfartists_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfArtists class
+ *
+ */
+
+#ifndef SMFARTISTS_P_H_
+#define SMFARTISTS_P_H_
+
+#include <QImage>
+#include <QUrl>
+#include <QStringList>
+#include <QSharedData>
+
+class SmfArtistsPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfArtistsPrivate( ) { 
+		m_names.clear(); 
+		m_url.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfArtistsPrivate( const SmfArtistsPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_names ( aOther.m_names ), 
+		m_image ( aOther.m_image ),
+		m_url ( aOther.m_url ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfArtistsPrivate( )
+		{
+		}
+  
+	QStringList	m_names;	// artist names
+	QImage 		m_image;	// image
+	QUrl 		m_url;		// url
+};
+
+
+#endif /* SMFARTISTS_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfclientglobal.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,28 @@
+/*
+ * SmfClientGlobal.h
+ *
+ *  Created on: Mar 22, 2010
+ *      Author: manasij
+ */
+
+#ifndef SMFCLIENTGLOBAL_H_
+#define SMFCLIENTGLOBAL_H_
+
+ #include <QtCore/QtGlobal>
+
+_LIT(KSmfServerName,"smfserver");
+_LIT( KSmfServerSemaphoreName, "smfserverSemaphore" );
+_LIT( KSmfServerFilename, "smfserver" );
+//TUid KSmfServerUID3 = { 0xE37E0269 };
+
+ #ifdef SMFCLIENT_LIB_EXPORT
+ #  define SMFCLIENT_EXPORT Q_DECL_EXPORT
+ #else
+ #  define SMFCLIENT_EXPORT Q_DECL_IMPORT
+ #endif
+
+/**
+ * To be designed later
+ */
+#define SMF_GETSERVICES(INTERFACE,INTERFACESTRING) ;
+#endif /* SMFCLIENTDEFS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfcomment.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,159 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The comment class represents a comment (on a picture or a music track etc)
+ *
+ */
+
+
+#include "smfcomment.h"
+#include "smfcomment_p.h"
+
+/**
+ * Constructor with default argument
+ */
+SmfComment::SmfComment()
+	{
+	d = new SmfCommentPrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfComment::SmfComment( const SmfComment &aOther )
+	:d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The current object reference
+ */
+SmfComment& SmfComment::operator=(const SmfComment &aOther)
+	{
+	d->m_text = aOther.d->m_text;
+	d->m_timeStamp = aOther.d->m_timeStamp;
+	d->m_commentId = aOther.d->m_commentId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfComment::~SmfComment( )
+	{
+	}
+
+/**
+ * Method to get the comment text
+ * @return The comment text
+ */
+QString SmfComment::text( ) const
+	{
+	return d->m_text;
+	}
+
+/**
+ * Method to get the comment time stamp
+ * @return The comment time stamp value
+ */
+QDateTime SmfComment::timeStamp( ) const
+	{
+	return d->m_timeStamp;
+	}
+
+/**
+ * Method to get the id of the comment
+ * @return The ID value 
+ */
+QString SmfComment::id( ) const	
+	{
+	return d->m_commentId;
+	}
+
+/**
+ * Method to set the comment text
+ * @param aText The comment text to be set
+ */
+void SmfComment::setText( const QString &aText )
+	{
+	d->m_text = aText;
+	}
+
+/**
+ * Method to set the time stamp
+ * @param aDateTime The comment time stamp value to be set
+ */
+void SmfComment::setTimeStamp( const QDateTime &aDateTime )
+	{
+	d->m_timeStamp = aDateTime;
+	}
+
+/**
+ * Method to set the id of the comment
+ * @param aId The ID value to be set
+ */
+void SmfComment::setId( const QString &aId )
+	{
+	d->m_commentId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfComment object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aComment The SmfComment object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfComment &aComment )
+	{
+	// Serialize d->m_text
+	aDataStream<<aComment.d->m_text;
+	
+	// Serialize d->m_timeStamp
+	aDataStream<<aComment.d->m_timeStamp;
+	
+	// Serialize d->m_commentId
+	aDataStream<<aComment.d->m_commentId;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfComment object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aComment The SmfComment object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfComment &aComment)
+	{
+	// Deserialize d->m_text
+	aDataStream>>aComment.d->m_text;
+	
+	// Deserialize d->m_timeStamp
+	aDataStream>>aComment.d->m_timeStamp;
+	
+	// Deserialize d->m_commentId
+	aDataStream>>aComment.d->m_commentId;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfcomment.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,134 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The comment class represents a comment (on a picture or a music track etc)
+ *
+ */
+
+#ifndef SMFCOMMENT_H_
+#define SMFCOMMENT_H_
+
+#include <QDateTime>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfCommentPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The comment class represents a comment (on a picture or a music track etc)
+ */
+class SMFCLIENT_EXPORT SmfComment
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfComment( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfComment( const SmfComment &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 * @return The current object reference
+	 */
+	SmfComment& operator=(const SmfComment &aOther);
+	
+	/**
+	 * Destructor
+	 */
+	~SmfComment( );
+	
+	/**
+	 * Method to get the comment text
+	 * @return The comment text
+	 */
+	QString text( ) const;
+	
+	/**
+	 * Method to get the comment time stamp
+	 * @return The comment time stamp value
+	 */
+	QDateTime timeStamp( ) const;
+	
+	/**
+	 * Method to get the id of the comment
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the comment text
+	 * @param aText The comment text to be set
+	 */
+	void setText( const QString &aText );
+	
+	/**
+	 * Method to set the time stamp
+	 * @param aDateTime The comment time stamp value to be set
+	 */
+	void setTimeStamp( const QDateTime &aDateTime );
+	
+	/**
+	 * Method to set the id of the comment
+	 * @param aId The ID value to be set
+	 */
+	void setId( const QString &aId );
+	
+private:
+	QSharedDataPointer<SmfCommentPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfComment &aComment );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfComment &aComment );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfComment object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aComment The SmfComment object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfComment &aComment );
+
+/**
+ * Method for Internalization. Reads a SmfComment object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aComment The SmfComment object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfComment &aComment);
+
+
+// Make the class SmfComment known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfComment)
+
+
+#endif /* SMFCOMMENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfcomment_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfComment class
+ *
+ */
+
+#ifndef SMFCOMMENT_P_H_
+#define SMFCOMMENT_P_H_
+
+#include <QDateTime>
+#include <QSharedData>
+
+class SmfCommentPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfCommentPrivate( ) { m_text.clear(); m_commentId.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfCommentPrivate( const SmfCommentPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_text ( aOther.m_text ), 
+		m_timeStamp ( aOther.m_timeStamp ),
+		m_commentId ( aOther.m_commentId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfCommentPrivate( )
+		{
+		}
+  
+	QString m_text;			// comment text
+	QDateTime m_timeStamp;	// comment time stamp
+	QString m_commentId;	// comment Id
+	
+};
+
+#endif /* SMFCOMMENT_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfcontact.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,156 @@
+/*
+ * smfcontact.cpp
+ *
+ *  Created on: Apr 15, 2010
+ *      Author: manasij
+ */
+#include "smfcontact.h"
+#include <QFile>
+#include <QTextStream>
+
+
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfContact::SmfContact( QObject *aParent)//:QObject(aParent)
+	{
+		d = new SmfContactPrivate;
+	}
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfContact::SmfContact( const SmfContact &aOther ): d (aOther.d)
+		{
+		
+		}
+	
+	/**
+	 * Destructor
+	 */
+	SmfContact::~SmfContact( )
+		{
+		
+		}
+	QStringList SmfContact::subTypes( ) const
+			{
+		
+			}
+	
+	/**
+	 * Method to convert an SmfContact to a QContact
+	 * Changes made to the returned QContact will not be reflected 
+	 * in its parent SmfContact object
+	 * @param aContact QContact corresponding to SmfContact 
+	 */
+	void SmfContact::convert( QContact &aContact ) const
+			{
+		
+			}
+	
+	/**
+	 * Method to get the value of a sub field for this contact
+	 * @param aSubType The sub field type 
+	 * @return The value of the sub field subType
+	 * @see subTypes()
+	 */
+	QVariant SmfContact::value( const QString& aSubType ) const
+			{
+			if(d->m_details.contains(aSubType))
+				return d->m_details.value(aSubType);
+			else
+				return QString("Not found");
+			}
+	
+	void SmfContact::setValue(const QString& aSubType,QVariant& value)
+		{
+		d->m_details.insert(aSubType,value);
+		}
+	void SmfContact::writeLog(QString log) const
+		{
+		QFile file("c:\\data\\SmfClientLogs.txt");
+	    if (!file.open(QIODevice::Append | QIODevice::Text))
+		         return;
+	    QTextStream out(&file);
+	    out << log << "\n";
+	    file.close();
+
+		}
+	/**
+	 * Method for Externalization. Writes the SmfContact object to 
+	 * the stream and returns a reference to the stream.
+	 * @param aDataStream Stream to be written
+	 * @param aContact The SmfContact object to be externalized
+	 * @return reference to the written stream
+	 */
+	//TODO:-Need to revisit
+
+	QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfContact& aContact )
+		{
+		aContact.writeLog("smfContact::operator<<");
+		QVariant var = aContact.value("Name");
+		QContactName cn = var.value<QContactName>();
+		aDataStream<<cn;
+		return aDataStream;
+		
+		}
+
+	/**
+	 * Method for Internalization. Reads a SmfContact object from 
+	 * the stream and returns a reference to the stream.
+	 * @param aDataStream Stream to be read
+	 * @param aContact The SmfContact object to be internalized
+	 * @return reference to the stream
+	 */
+	
+	QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfContact& aContact )
+		{
+		aContact.writeLog("smfContact::operator>>");
+		//explicitely adding fields for the classes that don't provide 
+		//internalizatio/externalization :(
+		QContactName name;
+		//QString name;
+		aDataStream>>name;
+		QVariant var = QVariant::fromValue(name);
+		aContact.setValue("Name",var);
+		return aDataStream;
+		}
+	QDataStream &operator<<( QDataStream &aDataStream, 
+			const QContactName &aContact )
+		{
+		//Qt mobility introduces API compatibility break
+#ifdef OLDER_QT_MOBILITY
+		aDataStream<<aContact.first();
+		aDataStream<<aContact.last();
+#else
+		
+		aDataStream<<aContact.firstName();
+		aDataStream<<aContact.lastName();
+#endif
+		return aDataStream;
+		}
+
+	QDataStream &operator>>( QDataStream &aDataStream, 
+			QContactName &aContact )
+		{
+		QString first;
+		QString last;
+		aDataStream>>first;
+#ifdef OLDER_QT_MOBILITY
+		aContact.setFirst(first);
+#else
+		aContact.setFirstName(first);
+#endif
+
+		aDataStream>>last;
+#ifdef OLDER_QT_MOBILITY
+		aContact.setLast(last);
+#else
+		aContact.setLastName(last);
+#endif
+		return aDataStream;
+		}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfcontact.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,193 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The contact class represents a social contact
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+#ifndef SMFCONTACT_H_
+#define SMFCONTACT_H_
+
+#include "qtcontacts.h"
+#include "SmfClientGlobal.h"
+#include <qdatastream.h>
+#include <QSharedData>
+#include <QVariant>
+//#include <smfclientglobal.h>
+#include "smfcontact_p.h"
+
+using namespace QtMobility;
+
+
+//TODO:- For the time being we'll just store a string SmfContact 
+/**
+ * @ingroup smf_common_group
+ * The contact class represents a social contact
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+//QList<SmfContact> gives error for serialization if its derived from QObject
+class  SMFCLIENT_EXPORT SmfContact //: public QObject
+	{
+	//Q_OBJECT
+
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfContact( QObject *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfContact( const SmfContact &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfContact( );
+//Q_DECLARE_LATIN1_LITERAL(SubTypeAddress, "Address");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeAnniversary, "Anniversary");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeAvatar, "Avatar");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeBirthday, "Birthday");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeContactId, "ContactId");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeEmailAddress, "EmailAddress");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeGender, "Gender");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeGeolocation, "Geolocation");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeGuid, "Guid");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeName, "Name");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeNickname, "Nickname");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeNote, "Note");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeOnlineAccount, "OnlineAccount");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeOrganization, "Organization");
+//Q_DECLARE_LATIN1_LITERAL(SubTypePhoneNumber, "PhoneNumber");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeTimestamp, "Timestamp");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeType, "Type");
+//Q_DECLARE_LATIN1_LITERAL(SubTypeUrl, "Url");
+public slots:
+	/**
+	 * Method to get the available sub fields for contacts.
+	 * The following are the available sub types of a contact
+	 *   QtMobility::QContactAddress		Address;
+	 *   QtMobility::QContactAnniversary	Anniversary;
+	 *   QtMobility::QContactAvatar			Avatar;
+	 *   QtMobility::QContactBirthday		Birthday;
+	 *   QtMobility::QContactId				ContactId;
+	 *   QtMobility::QContactEmailAddress	EmailAddress;
+	 *   QtMobility::QContactGender			Gender;
+	 *   QtMobility::QContactGeolocation	Geolocation;
+	 *   QtMobility::QContactGuid			Guid;
+	 *   QtMobility::QContactName			Name;
+	 *   QtMobility::QContactNickname		Nickname;
+	 *   QtMobility::QContactNote			Note;
+	 *   QtMobility::QContactOnlineAccount	OnlineAccount;
+	 *   QtMobility::QContactOrganization	Organization;
+	 *   QtMobility::QContactPhoneNumber	PhoneNumber;
+	 *   QtMobility::QContactTimestamp		Timestamp;
+	 *   QtMobility::QContactType			Type;
+	 *   QtMobility::QContactUrl			Url;
+	 * @return The Available sub fields for this contact
+	 */
+
+	QStringList subTypes( ) const;
+	
+	/**
+	 * Method to convert an SmfContact to a QContact
+	 * Changes made to the returned QContact will not be reflected 
+	 * in its parent SmfContact object
+	 * @param aContact QContact corresponding to SmfContact 
+	 */
+	void convert( QContact &aContact ) const;
+	
+	/**
+	 * Method to get the value of a sub field for this contact
+	 * @param aSubType The sub field type 
+	 * @return The value of the sub field subType
+	 * @see subTypes()
+	 */
+	QVariant value( const QString& aSubType ) const;
+	
+	/**
+	 * Method to set value for a subtype
+	 */
+	void setValue(const QString& aSubType,QVariant& value);
+	void writeLog(QString log) const;
+private:
+	QSharedDataPointer<SmfContactPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfContact &aContact );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfContact &aContact );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfContact object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aContact The SmfContact object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfContact &aContact );
+
+/**
+ * Method for Internalization. Reads a SmfContact object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aContact The SmfContact object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfContact &aContact );
+typedef QList<SmfContact> SmfContactList;
+/**
+ * Serialization support for Qt mobility contact
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const QContactName &aContact );
+
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		QContactName &aContact );
+// Make the class SmfContact known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfContact)
+Q_DECLARE_METATYPE(QList<SmfContact>)
+
+//make qt mobility related classes known to moc
+Q_DECLARE_METATYPE(QContactAddress)
+Q_DECLARE_METATYPE(QContactAnniversary)
+Q_DECLARE_METATYPE(QContactAvatar)
+Q_DECLARE_METATYPE(QContactBirthday)
+Q_DECLARE_METATYPE(QContactId)
+Q_DECLARE_METATYPE(QContactEmailAddress)
+Q_DECLARE_METATYPE(QContactGender)
+Q_DECLARE_METATYPE(QContactGuid)
+Q_DECLARE_METATYPE(QContactName)
+Q_DECLARE_METATYPE(QContactNickname)
+Q_DECLARE_METATYPE(QContactNote)
+Q_DECLARE_METATYPE(QContactOnlineAccount)
+Q_DECLARE_METATYPE(QContactOrganization)
+Q_DECLARE_METATYPE(QContactPhoneNumber)
+Q_DECLARE_METATYPE(QContactTimestamp)
+Q_DECLARE_METATYPE(QContactType)
+Q_DECLARE_METATYPE(QContactUrl)
+
+#endif /* SMFCONTACT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfcontact_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfContact class
+ *
+ */
+
+#ifndef SMFCONTACT_P_H_
+#define SMFCONTACT_P_H_
+
+#include <QSharedData>
+
+using namespace QtMobility;
+
+class SmfContactPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfContactPrivate( ) { m_details.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfContactPrivate( const SmfContactPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_details ( aOther.m_details )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfContactPrivate( ){};
+  
+	QVariantMap	m_details;// contact details
+	
+};
+
+#endif /* SMFCONTACT_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfevent.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,259 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#include <smfevent.h>
+#include <smfevent_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfEvent::SmfEvent( )
+	{
+	d = new SmfEventPrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfEvent::SmfEvent( const SmfEvent &aOther )
+	:d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfEvent& SmfEvent::operator=( const SmfEvent &aOther )
+	{
+	d->m_name = aOther.d->m_name;
+	d->m_dateTime = aOther.d->m_dateTime;
+	d->m_duration = aOther.d->m_duration;
+	d->m_artists = aOther.d->m_artists;
+	d->m_venue = aOther.d->m_venue;
+	d->m_url = aOther.d->m_url;
+	d->m_eventId = aOther.d->m_eventId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfEvent::~SmfEvent( )
+	{
+	}
+
+/**
+ * Method to get the event name
+ * @return The event name
+ */
+QString SmfEvent::title( ) const
+	{
+	return d->m_name;
+	}
+
+/**
+ * Method to get the event date and time
+ * @return The date and time of the event
+ */
+QDateTime SmfEvent::eventDateTime( ) const
+	{
+	return d->m_dateTime;
+	}
+
+/**
+ * Method to get the event duration
+ * @return The duration of the event
+ */
+QTime SmfEvent::duration( ) const
+	{
+	return d->m_duration;
+	}
+
+/**
+ * Method to get the artist names
+ * @return The list of artists in the event
+ */
+SmfArtists SmfEvent::artists( ) const
+	{
+	return d->m_artists;
+	}
+
+/**
+ * Method to get the venue of the event
+ * @return The venue of the event
+ */
+SmfLocation SmfEvent::venue( ) const
+	{
+	return d->m_venue;
+	}
+
+/**
+ * Method to get the URL for getting tickets for the event
+ * @return The Url for getting ticket for the event
+ */
+QUrl SmfEvent::ticketUrl( ) const
+	{
+	return d->m_url;
+	}
+
+/**
+ * Method to get the id of the event
+ * @return The ID value 
+ */
+QString SmfEvent::id( ) const
+	{
+	return d->m_eventId;
+	}
+
+/**
+ * Method to set the event name
+ * @param aName The new event name
+ */
+void SmfEvent::setTitle( const QString &aName )
+	{
+	d->m_name = aName;
+	}
+
+/**
+ * Method to set the event date and time
+ * @param aDateTime The new date and time of the event
+ * 
+ */
+void SmfEvent::setEventDateTime( const QDateTime &aDateTime )
+	{
+	d->m_dateTime = aDateTime;
+	}
+
+/**
+ * Method to set the event duration
+ * @param aDuration The new duration of the event
+ * 
+ */
+void SmfEvent::setDuration( const QTime &aDuration )
+	{
+	d->m_duration = aDuration;
+	}
+
+/**
+ * Method to set the artist
+ * @param aArtists The new artists in the event
+ */
+void SmfEvent::setArtists( const SmfArtists &aArtists )
+	{
+	d->m_artists = aArtists;
+	}
+
+/**
+ * Method to set the venue name
+ * @param aVenue The new venue of the event
+ */
+void SmfEvent::setVenue( const SmfLocation &aVenue )
+	{
+	d->m_venue = aVenue;
+	}
+
+/**
+ * Method to set the URL for getting tickets for the event
+ * @param aUrl The new Url for getting ticket for the event
+ */
+void SmfEvent::setTicketUrl( const QUrl &aUrl )
+	{
+	d->m_url = aUrl;
+	}
+
+/**
+ * Method to set the id of the event
+ * @param aId The ID value 
+ */
+void SmfEvent::setId( const QString &aId )
+	{
+	d->m_eventId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfEvent object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aEvent The SmfEvent object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfEvent &aEvent )
+	{
+	// Serialize d->m_name
+	aDataStream<<aEvent.d->m_name;
+		
+	// Serialize d->m_dateTime
+	aDataStream<<aEvent.d->m_dateTime;
+	
+	// Serialize d->m_duration
+	aDataStream<<aEvent.d->m_duration;
+	
+	// Serialize d->m_artists
+	aDataStream<<aEvent.d->m_artists;
+	
+	// Serialize d->m_venue
+	aDataStream<<aEvent.d->m_venue;
+	
+	// Serialize d->m_url
+	aDataStream<<aEvent.d->m_url;
+	
+	// Serialize d->m_eventId
+	aDataStream<<aEvent.d->m_eventId;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfEvent object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aEvent The SmfEvent object to be internalized
+ * @return reference to the stream
+ */
+ QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfEvent &aEvent)
+	{
+	// Deserialize d->m_name
+	aDataStream>>aEvent.d->m_name;
+		
+	// Deserialize d->m_dateTime
+	aDataStream>>aEvent.d->m_dateTime;
+	
+	// Deserialize d->m_duration
+	aDataStream>>aEvent.d->m_duration;
+	
+	// Deserialize d->m_artists
+	aDataStream>>aEvent.d->m_artists;
+	
+	// Deserialize d->m_venue
+	aDataStream>>aEvent.d->m_venue;
+	
+	// Deserialize d->m_url
+	aDataStream>>aEvent.d->m_url;
+	
+	// Deserialize d->m_eventId
+	aDataStream>>aEvent.d->m_eventId;
+	
+	return aDataStream;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfevent.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,189 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#ifndef SMFEVENT_H_
+#define SMFEVENT_H_
+
+#include <smflocation.h>
+#include <smfartists.h>
+#include <QStringList>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfEventPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The event class represents an event
+ */
+class SMFCLIENT_EXPORT SmfEvent
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfEvent( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfEvent( const SmfEvent &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 * @return The current object reference
+	 */
+	SmfEvent& operator=( const SmfEvent &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfEvent( );
+	
+	/**
+	 * Method to get the event name
+	 * @return The event name
+	 */
+	QString title( ) const;
+	
+	/**
+	 * Method to get the event date and time
+	 * @return The date and time of the event
+	 */
+	QDateTime eventDateTime( ) const;
+	
+	/**
+	 * Method to get the event duration
+	 * @return The duration of the event
+	 */
+	QTime duration( ) const;
+	
+	/**
+	 * Method to get the artist names
+	 * @return The list of artists in the event
+	 */
+	SmfArtists artists( ) const;
+	
+	/**
+	 * Method to get the venue of the event
+	 * @return The venue of the event
+	 */
+	SmfLocation venue( ) const;
+	
+	/**
+	 * Method to get the URL for getting tickets for the event
+	 * @return The Url for getting ticket for the event
+	 */
+	QUrl ticketUrl( ) const;
+	
+	/**
+	 * Method to get the id of the event
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the event name
+	 * @param aName The new event name
+	 */
+	void setTitle( const QString &aName );
+	
+	/**
+	 * Method to set the event date and time
+	 * @param aDateTime The new date and time of the event
+	 * 
+	 */
+	void setEventDateTime( const QDateTime &aDateTime );
+	
+	/**
+	 * Method to set the event duration
+	 * @param aDuration The new duration of the event
+	 * 
+	 */
+	void setDuration( const QTime &aDuration );
+	
+	/**
+	 * Method to set the artist
+	 * @param aArtists The new artists in the event
+	 */
+	void setArtists( const SmfArtists &aArtists );
+	
+	/**
+	 * Method to set the venue name
+	 * @param aVenue The new venue of the event
+	 */
+	void setVenue( const SmfLocation &aVenue );
+	
+	/**
+	 * Method to set the URL for getting tickets for the event
+	 * @param aUrl The new Url for getting ticket for the event
+	 */
+	void setTicketUrl( const QUrl &aUrl );
+	
+	/**
+	 * Method to set the id of the event
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId );
+	
+private:
+	QSharedDataPointer<SmfEventPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfEvent &aEvent );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfEvent &aEvent );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfEvent object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aEvent The SmfEvent object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfEvent &aEvent );
+
+/**
+ * Method for Internalization. Reads a SmfEvent object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aEvent The SmfEvent object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfEvent &aEvent);
+
+
+typedef QList<SmfEvent> SmfEventList;
+
+// Make the class SmfEvent known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfEvent)
+Q_DECLARE_METATYPE(QList<SmfEvent>)
+
+
+#endif /* SMFEVENT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfevent_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfEvent class
+ *
+ */
+
+#ifndef SMFEVENT_P_H_
+#define SMFEVENT_P_H_
+
+
+#include <smflocation.h>
+#include <smfartists.h>
+#include <QStringList>
+#include <QSharedData>
+
+class SmfEventPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfEventPrivate( ) { 
+		m_name.clear(); 
+		m_url.clear();
+		m_eventId.clear();
+		
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfEventPrivate( const SmfEventPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_name ( aOther.m_name ), 
+		m_dateTime ( aOther.m_dateTime ),
+		m_duration ( aOther.m_duration ),
+		m_artists ( aOther.m_artists ),
+		m_venue ( aOther.m_venue ),
+		m_url ( aOther.m_url ),
+		m_eventId ( aOther.m_eventId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfEventPrivate( )
+		{
+		}
+  
+	QString		m_name;		// event name
+	QDateTime 	m_dateTime;	// event date and time
+	QTime		m_duration;	// event duration
+	SmfArtists 	m_artists;	// event artist names
+	SmfLocation	m_venue;	// event venue
+	QUrl 		m_url;		// ticket url
+	QString 	m_eventId;	// event Id
+	
+};
+
+#endif /* SMFEVENT_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfglobal.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,396 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * SMF wide global const and macros, to be shared among SMF components 
+ * and SMF clients
+ *
+ */
+
+#ifndef SMFGLOBAL_H
+#define SMFGLOBAL_H
+#include <e32cmn.h>
+#include <qglobal.h>
+#include <QBuffer>
+#include <QNetworkRequest>
+#include <QNetworkAccessManager>
+/**
+ * Server name 
+ */
+
+/**
+ * Exact definition to be decided later
+ */
+#define SMF_SERVICE_NAME(INTERFACE,INTERFACENAME)
+
+/**
+ * Indicates first page for a web query
+ */
+const int SMF_FIRST_PAGE=0;
+
+/**
+ * Default value for per page item for web queries
+ */
+const int SMF_ITEMS_PER_PAGE=10;
+
+class SmfServerSymbianSession;
+
+
+/**
+ * The enumeration used to denote errors reported by plugin
+ * Smf can't continue without handling these errors
+ */
+enum SmfPluginError
+	{
+	SmfPluginErrNone = 0, 
+	SmfPluginErrTooManyRequest,
+	SmfPluginErrRequestQuotaExceeded,
+	SmfPluginErrInvalidRequest,
+	SmfPluginErrUserNotLoggedIn,
+	SmfPluginErrAuthenticationExpired,
+	SmfPluginErrPermissionDenied,
+	SmfPluginErrInvalidApplication,
+	SmfPluginErrServiceUnavailable,
+	SmfPluginErrServiceTemporaryUnavailable,
+	SmfPluginErrFormatNotSupported, 
+	SmfPluginErrDataSizeExceeded,
+	SmfPluginErrParsingFailed
+	};
+
+/**
+ * The enumeration used to track the plugin methods return type
+ */
+enum SmfPluginRetType
+	{
+	SmfSendRequestAgain = 0,
+	SmfRequestComplete,
+	SmfRequestError
+	};
+
+
+/**
+ * The enumeration used to indicate the type of network operation done
+ */
+enum SmfRequestTypeID
+	{
+	SmfGetService,
+	SmfGetServiceComplete,
+	SmfTest,
+	SmfTestComplete,
+	SmfContactGetFriends,
+	SmfContactGetFollowers,
+	SmfContactSearch,
+	SmfContactSearchNear,
+	SmfContactGetGroups,
+	SmfContactSearchInGroup,
+	SmfContactRetrievePosts,
+	SmfContactPost,
+	SmfContactUpdatePost,
+	SmfContactPostDirected,
+	SmfContactCommentOnAPost,
+	SmfContactPostAppearence,
+	SmfContactSharePost,
+	SmfMusicGetLyrics,
+	SmfMusicGetSubtitle,
+	SmfMusicGetEventsOnLoc,
+	SmfMusicGetVenueOnLoc,
+	SmfMusicGetEventsOnVenue,
+	SmfMusicPostEvents,
+	SmfMusicGetRecommendations,
+	SmfMusicGetTracks,
+	SmfMusicGetTrackInfo,
+	SmfMusicGetStores,
+	SmfMusicPostCurrentPlaying,
+	SmfMusicGetUserInfo,
+	SmfMusicSearchUser,
+	SmfMusicGetPlaylists,
+	SmfMusicGetPlaylistsOfUser,
+	SmfMusicAddToPlaylist,
+	SmfMusicPostCurrentPlayingPlaylist,
+	SmfPictureGetPictures,
+	SmfPictureDescription,
+	SmfPictureUpload,
+	SmfPictureMultiUpload,
+	SmfPicturePostComment,
+	SmfContactGetFriendsComplete,
+	SmfContactGetFollowersComplete,
+	SmfContactSearchComplete,
+	SmfContactSearchNearComplete,
+	SmfContactGetGroupsComplete,
+	SmfContactSearchInGroupComplete,
+	SmfContactRetrievePostsComplete,
+	SmfContactPostComplete,
+	SmfContactUpdatePostComplete,
+	SmfContactPostDirectedComplete,
+	SmfContactCommentOnAPostComplete,
+	SmfContactPostAppearenceComplete,
+	SmfContactSharePostComplete,
+	SmfMusicGetLyricsComplete,
+	SmfMusicGetSubtitleComplete,
+	SmfMusicGetEventsOnLocComplete,
+	SmfMusicGetVenueOnLocComplete,
+	SmfMusicGetEventsOnVenueComplete,
+	SmfMusicPostEventsComplete,
+	SmfMusicGetRecommendationsComplete,
+	SmfMusicGetTracksComplete,
+	SmfMusicGetTrackInfoComplete,
+	SmfMusicGetStoresComplete,
+	SmfMusicPostCurrentPlayingComplete,
+	SmfMusicGetUserInfoComplete,
+	SmfMusicSearchUserComplete,
+	SmfMusicGetPlaylistsComplete,
+	SmfMusicGetPlaylistsOfUserComplete,
+	SmfMusicAddToPlaylistComplete,
+	SmfMusicPostCurrentPlayingPlaylistComplete,
+	SmfPictureGetPicturesComplete,
+	SmfPictureDescriptionComplete,
+	SmfPictureUploadComplete,
+	SmfPictureMultiUploadComplete,
+	SmfPicturePostCommentComplete
+	
+	};
+
+/**
+ * The enumeration used to indicate result of transport to the plugins
+ */
+enum SmfTransportResult
+	{
+	SmfTransportOpNoError = 0,
+	SmfTransportOpConnectionRefusedError,
+	SmfTransportOpRemoteHostClosedError,
+	SmfTransportOpHostNotFoundError,
+	SmfTransportOpTimeoutError,
+	SmfTransportOpOperationCanceledError,
+	SmfTransportOpSslHandshakeFailedError,
+	SmfTransportOpProxyConnectionRefusedError,
+	SmfTransportOpProxyConnectionClosedError,
+	SmfTransportOpProxyNotFoundError,
+	SmfTransportOpProxyTimeoutError,
+	SmfTransportOpProxyAuthenticationRequiredError,
+	SmfTransportOpContentAccessDenied,
+	SmfTransportOpContentOperationNotPermittedError,
+	SmfTransportOpContentNotFoundError,
+	SmfTransportOpAuthenticationRequiredError,
+	SmfTransportOpContentReSendError,
+	SmfTransportOpProtocolUnknownError,
+	SmfTransportOpProtocolInvalidOperationError,
+	SmfTransportOpUnknownNetworkError,
+	SmfTransportOpUnknownProxyError,
+	SmfTransportOpUnknownContentError,
+	SmfTransportOpProtocolFailure,
+	SmfTransportOpUnknownError,
+	SmfTransportOpIAPChanged,
+	SmfTransportOpCancelled
+	};
+
+/**
+ * The structure used to hold the request created by the plugins
+ */
+struct SmfPluginRequestData
+	{
+	/**
+	 * Indicates the type of operation performed, like getting Friends 
+	 * list, upload image etc
+	 */
+	SmfRequestTypeID iRequestType;
+	
+	/**
+	 * The QNetworkRequest that has to be filled up by the plugins
+	 */
+	QNetworkRequest iNetworkRequest;
+	
+	/**
+	 * The data to be posted in case of HTTP POST operation
+	 */
+	QBuffer *iPostData;
+	
+	/**
+	 * The type of HTTP transaction, like GET, POST etc
+	 */
+	QNetworkAccessManager::Operation iHttpOperationType;
+	
+	};
+
+/**
+ * The structure used to hold the request created by the plugins
+ */
+struct SmfResultPage
+	{
+	/**
+	 * The total number of items
+	 */
+	uint iTotalItems;
+	
+	/**
+	 * The number of items per page
+	 */
+	uint iItemsPerPage;
+	
+	/**
+	 * The total number of pages
+	 */
+	uint iTotalPages;
+	
+	/**
+	 * The current fetched page number
+	 */
+	uint iPageNum;
+	};
+
+
+struct SmfClientAuthID
+	{
+#ifdef Q_OS_SYMBIAN
+	TSecureId pid;
+	SmfServerSymbianSession* session;
+#else
+	QString pid;
+	SmfServerQtSession* session;
+#endif
+	
+	};
+
+/*enum SmfRequestTypeID
+	{
+	ESmfTest,
+	ESmfTestComplete,
+	ESmfGetService,
+	ESmfGetServiceComplete,
+	ESmfGetContact,
+	ESmfGetContactComplete,
+	ESmfGetFriend,
+	ESmfGetFriendComplete,
+	ESmfGetFollower,
+	ESmfGetFollowerComplete,
+	ESmfSearchFriend,
+	ESmfSearchFriendComplete,
+	ESmfGetGroup,
+	ESmfGetGroupComplete,
+	ESmfSearchGroup,
+	ESmfSearchGroupComplete,
+	ESmfGetPost,
+	ESmfGetPostComplete,
+	ESmfGetPicture,	//required for SmfGallery interface implementation
+	ESmfGetPictureComplete,
+	ESmfUploadPicture,
+	ESmfUploadPictureComplete,
+	ESmfPostComments,
+	ESmfPostCommentsComplete,
+	ESmfGetLyrics,	//required for music related implementations
+	ESmfGetLyricsComplete,
+	ESmfGetSubtitles,
+	ESmfGetSubtitlesComplete,
+	ESmfGetPlayList,
+	ESmfGetPlayListComplete,
+	ESmfaddToPlayList,
+	ESmfaddToPlayListComplete,
+	ESmfGetEvents,
+	ESmfGetEventsComplete,
+	ESmfGetVenues,
+	ESmfGetVenuesComplete,
+	ESmfPostEvent,
+	ESmfPostEventComplete,
+	ESmfGetMusicRecommendation,
+	ESmfGetMusicRecommendationComplete,
+	ESmfGetTrack,
+	ESmfGetTrackComplete,
+	ESmfSearchMusicUser,
+	ESmfSearchMusicUserComplete,
+	ESmfQueryAuthKeys,
+	ESmfQueryAuthKeysComplete,
+	ESmfAuthKeyExpired,
+	ESmfAuthKeyExpiredComplete
+	};*/
+/**
+ * Smf wide errors
+ */
+enum SmfError
+	{
+	SmfNoError,
+	SmfInvalidInterface,
+	SmfNoAuthorizedPlugin,
+	SmfClientAuthFailed,
+	SmfPluginErrorTooManyRequest,
+	SmfPluginErrorRequestQuotaExceeded,
+	SmfPluginErrorInvalidRequest,
+	SmfPluginErrorUserNotLoggedIn,
+	SmfPluginErrorAuthenticationExpired,
+	SmfPluginErrorPermissionDenied,
+	SmfPluginErrorInvalidApplication,
+	SmfPluginErrorServiceUnavailable,
+	SmfPluginErrorServiceTemporaryUnavailable,
+	SmfPluginErrorFormatNotSupported, 
+	SmfPluginErrorDataSizeExceeded ,
+	SmfpluginNotFound,
+	SmfpluginNotLoaded,
+	SmfpluginLoaded,
+	SmfpluginLoadError,
+	SmfpluginAuthorised,
+	SmfpluginNotAuthorised,
+	SmfpluginRequestCreated,
+	SmfpluginRequestCreationFailed,
+	SmfpluginUnknownService,
+	SmfpluginRequestSendingFailed,
+	SmfpluginSOPCheckFailed,
+	SmfpluginServiceError,
+	SmfpluginResponseParsed,
+	SmfpluginResponseParseFailure,
+	SmfpluginSendRequestAgain,
+	SmfpluginUnknownError,
+	SmftransportOpConnectionRefusedError,
+	SmftransportOpRemoteHostClosedError,
+	SmftransportOpHostNotFoundError,
+	SmftransportOpTimeoutError,
+	SmftransportOpOperationCanceledError,
+	SmftransportOpSslHandshakeFailedError,
+	SmftransportOpProxyConnectionRefusedError,
+	SmftransportOpProxyConnectionClosedError,
+	SmftransportOpProxyNotFoundError,
+	SmftransportOpProxyTimeoutError,
+	SmftransportOpProxyAuthenticationRequiredError,
+	SmftransportOpContentAccessDenied,
+	SmftransportOpContentOperationNotPermittedError,
+	SmftransportOpContentNotFoundError,
+	SmftransportOpAuthenticationRequiredError,
+	SmftransportOpContentReSendError,
+	SmftransportOpProtocolUnknownError,
+	SmftransportOpProtocolInvalidOperationError,
+	SmftransportOpUnknownNetworkError,
+	SmftransportOpUnknownProxyError,
+	SmftransportOpUnknownContentError,
+	SmftransportOpProtocolFailure,
+	SmftransportOpUnknownError,
+	SmftransportOpIAPChanged,
+	SmftransportOpCancelled,
+	SmftransportInitNetworkNotAvailable ,
+	SmftransportInitRoamingNetworkUsageNotEnabled	
+	};
+
+/**
+ * Smf wide panics
+ */
+enum SmfPanic
+	{
+	SmfRequestPending//to allow one outstanding request per session
+	};
+//interface names
+const QString contactFetcherInterface("org.symbian.smf.client.contact.fetcher");
+//TODO:- changed to match PM for the time being, PM must change later
+const QString postProviderInterface("posts");
+//const QString postProviderInterface("org.symbian.smf.client.contact.posts");
+const QString galleryInterface("org.symbian.smf.client.gallery");
+
+
+
+#endif /* SMFGLOBAL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfgroup.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,155 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The group class represents an instance of a group as per SN site terminolgy
+ *
+ *  Created on: Apr 16, 2010
+ *      Author: manasij
+ */
+	
+#include "smfgroup.h"
+//private impl
+#include "smfgroup_p.h"
+
+/**
+	 * Constructor with default argument
+	 * @param list The list of members in the group
+	 */
+	SmfGroup::SmfGroup( QList<SmfContact>* list )
+		{
+		d = new SmfGroupPrivate;
+		if(list)
+			d->m_members = list;
+		}
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfGroup::SmfGroup( const SmfGroup &aOther ): d(aOther.d)
+		{
+		
+		}
+	
+	/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfGroup& SmfGroup::operator=( const SmfGroup &aOther )
+	{
+	d->m_members = aOther.d->m_members;
+	d->m_groupName = aOther.d->m_groupName;
+	d->m_groupId = aOther.d->m_groupId;
+	return *this;
+	}
+
+/**
+	 * Destructor
+	 */
+	SmfGroup::~SmfGroup( )
+		{
+		
+		}
+	
+	/**
+	 * Method to get the list of members in the group
+	 * @return The list of members in the group
+	 */
+	QList<SmfContact> SmfGroup::members( ) const
+			{
+			return *(d->m_members) ;
+			}
+	
+	/**
+	 * Method to set members
+	 * 
+	 */
+	void SmfGroup::setMembers(QList<SmfContact>* mems)
+		{
+		d->m_members = mems;
+		}
+	/**
+	 * Method to get the name of the group
+	 * @return The name of the group
+	 */
+	QString SmfGroup::name( ) const
+			{
+			return d->m_groupName;
+			}
+	
+	/**
+	 * Method to set name
+	 */
+	void SmfGroup::setName(QString& name)
+		{
+		d->m_groupName = name;
+		}
+	
+	/**
+	 * Method to get the id of the group
+	 * @return The ID value 
+	 */
+	QString SmfGroup::id( ) const
+			{
+			return d->m_groupId;
+			}
+	
+	/**
+	 * Method to set id
+	 */
+	void SmfGroup::setId(QString& id)
+		{
+		d->m_groupId = id;
+		
+		}
+	/**
+	 * Method for Externalization. Writes the SmfGroup object to 
+	 * the stream and returns a reference to the stream.
+	 * @param aDataStream Stream to be written
+	 * @param aGroup The SmfGroup object to be externalized
+	 * @return reference to the written stream
+	 */
+	//TODO:- implement
+	QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfGroup &aGroup )
+		{
+		//aDataStream<<aGroup.members();
+		aDataStream<<aGroup.name();
+		aDataStream<<aGroup.id();
+		return aDataStream;
+		}
+
+	/**
+	 * Method for Internalization. Reads a SmfGroup object from 
+	 * the stream and returns a reference to the stream.
+	 * @param aDataStream Stream to be read
+	 * @param aGroup The SmfGroup object to be internalized
+	 * @return reference to the stream
+	 */
+	//TODO:- implement
+	QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfGroup &aGroup)
+		{
+		
+		//aDataStream>>aGroup.d->m_members;
+		QString grpname;
+		aDataStream>>grpname;
+		aGroup.d->m_groupName = grpname;
+		QString grpId;
+		aDataStream>>grpId;
+		aGroup.d->m_groupId = grpId;
+		return aDataStream;
+		}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfgroup.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,136 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The group class represents an instance of a group as per SN site terminolgy
+ *
+ */
+
+#ifndef SMFGROUP_H_
+#define SMFGROUP_H_
+
+#include <smfcontact.h>
+#include <qdatastream.h>
+#include <QSharedData>
+#include "smfclientglobal.h"
+#include <QMetaType>
+#include "smfgroup_p.h"
+
+
+/**
+ * @ingroup smf_common_group
+ * The group class represents an instance of a group as per SN site terminolgy
+ */
+
+//QList<SmfGroup> gives error for serialization if its derived from QObject
+class  SMFCLIENT_EXPORT SmfGroup //: public QObject
+	{
+	//Q_OBJECT
+public:
+	/**
+	 * Constructor with default argument
+	 * @param list The list of members in the group
+	 */
+	SmfGroup( QList<SmfContact>* list = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfGroup( const SmfGroup &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 */
+	SmfGroup& operator=( const SmfGroup &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfGroup( );
+	
+public slots:
+	/**
+	 * Method to get the list of members in the group
+	 * @return The list of members in the group
+	 */
+	QList<SmfContact> members( ) const;
+	
+	/**
+	 * Method to set members
+	 * 
+	 */
+	void setMembers(QList<SmfContact>* mems);
+	/**
+	 * Method to get the name of the group
+	 * @return The name of the group
+	 */
+	QString name( ) const;
+	
+	/**
+	 * Method to set name
+	 */
+	void setName(QString& name);
+	
+	/**
+	 * Method to get the id of the group
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set id
+	 */
+	void setId(QString& id);
+	
+private:
+	QSharedDataPointer<SmfGroupPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfGroup &aGroup );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfGroup &aGroup );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfGroup object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aGroup The SmfGroup object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfGroup &aGroup );
+
+/**
+ * Method for Internalization. Reads a SmfGroup object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aGroup The SmfGroup object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfGroup &aGroup);
+
+typedef QList<SmfGroup> SmfGroupList;
+
+// Make the class SmfGroup known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfGroup)
+Q_DECLARE_METATYPE(QList<SmfGroup>)
+
+#endif /* SMFGROUP_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfgroup_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,56 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfGroup class
+ *
+ */
+
+#ifndef SMFGROUP_P_H_
+#define SMFGROUP_P_H_
+
+#include <smfcontact.h>
+#include <QSharedData>
+
+class SmfGroupPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfGroupPrivate( ) { m_members = NULL; m_groupName.clear(); m_groupId.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfGroupPrivate( const SmfGroupPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_members ( aOther.m_members ), 
+		m_groupName ( aOther.m_groupName ),
+		m_groupId ( aOther.m_groupId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfGroupPrivate( ){};
+  
+	QList<SmfContact> *m_members;	// members in the group
+	QString m_groupName;
+	QString m_groupId;
+	// Other details to be added
+};
+
+
+#endif /* SMFGROUP_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smflocation.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,287 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfLocation class represents a location and its related information
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+
+#include <smflocation.h>
+#include <smflocation_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfLocation::SmfLocation( )
+	{
+	d = new SmfLocationPrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfLocation::SmfLocation( const SmfLocation &aOther )
+	:d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator 
+ * @param aOther The reference object
+ */
+SmfLocation& SmfLocation::operator=( const SmfLocation &aOther )
+	{
+	d->m_name = aOther.d->m_name;
+	d->m_city = aOther.d->m_city;
+	d->m_street = aOther.d->m_street;
+	d->m_zipcode = aOther.d->m_zipcode;
+	d->m_country = aOther.d->m_country;
+	d->m_geo = aOther.d->m_geo;
+	d->m_url = aOther.d->m_url;
+	d->m_placeId = aOther.d->m_placeId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfLocation::~SmfLocation( )
+	{
+	}
+
+/**
+ * Method to get the place name
+ * @return The place name
+ */
+QString SmfLocation::name( ) const
+	{
+	return d->m_name;
+	}
+
+/**
+ * Method to get the city of place
+ * @return The city of the place
+ */
+QString SmfLocation::city( ) const
+	{
+	return d->m_city;
+	}
+
+/**
+ * Method to get the street information of place
+ * @return The street information of the place
+ */
+QString SmfLocation::street( ) const
+	{
+	return d->m_street;
+	}
+
+/**
+ * Method to get the zip code of place
+ * @return The zip code of place
+ */
+QString SmfLocation::zipCode( ) const
+	{
+	return d->m_zipcode;
+	}
+
+/**
+ * Method to get the country of place
+ * @return The country of place
+ */
+QString SmfLocation::country( ) const
+	{
+	return d->m_country;
+	}
+
+/**
+ * Method to get the Geo Position information (like information gathered 
+ * on a global position, direction and velocity at a particular point 
+ * in time) of the place.
+ * @return The Geo Position information of place
+ */
+QGeoPositionInfo SmfLocation::geoPositionInfo( ) const
+	{
+	return d->m_geo;
+	}
+
+/**
+ * Method to get the url indicating the place
+ * @return The url indicating the place
+ */
+QUrl SmfLocation::url( ) const
+	{
+	return d->m_url;
+	}
+
+/**
+ * Method to get the id of the place
+ * @return The ID value 
+ */
+QString SmfLocation::id( ) const
+	{
+	return d->m_placeId;
+	}
+
+/**
+ * Method to set the place name
+ * @param aPlace The new place name
+ */
+void SmfLocation::setName( const QString& aPlace )
+	{
+	d->m_name = aPlace;
+	}
+
+/**
+ * Method to set the city of  place
+ * @param aCity The new city of the place
+ */
+void SmfLocation::setCity( const QString& aCity )
+	{
+	d->m_city = aCity;
+	}
+
+/**
+ * Method to set the street information of place
+ * @param aStreet The new street information of the place
+ */
+void SmfLocation::setStreet( const QString& aStreet )
+	{
+	d->m_street = aStreet;
+	}
+
+/**
+ * Method to set the zip code of place
+ * @param aZipCode The new zip code of place
+ */
+void SmfLocation::setZipCode( const QString& aZipCode )
+	{
+	d->m_zipcode = aZipCode;
+	}
+
+/**
+ * Method to set the country of place
+ * @param aCountry The new country of place
+ */
+void SmfLocation::setCountry( const QString& aCountry )
+	{
+	d->m_country = aCountry;
+	}
+
+/**
+ * Method to set the Geo Postion information (like information gathered 
+ * on a global position, direction and velocity at a particular point 
+ * in time) of the place.
+ * @param aGeoPosInfo The new Geo Position information of place
+ */
+void SmfLocation::setGeoPositionInfo( const QGeoPositionInfo& aGeoPosInfo )
+	{
+	d->m_geo = aGeoPosInfo;
+	}
+
+/**
+ * Method to set the url indicating the place
+ * @param aUrl The new url indicating the place
+ */
+void SmfLocation::setUrl( const QUrl& aUrl )
+	{
+	d->m_url = aUrl;
+	}
+
+/**
+ * Method to set the id of the place
+ * @return The ID value 
+ */
+void SmfLocation::setId( const QString &aId )
+	{
+	d->m_placeId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfLocation object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPlace The SmfLocation object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfLocation &aPlace )
+	{
+	// Serialize d->m_name
+	aDataStream<<aPlace.d->m_name;
+	
+	// Serialize d->m_city
+	aDataStream<<aPlace.d->m_city;
+	
+	// Serialize d->m_street
+	aDataStream<<aPlace.d->m_street;
+	
+	// Serialize d->m_zipcode
+	aDataStream<<aPlace.d->m_zipcode;
+	
+	// Serialize d->m_country
+	aDataStream<<aPlace.d->m_country;
+	
+	// Serialize d->m_geo
+	aDataStream<<aPlace.d->m_geo;
+	
+	// Serialize d->m_url
+	aDataStream<<aPlace.d->m_url;
+	
+	// Serialize d->m_placeId
+	aDataStream<<aPlace.d->m_placeId;
+		
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfLocation object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPlace The SmfLocation object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfLocation &aPlace)
+	{
+	// Deserialize d->m_name
+	aDataStream>>aPlace.d->m_name;
+	
+	// Deserialize d->m_city
+	aDataStream>>aPlace.d->m_city;
+	
+	// Deserialize d->m_street
+	aDataStream>>aPlace.d->m_street;
+	
+	// Deserialize d->m_zipcode
+	aDataStream>>aPlace.d->m_zipcode;
+	
+	// Deserialize d->m_country
+	aDataStream>>aPlace.d->m_country;
+	
+	// Deserialize d->m_geo
+	aDataStream>>aPlace.d->m_geo;
+	
+	// Deserialize d->m_url
+	aDataStream>>aPlace.d->m_url;
+	
+	// Deserialize d->m_placeId
+	aDataStream>>aPlace.d->m_placeId;
+		
+	return aDataStream;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smflocation.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,217 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfLocation class represents a place and its related information
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+#ifndef SMFLOCATION_H_
+#define SMFLOCATION_H_
+
+#include <QUrl>
+#include <qgeopositioninfo.h> // Qt mobility class
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+// Qt mobility - namespace
+using namespace QtMobility;
+
+enum SmfLocationSearchBoundary 
+{
+	SearchByStreet = 0x00,
+	SearchByLocality,
+	SearchByPostOffice,
+	SearchByTown,
+	SearchByRegion,
+	SearchByState,
+	SearchByCountry
+};
+
+class SmfLocationPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The SmfLocation class represents a location and its related information.
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+class SMFCLIENT_EXPORT SmfLocation
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfLocation( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfLocation( const SmfLocation &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 * @return The current object reference
+	 */
+	SmfLocation& operator=( const SmfLocation &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfLocation( );
+	
+	/**
+	 * Method to get the place name
+	 * @return The place name
+	 */
+	QString name( ) const;
+	
+	/**
+	 * Method to get the city of place
+	 * @return The city of the place
+	 */
+	QString city( ) const;
+	
+	/**
+	 * Method to get the street information of place
+	 * @return The street information of the place
+	 */
+	QString street( ) const;
+	
+	/**
+	 * Method to get the zip code of place
+	 * @return The zip code of place
+	 */
+	QString zipCode( ) const;
+	
+	/**
+	 * Method to get the country of place
+	 * @return The country of place
+	 */
+	QString country( ) const;
+	
+	/**
+	 * Method to get the Geo Position information (like information gathered 
+	 * on a global position, direction and velocity at a particular point 
+	 * in time) of the place.
+	 * @return The Geo Position information of place
+	 */
+	QGeoPositionInfo geoPositionInfo( ) const;
+	
+	/**
+	 * Method to get the url indicating the place
+	 * @return The url indicating the place
+	 */
+	QUrl url( ) const;
+	
+	/**
+	 * Method to get the id of the place
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the place name
+	 * @param aPlace The new place name
+	 */
+	void setName( const QString &aPlace );
+	
+	/**
+	 * Method to set the city of  place
+	 * @param aCity The new city of the place
+	 */
+	void setCity( const QString &aCity );
+	
+	/**
+	 * Method to set the street information of place
+	 * @param aStreet The new street information of the place
+	 */
+	void setStreet( const QString &aStreet );
+	
+	/**
+	 * Method to set the zip code of place
+	 * @param aZipCode The new zip code of place
+	 */
+	void setZipCode( const QString &aZipCode );
+	
+	/**
+	 * Method to set the country of place
+	 * @param aCountry The new country of place
+	 */
+	void setCountry( const QString &aCountry );
+	
+	/**
+	 * Method to set the Geo Postion information (like information gathered 
+	 * on a global position, direction and velocity at a particular point 
+	 * in time) of the place.
+	 * @param aGeoPosInfo The new Geo Position information of place
+	 */
+	void setGeoPositionInfo( const QGeoPositionInfo &aGeoPosInfo );
+	
+	/**
+	 * Method to set the url indicating the place
+	 * @param aUrl The new url indicating the place
+	 */
+	void setUrl( const QUrl &aUrl );
+	
+	/**
+	 * Method to set the id of the place
+	 * @return The ID value 
+	 */
+	void setId( const QString &aId );
+	
+private:
+	QSharedDataPointer<SmfLocationPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfLocation &aPlace );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfLocation &aPlace );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfLocation object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPlace The SmfLocation object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfLocation &aPlace );
+
+/**
+ * Method for Internalization. Reads a SmfLocation object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPlace The SmfLocation object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfLocation &aPlace);
+
+typedef QList<SmfLocation> SmfLocationList;
+
+// Make the class SmfLocation known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfLocation)
+Q_DECLARE_METATYPE(QList<SmfLocation>)
+
+#endif /* SMFLOCATION_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smflocation_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,79 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfLocation class
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+#ifndef SMFLOCATION_P_H_
+#define SMFLOCATION_P_H_
+
+#include <QUrl>
+#include <qgeopositioninfo.h> // Qt mobility class
+#include <QSharedData>
+
+// Qt mobility - namespace
+using namespace QtMobility;
+
+class SmfLocationPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfLocationPrivate( ) { 
+		m_name.clear();
+		m_city.clear();
+		m_street.clear();
+		m_zipcode.clear();
+		m_country.clear();
+		m_url.clear();
+		m_placeId.clear(); }
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfLocationPrivate( const SmfLocationPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_name ( aOther.m_name ),
+		m_city ( aOther.m_city ),
+		m_street ( aOther.m_street ),
+		m_zipcode ( aOther.m_zipcode ),
+		m_country ( aOther.m_country ),
+		m_geo ( aOther.m_geo ),
+		m_url ( aOther.m_url ),
+		m_placeId ( aOther.m_placeId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfLocationPrivate( )
+		{
+		}
+  
+	QString m_name;			// place name
+	QString m_city;			// city of place
+	QString m_street;		// street of place
+	QString m_zipcode;		// zip code of place
+	QString m_country;		// country of place
+	QGeoPositionInfo m_geo;	// place geo position information
+	QUrl m_url;				// url indicating the place
+	QString m_placeId;		// place id
+	
+};
+
+#endif /* SMFLOCATION_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smflyrics.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,182 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfLyrics class represents an instance of a music track's lyrics
+ *
+ */
+
+#include <smflyrics.h>
+#include <smflyrics_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfLyrics::SmfLyrics( )
+	{
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfLyrics::SmfLyrics( const SmfLyrics &aOther )
+	:d ( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfLyrics& SmfLyrics::operator=( const SmfLyrics &aOther )
+	{
+	d->m_lyrics = aOther.d->m_lyrics;
+	d->m_language = aOther.d->m_language;
+	d->m_releaseYr = aOther.d->m_releaseYr;
+	d->m_lyricsId = aOther.d->m_lyricsId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfLyrics::~SmfLyrics( )
+	{
+	}
+
+/**
+ * Method to get the lyrics
+ * @return The lyrics data
+ */
+QByteArray SmfLyrics::lyrics( ) const
+	{
+	return d->m_lyrics;
+	}
+
+/**
+ * Method to get the language
+ * @return The language
+ */
+QString SmfLyrics::language( ) const
+	{
+	return d->m_language;
+	}
+
+/**
+ * Method to get the release year
+ * @return The release year
+ */
+QDateTime SmfLyrics::releaseYear( ) const
+	{
+	return d->m_releaseYr;
+	}
+
+/**
+ * Method to get the id of the lyrics
+ * @return The ID value 
+ */
+QString SmfLyrics::id( ) const
+	{
+	return d->m_lyricsId;
+	}
+
+/**
+ * Method to set the lyrics
+ * @param aLyrics The lyrics data
+ */
+void SmfLyrics::setLyrics( const QByteArray &aLyrics )
+	{
+	d->m_lyrics = aLyrics;
+	}
+
+/**
+ * Method to set the language
+ * @param aLang The language
+ */
+void SmfLyrics::setLanguage( const QString &aLang )
+	{
+	d->m_language = aLang;
+	}
+
+/**
+ * Method to set the release year
+ * @param aRelYear The release year
+ */
+void SmfLyrics::setReleaseYear( const QDateTime &aRelYear )
+	{
+	d->m_releaseYr = aRelYear;
+	}
+
+/**
+ * Method to set the id of the lyrics
+ * @param aId The ID value 
+ */
+void SmfLyrics::setId( const QString &aId )
+	{
+	d->m_lyricsId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfLyrics object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aLyrics The SmfLyrics object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfLyrics &aLyrics )
+	{
+	// Serialize d->m_lyrics
+	aDataStream<<aLyrics.d->m_lyrics;
+	
+	// Serialize d->m_language
+	aDataStream<<aLyrics.d->m_language;
+	
+	// Serialize d->m_releaseYr
+	aDataStream<<aLyrics.d->m_releaseYr;
+	
+	// Serialize d->m_lyricsId
+	aDataStream<<aLyrics.d->m_lyricsId;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfLyrics object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aLyrics The SmfLyrics object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfLyrics &aLyrics)
+	{
+	// Deserialize d->m_lyrics
+	aDataStream>>aLyrics.d->m_lyrics;
+	
+	// Deserialize d->m_language
+	aDataStream>>aLyrics.d->m_language;
+	
+	// Deserialize d->m_releaseYr
+	aDataStream>>aLyrics.d->m_releaseYr;
+	
+	// Deserialize d->m_lyricsId
+	aDataStream>>aLyrics.d->m_lyricsId;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smflyrics.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,149 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfLyrics class represents an instance of a music track's lyrics
+ *
+ */
+
+#ifndef SMFLYRICS_H_
+#define SMFLYRICS_H_
+
+#include <qdatastream.h>
+#include <QDateTime>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfLyricsPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The lyrics class represents an instance of a music track's lyrics
+ */
+class SMFCLIENT_EXPORT SmfLyrics
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfLyrics( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfLyrics( const SmfLyrics &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 * @return The current object reference
+	 */
+	SmfLyrics& operator=( const SmfLyrics &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfLyrics( );
+	
+	/**
+	 * Method to get the lyrics
+	 * @return The lyrics data
+	 */
+	QByteArray lyrics( ) const;
+	
+	/**
+	 * Method to get the language
+	 * @return The language
+	 */
+	QString language( ) const;
+	
+	/**
+	 * Method to get the release year
+	 * @return The release year
+	 */
+	QDateTime releaseYear( ) const;
+	
+	/**
+	 * Method to get the id of the lyrics
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the lyrics
+	 * @param aLyrics The lyrics data
+	 */
+	void setLyrics( const QByteArray &aLyrics );
+	
+	/**
+	 * Method to set the language
+	 * @param aLang The language
+	 */
+	void setLanguage( const QString &aLang );
+	
+	/**
+	 * Method to set the release year
+	 * @param aRelYear The release year
+	 */
+	void setReleaseYear( const QDateTime &aRelYear );
+	
+	/**
+	 * Method to set the id of the lyrics
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId );
+	
+private:
+	QSharedDataPointer<SmfLyricsPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfLyrics &aLyrics );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfLyrics &aLyrics );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfLyrics object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aLyrics The SmfLyrics object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfLyrics &aLyrics );
+
+/**
+ * Method for Internalization. Reads a SmfLyrics object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aLyrics The SmfLyrics object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfLyrics &aLyrics);
+
+
+typedef QList<SmfLyrics> SmfLyricsList;
+
+// Make the class SmfLyrics known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfLyrics)
+Q_DECLARE_METATYPE(QList<SmfLyrics>)
+
+
+#endif /* SMFLYRICS_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smflyrics_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfLyrics class
+ *
+ */
+
+#ifndef SMFLYRICS_P_H_
+#define SMFLYRICS_P_H_
+
+#include <QDateTime>
+#include <QSharedData>
+
+class SmfLyricsPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfLyricsPrivate( ) { 
+		m_lyrics.clear();
+		m_language.clear();
+		m_lyricsId.clear(); 
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfLyricsPrivate( const SmfLyricsPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_lyrics ( aOther.m_lyrics ),
+		m_language ( aOther.m_language ),
+		m_releaseYr ( aOther.m_releaseYr ),
+		m_lyricsId ( aOther.m_lyricsId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfLyricsPrivate( )
+		{
+		}
+  
+	QByteArray m_lyrics;	// lyrics data
+	QString m_language;		// language
+	QDateTime m_releaseYr;	// release year
+	QString m_lyricsId;		// lyrics id
+	
+};
+
+#endif /* SMFLYRICS_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicfingerprint.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfMusicFingerPrint class represents a music finger print used in searches
+ *
+ */
+
+#include <smfmusicfingerprint.h>
+#include <smfmusicfingerprint_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfMusicFingerPrint::SmfMusicFingerPrint( )
+	{
+	d = new SmfMusicFingerPrintPrivate;
+	}
+
+/**
+ * Constructor with default argument
+ * @param aParent The parent object
+ */
+SmfMusicFingerPrint::SmfMusicFingerPrint( const SmfMusicFingerPrint &aOther )
+	:d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfMusicFingerPrint& SmfMusicFingerPrint::operator=( const SmfMusicFingerPrint &aOther )
+	{
+	d->m_fingerPrintData = aOther.d->m_fingerPrintData;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfMusicFingerPrint::~SmfMusicFingerPrint( )
+	{
+	}
+
+/**
+ * GEt the music finger print data
+ * @return The music finger print data
+ */
+QByteArray SmfMusicFingerPrint::musicFingerPrint ( ) const
+	{
+	return d->m_fingerPrintData;
+	}
+
+/**
+ * Method to set the music finger print data
+ * @param aFp The music finger print data
+ */
+void SmfMusicFingerPrint::setMusicFingerPrint ( const QByteArray &aFp)
+	{
+	d->m_fingerPrintData = aFp;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfMusicFingerPrint object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aMFP The SmfMusicFingerPrint object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicFingerPrint &aMFP )
+	{
+	// Serialize d->m_fingerPrintData
+	aDataStream<<aMFP.d->m_fingerPrintData;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfMusicFingerPrint object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aMFP The SmfMusicFingerPrint object to be internalized
+ * @return reference to the stream
+ */
+ QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicFingerPrint &aMFP)
+	{
+	// Deserialize d->m_fingerPrintData
+	aDataStream>>aMFP.d->m_fingerPrintData;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicfingerprint.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfMusicFingerPrint class represents a music finger print used in searches
+ *
+ */
+
+#ifndef SMFMUSICFINGERPRINT_H_
+#define SMFMUSICFINGERPRINT_H_
+
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfMusicFingerPrintPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The musicfingerprint class represents a music finger print used in searches
+ */
+class SMFCLIENT_EXPORT SmfMusicFingerPrint
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfMusicFingerPrint( );
+	
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfMusicFingerPrint( const SmfMusicFingerPrint &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 */
+	SmfMusicFingerPrint& operator=( const SmfMusicFingerPrint &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicFingerPrint( );
+	
+	/**
+	 * Method to get the music finger print data
+	 * @return The music finger print data
+	 */
+	QByteArray musicFingerPrint ( ) const;
+	
+	/**
+	 * Method to set the music finger print data
+	 * @param aFp The music finger print data
+	 */
+	void setMusicFingerPrint ( const QByteArray &aFp);
+	
+private:
+	QSharedDataPointer<SmfMusicFingerPrintPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfMusicFingerPrint &aMFP );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfMusicFingerPrint &aMFP );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfMusicFingerPrint object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aMFP The SmfMusicFingerPrint object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicFingerPrint &aMFP );
+
+/**
+ * Method for Internalization. Reads a SmfMusicFingerPrint object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aMFP The SmfMusicFingerPrint object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicFingerPrint &aMFP);
+
+
+// Make the class SmfMusicFingerPrint known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfMusicFingerPrint)
+
+
+#endif /* SMFMUSICFINGERPRINT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicfingerprint_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,55 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfMusicFingerPrint class
+ *
+ */
+
+#ifndef SMFMUSICFINGERPRINT_P_H_
+#define SMFMUSICFINGERPRINT_P_H_
+
+#include <QSharedData>
+
+class SmfMusicFingerPrintPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfMusicFingerPrintPrivate( )
+		{
+		}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfMusicFingerPrintPrivate( const SmfMusicFingerPrintPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_fingerPrintData ( aOther.m_fingerPrintData )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicFingerPrintPrivate( )
+		{
+		}
+  
+	QByteArray m_fingerPrintData;	// Finger print data
+	
+};
+
+
+#endif /* SMFMUSICFINGERPRINT_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicprofile.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The music profile class represents a user's profile in music site
+ *
+ */
+
+#include <smfmusicprofile.h>
+#include <smfmusicprofile_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfMusicProfile::SmfMusicProfile( )
+	{
+	d = new SmfMusicProfilePrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfMusicProfile::SmfMusicProfile( const SmfMusicProfile &aOther )
+	:d ( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfMusicProfile& SmfMusicProfile::operator=( const SmfMusicProfile &aOther )
+	{
+	d->m_usage = aOther.d->m_usage;
+	d->m_interest = aOther.d->m_interest;
+	d->m_events = aOther.d->m_events;
+	d->m_profileId = aOther.d->m_profileId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfMusicProfile::~SmfMusicProfile( )
+	{
+	}
+
+/**
+ * Method to get the user's used tracks
+ * @return The users track list
+ */
+QList<SmfTrackInfo> SmfMusicProfile::musicUsageInfo( ) const
+	{
+	return d->m_usage;
+	}
+
+/**
+ * Method to get the user's interested tracks
+ * @return The users interested track list
+ */
+QList<SmfTrackInfo> SmfMusicProfile::interestInfo( ) const
+	{
+	return d->m_interest;
+	}
+
+/**
+ * Method to get the user events as list of SmfEvents
+ * @return The list of events
+ */
+QList<SmfEvent> SmfMusicProfile::userEvents( ) const
+	{
+	return d->m_events;
+	}
+
+/**
+ * Method to get the id of the music profile
+ * @return The ID value 
+ */
+QString SmfMusicProfile::id( ) const
+	{
+	return d->m_profileId;
+	}
+
+/**
+ * Method to set the user's used tracks
+ * @param aUsage The users new track list
+ */
+void SmfMusicProfile::setMusicUsageInfo( const QList<SmfTrackInfo>& aUsage )
+	{
+	d->m_usage = aUsage;
+	}
+
+/**
+ * Method to set the user's interested tracks
+ * @param aInterest The users new interested track list
+ */
+void SmfMusicProfile::setInterestInfo( const QList<SmfTrackInfo>& aInterest )
+	{
+	d->m_interest = aInterest;
+	}
+
+/**
+ * Method to set the user events as list of SmfEvents
+ * @param aList The list of events
+ */
+void SmfMusicProfile::setUserEvents( const QList<SmfEvent> &aList )
+	{
+	d->m_events = aList;
+	}
+
+/**
+ * Method to set the id of the music profile
+ * @param aId The ID value 
+ */
+void SmfMusicProfile::setId( const QString &aId )
+	{
+	d->m_profileId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfMusicProfile object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aProfile The SmfMusicProfile object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicProfile &aProfile )
+	{
+	// Serialize d->m_usage
+	aDataStream<<aProfile.d->m_usage;
+	
+	// Serialize d->m_interest
+	aDataStream<<aProfile.d->m_interest;
+	
+	// Serialize d->m_events
+	aDataStream<<aProfile.d->m_events;
+	
+	// Serialize d->m_profileId
+	aDataStream<<aProfile.d->m_profileId;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfMusicProfile object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aProfile The SmfMusicProfile object to be internalized
+ * @return reference to the stream
+ */
+ QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicProfile &aProfile)
+	{
+	// Deserialize d->m_usage
+	aDataStream>>aProfile.d->m_usage;
+	
+	// Deserialize d->m_interest
+	aDataStream>>aProfile.d->m_interest;
+	
+	// Deserialize d->m_events
+	aDataStream>>aProfile.d->m_events;
+	
+	// Deserialize d->m_profileId
+	aDataStream>>aProfile.d->m_profileId;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicprofile.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,147 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The music profile class represents a user's profile in music site
+ *
+ */
+
+#ifndef SMFMUSICPROFILE_H_
+#define SMFMUSICPROFILE_H_
+
+#include <smftrackinfo.h>
+#include <smfevent.h>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfMusicProfilePrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The music profile class represents a user's profile in music site
+ */
+class SMFCLIENT_EXPORT SmfMusicProfile
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfMusicProfile( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfMusicProfile( const SmfMusicProfile &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 */
+	SmfMusicProfile& operator=( const SmfMusicProfile &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicProfile( );
+	
+	/**
+	 * Method to get the user's used tracks
+	 * @return The users track list
+	 */
+	QList<SmfTrackInfo> musicUsageInfo( ) const;
+	
+	/**
+	 * Method to get the user's interested tracks
+	 * @return The users interested track list
+	 */
+	QList<SmfTrackInfo> interestInfo( ) const;
+	
+	/**
+	 * Method to get the user events as list of SmfEvents
+	 * @return The list of events
+	 */
+	QList<SmfEvent> userEvents( ) const;
+	
+	/**
+	 * Method to get the id of the music profile
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the user's used tracks
+	 * @param aUsage The users new track list
+	 */
+	void setMusicUsageInfo( const QList<SmfTrackInfo>& aUsage );
+	
+	/**
+	 * Method to set the user's interested tracks
+	 * @param aInterest The users new interested track list
+	 */
+	void setInterestInfo( const QList<SmfTrackInfo>& aInterest );
+	
+	/**
+	 * Method to set the user events as list of SmfEvents
+	 * @param aList The list of events
+	 */
+	void setUserEvents( const QList<SmfEvent> &aList );
+	
+	/**
+	 * Method to set the id of the music profile
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId );
+
+private:
+	QSharedDataPointer<SmfMusicProfilePrivate> d;
+
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfMusicProfile &aProfile );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfMusicProfile &aProfile );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfMusicProfile object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aProfile The SmfMusicProfile object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicProfile &aProfile );
+
+/**
+ * Method for Internalization. Reads a SmfMusicProfile object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aProfile The SmfMusicProfile object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicProfile &aProfile);
+
+typedef QList<SmfMusicProfile> SmfMusicProfileList;
+
+// Make the class SmfMusicProfile known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfMusicProfile)
+Q_DECLARE_METATYPE(QList<SmfMusicProfile>)
+
+#endif /* SMFMUSICPROFILE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicprofile_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,66 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfMusicProfile class
+ *
+ */
+
+#ifndef SMFMUSICPROFILE_P_H_
+#define SMFMUSICPROFILE_P_H_
+
+
+#include <smftrackinfo.h>
+#include <smfevent.h>
+#include <QSharedData>
+
+class SmfMusicProfilePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfMusicProfilePrivate( ) { 
+		m_usage.clear(); 
+		m_interest.clear();
+		m_events.clear();
+		m_profileId.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfMusicProfilePrivate( const SmfMusicProfilePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_usage ( aOther.m_usage ), 
+		m_interest ( aOther.m_interest ),
+		m_events ( aOther.m_events ),
+		m_profileId ( aOther.m_profileId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicProfilePrivate( )
+		{
+		}
+  
+	QList<SmfTrackInfo> m_usage;	// usage tracks
+	QList<SmfTrackInfo> m_interest;	// interested tracks
+	QList<SmfEvent> m_events;		// events list
+	QString m_profileId;			// profile Id
+	
+};
+
+#endif /* SMFMUSICPROFILE_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicrating.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,159 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The music rating class represents an instance of rating 
+ * about a music track
+ *
+ */
+
+#include <smfmusicrating.h>
+#include <smfmusicrating_p.h>
+
+/**
+ * Constructor with default argument
+ * @param aParent The SmfTrackInfo instance
+ */
+SmfMusicRating::SmfMusicRating( SmfTrackInfo *aParent )
+	{
+	d = new SmfMusicRatingPrivate();
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfMusicRating::SmfMusicRating( const SmfMusicRating &aOther )
+	: d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator 
+ * @param aOther The reference object
+ */
+SmfMusicRating& SmfMusicRating::operator=( const SmfMusicRating &aOther )
+	{
+	d->m_rating = aOther.d->m_rating;
+	d->m_max = aOther.d->m_max;
+	d->m_min = aOther.d->m_min;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfMusicRating::~SmfMusicRating( )
+	{
+	}
+
+/**
+ * Method to get the rating
+ * @return The rating value
+ */
+int SmfMusicRating::rating( ) const
+	{
+	return d->m_rating;
+	}
+
+/**
+ * Method to get the max rating
+ * @return The max rating value
+ */
+int SmfMusicRating::maxRating( ) const
+	{
+	return d->m_max;
+	}
+
+/**
+ * Method to get the min rating
+ * @return The min rating value
+ */
+int SmfMusicRating::minRating( ) const
+	{
+	return d->m_min;
+	}
+
+/**
+ * Method to set the rating
+ * @param aRating The rating value
+ */
+void SmfMusicRating::setRating( const int &aRating )
+	{
+	d->m_rating = aRating;
+	}
+
+/**
+ * Method to set the max rating
+ * @param aMax The max rating value
+ */
+void SmfMusicRating::setMaxRating( const int &aMax )
+	{
+	d->m_max = aMax;
+	}
+
+/**
+ * Method to set the min rating
+ * @param aMin The min rating value
+ */
+void SmfMusicRating::setMinRating( const int &aMin )
+	{
+	d->m_min = aMin;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfMusicRating object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aMusicRating The SmfMusicRating object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicRating &aMusicRating )
+	{
+	// Serialize d->m_rating
+	aDataStream<<aMusicRating.d->m_rating;
+	
+	// Serialize d->m_max
+	aDataStream<<aMusicRating.d->m_max;
+	
+	// Serialize d->m_min
+	aDataStream<<aMusicRating.d->m_min;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfMusicRating object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aMusicRating The SmfMusicRating object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicRating &aMusicRating)
+	{
+	// Deserialize d->m_rating
+	aDataStream>>aMusicRating.d->m_rating;
+	
+	// Deserialize d->m_max
+	aDataStream>>aMusicRating.d->m_max;
+	
+	// Deserialize d->m_min
+	aDataStream>>aMusicRating.d->m_min;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicrating.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The music rating class represents an instance of rating 
+ * about a music track
+ *
+ */
+
+#ifndef SMFMUSICRATING_H_
+#define SMFMUSICRATING_H_
+
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfTrackInfo;
+class SmfMusicRatingPrivate;
+
+/**
+ * Indicates range of values to represent ratings,
+ * SP should normalize their rating value to this scale
+ */
+const int SMF_MAX_RATING = 10;
+const int SMF_MIN_RATING = 0;
+
+/**
+ * @ingroup smf_common_group
+ * The music rating class represents an instance of rating 
+ * about a music track 
+ */
+class SMFCLIENT_EXPORT SmfMusicRating
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The SmfTrackInfo instance
+	 */
+	SmfMusicRating( SmfTrackInfo *aParent = 0 );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfMusicRating( const SmfMusicRating &aOther );
+	
+	/**
+	 * Overloaded = operator 
+	 * @param aOther The reference object
+	 */
+	SmfMusicRating& operator=( const SmfMusicRating &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicRating( );
+	
+	/**
+	 * Method to get the rating
+	 * @return The rating value
+	 */
+	int rating( ) const;
+
+	/**
+	 * Method to get the max rating
+	 * @return The max rating value
+	 */
+	int maxRating( ) const;
+	
+	/**
+	 * Method to get the min rating
+	 * @return The min rating value
+	 */
+	int minRating( ) const;
+	
+	/**
+	 * Method to set the rating
+	 * @param aRating The rating value
+	 */
+	void setRating( const int &aRating );
+
+	/**
+	 * Method to set the max rating
+	 * @param aMax The max rating value
+	 */
+	void setMaxRating( const int &aMax );
+	
+	/**
+	 * Method to set the min rating
+	 * @param aMin The min rating value
+	 */
+	void setMinRating( const int &aMin );
+	
+private:
+	QSharedDataPointer<SmfMusicRatingPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfMusicRating &aMusicRating );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfMusicRating &aMusicRating );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfMusicRating object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aMusicRating The SmfMusicRating object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfMusicRating &aMusicRating );
+
+/**
+ * Method for Internalization. Reads a SmfMusicRating object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aMusicRating The SmfMusicRating object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfMusicRating &aMusicRating);
+
+
+// Make the class SmfMusicRating known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfMusicRating)
+
+
+#endif /* SMFMUSICRATING_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfmusicrating_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfMusicRating class
+ *
+ */
+
+#ifndef SMFMUSICRATING_P_H_
+#define SMFMUSICRATING_P_H_
+
+#include <QSharedData>
+#include <smfmusicrating.h>
+
+class SmfMusicRatingPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfMusicRatingPrivate( ) { 
+		m_rating = 0;
+		m_max = SMF_MAX_RATING;
+		m_min = SMF_MIN_RATING;
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfMusicRatingPrivate( const SmfMusicRatingPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_rating ( aOther.m_rating ),
+		m_max ( aOther.m_max ),
+		m_min ( aOther.m_min )  { }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfMusicRatingPrivate( )
+		{
+		}
+  
+	qint32 m_rating;	// rating
+	qint32 m_max;		// max rating
+	qint32 m_min;		// min rating
+	
+};
+
+#endif /* SMFMUSICRATING_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfobserver.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,20 @@
+
+/*
+ * SmfObserver.h
+ *
+ *  Created on: Mar 17, 2010
+ *      Author: manasij
+ */
+
+#ifndef SMFOBSERVER_H_
+#define SMFOBSERVER_H_
+class QByteArray;
+#include "smfglobal.h"
+#include <QObject>
+class smfObserver : public QObject
+	{
+public:
+	virtual void resultsAvailable(QByteArray result,SmfRequestTypeID opcode, SmfError error)= 0;
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpicture.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,344 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The picture class represents an instance of a picture
+ *
+ */
+
+#include <smfpicture.h>
+#include <smfpicture_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfPicture::SmfPicture( )
+	{
+	d = new SmfPicturePrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfPicture::SmfPicture( const SmfPicture &aOther )
+	: d( aOther.d )
+	{
+	}
+
+/**
+ * CConstructs SmfPicture from QImage
+ * @param aOther The QImage
+ */
+SmfPicture::SmfPicture( const QImage &aImage )
+	{
+	d = new SmfPicturePrivate(aImage);
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfPicture& SmfPicture::operator=( const SmfPicture &aOther )
+	{
+	d->m_photoId = aOther.d->m_photoId;
+	d->m_owner = aOther.d->m_owner;
+	d->m_title = aOther.d->m_title;
+	d->m_description = aOther.d->m_description;
+	d->m_picVisibility = aOther.d->m_picVisibility;
+	d->m_postedOn = aOther.d->m_postedOn;
+	d->m_comments = aOther.d->m_comments;
+	d->m_tags = aOther.d->m_tags;
+	d->m_url = aOther.d->m_url;
+	d->m_picture = aOther.d->m_picture;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfPicture::~SmfPicture( )
+	{
+	}
+
+/**
+ * Method to get a picture owner
+ * @return The owner of the picture
+ */
+QString SmfPicture::owner( ) const
+	{
+	return d->m_owner;
+	}
+
+/**
+ * Method to get a picture title
+ * @return The title of the picture
+ */
+QString SmfPicture::title( ) const
+	{
+	return d->m_title;
+	}
+
+/**
+ * Method to get a picture description
+ * @return The description of the picture
+ */
+QString SmfPicture::description( ) const
+	{
+	return d->m_description;
+	}
+
+/**
+ * Method to get a visibility of a picture for public
+ * @return The visibility mode of this picture for others
+ */
+SmfPictureVisibility SmfPicture::visibility( ) const
+	{
+	return d->m_picVisibility;
+	}
+
+/**
+ * Method to get the date of posting the picture
+ * @return The posted date of the picture
+ */
+QDateTime SmfPicture::postedDate( ) const
+	{
+	return d->m_postedOn;
+	}
+
+/**
+ * Method to get the comments for the picture
+ * @return The comments for the picture
+ */
+QList<SmfComment> SmfPicture::comments( ) const
+	{
+	return d->m_comments;
+	}
+
+/**
+ * Method to get the tags for the picture
+ * @return The tags for the picture
+ */
+QStringList SmfPicture::tags( ) const
+	{
+	return d->m_tags;
+	}
+
+/**
+ * Method to get the url of the picture
+ * @return The url of the picture
+ */
+QUrl SmfPicture::url( ) const
+	{
+	return d->m_url;
+	}
+
+/**
+ * Method to get the picture data as QImage
+ * @return The picture as QImage
+ */
+QImage SmfPicture::picture( ) const
+	{
+	return d->m_picture;
+	}
+	
+/**
+ * Method to get the id of the picture
+ * @return The ID value 
+ */
+QString SmfPicture::id( ) const
+	{
+	return d->m_photoId;
+	}
+
+/**
+ * Method to set a picture owner
+ * @param aOwner The owner of the picture
+ */
+void SmfPicture::setOwner( const QString &aOwner )
+	{
+	d->m_owner = aOwner;
+	}
+
+/**
+ * Method to set a picture title
+ * @param aTitle The title of the picture
+ */
+void SmfPicture::setTitle( const QString &aTitle )
+	{
+	d->m_title = aTitle;
+	}
+
+/**
+ * Method to set a picture description
+ * @param aDescription The description of the picture
+ */
+void SmfPicture::setDescription( const QString &aDescription )
+	{
+	d->m_description = aDescription;
+	}
+
+/**
+ * Method to set a visibility of a picture for public
+ * @param aVisibility aVisibility The visibility mode of 
+ * this picture for others
+ */
+void SmfPicture::setVisibility( const SmfPictureVisibility &aVisibility )
+	{
+	d->m_picVisibility = aVisibility;
+	}
+
+/**
+ * Method to set the date of posting the picture
+ * @param aDate The post date of the picture
+ */
+void SmfPicture::setPostedDate( const QDateTime &aDate )
+	{
+	d->m_postedOn = aDate;
+	}
+
+/**
+ * Method to add comment on the picture
+ * @param aComment The comment for the picture
+ */
+void SmfPicture::addComment( const SmfComment &aComment )
+	{
+	d->m_comments.append(aComment);
+	}
+
+/**
+ * Method to add tags for the picture
+ * @param aTag The tag for the picture
+ */
+void SmfPicture::addTags( const QStringList &aTags )
+	{
+	d->m_tags = aTags;
+	}
+
+/**
+ * Method to set the url of the picture
+ * @param aUrl The url of the picture
+ */
+void SmfPicture::setUrl( const QUrl &aUrl )
+	{
+	d->m_url = aUrl;
+	}
+
+/**
+ * Method to set the picture data as QImage
+ * @param aData The picture as QImage
+ */
+void SmfPicture::setPicture( const QImage &aData )
+	{
+	d->m_picture = aData;
+	}
+
+/**
+ * Method to set the id of the picture
+ * @param aId The ID value 
+ */
+void SmfPicture::setId( const QString &aId )
+	{
+	d->m_photoId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfPicture object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPic The SmfPicture object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream& operator<<( QDataStream &aDataStream, 
+		const SmfPicture &aPic )
+	{
+	// Serialize d->m_photoId
+	aDataStream<<aPic.d->m_photoId;
+	
+	// Serialize d->m_owner
+	aDataStream<<aPic.d->m_owner;
+	
+	// Serialize d->m_title
+	aDataStream<<aPic.d->m_title;
+	
+	// Serialize d->m_description
+	aDataStream<<aPic.d->m_description;
+	
+	// Serialize d->m_picVisibility
+	aDataStream<<aPic.d->m_picVisibility;
+	
+	// Serialize d->m_postedOn
+	aDataStream<<aPic.d->m_postedOn;
+	
+	// Serialize d->m_comments
+	aDataStream<<aPic.d->m_comments;
+	
+	// Serialize d->m_tags
+	aDataStream<<aPic.d->m_tags;
+	
+	// Serialize d->m_url
+	aDataStream<<aPic.d->m_url;
+	
+	// Serialize d->m_picture
+	aDataStream<<aPic.d->m_picture;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfPicture object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPic The SmfPicture object to be internalized
+ * @return reference to the stream
+ */
+QDataStream& operator>>( QDataStream &aDataStream, 
+		SmfPicture &aPic)
+	{
+	// Deserialize d->m_photoId
+	aDataStream>>aPic.d->m_photoId;
+	
+	// Deserialize d->m_owner
+	aDataStream>>aPic.d->m_owner;
+	
+	// Deserialize d->m_title
+	aDataStream>>aPic.d->m_title;
+	
+	// Deserialize d->m_description
+	aDataStream>>aPic.d->m_description;
+	
+	// Deserialize d->m_picVisibility
+	quint32 val = aPic.d->m_picVisibility;
+	aDataStream>>val;
+	//aPic.d->m_picVisibility = val;
+
+	// Deserialize d->m_postedOn
+	aDataStream>>aPic.d->m_postedOn;
+	
+	// Deserialize d->m_comments
+	aDataStream>>aPic.d->m_comments;
+	
+	// Deserialize d->m_tags
+	aDataStream>>aPic.d->m_tags;
+	
+	// Deserialize d->m_url
+	aDataStream>>aPic.d->m_url;
+	
+	// Deserialize d->m_picture
+	aDataStream>>aPic.d->m_picture;
+	
+	return aDataStream;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpicture.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,242 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The picture class represents an instance of a picture
+ *
+ */
+
+#ifndef SMFPICTURE_H_
+#define SMFPICTURE_H_
+
+#include <QImage>
+#include <QDateTime>
+#include <QStringList>
+#include <QUrl>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+#include <smfcomment.h>
+
+class SmfPicturePrivate;
+
+/**
+ * SmfPictureVisibility enumeration
+ */
+enum SmfPictureVisibility
+	{
+	SMFVisibilityFriend,
+	SMFVisibilityPersonal,
+	SMFVisibilityFamily,
+	SMFVisibilityGroup,
+	SMFVisibilityPublic
+	};
+
+/**
+ * @ingroup smf_common_group
+ * The picture class represents an instance of a picture
+ */
+class SMFCLIENT_EXPORT SmfPicture
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfPicture( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPicture( const SmfPicture &aOther );
+	
+	/**
+	 * CConstructs SmfPicture from QImage
+	 * @param aImage The QImage
+	 */
+	SmfPicture( const QImage &aImage );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 * @return The current object reference
+	 */
+	SmfPicture& operator=(const SmfPicture &aOther);
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPicture( );
+	
+	/**
+	 * Method to get a picture owner
+	 * @return The owner of the picture
+	 */
+	QString owner( ) const;
+	
+	/**
+	 * Method to get a picture title
+	 * @return The title of the picture
+	 */
+	QString title( ) const;
+	
+	/**
+	 * Method to get a picture description
+	 * @return The description of the picture
+	 */
+	QString description( ) const;
+	
+	/**
+	 * Method to get a visibility of a picture for public
+	 * @return The visibility mode of this picture for others
+	 */
+	SmfPictureVisibility visibility( ) const;
+	
+	/**
+	 * Method to get the date of posting the picture
+	 * @return The posted date of the picture
+	 */
+	QDateTime postedDate( ) const;
+	
+	/**
+	 * Method to get the comments for the picture
+	 * @return The comments for the picture
+	 */
+	QList<SmfComment> comments( ) const;
+	
+	/**
+	 * Method to get the tags for the picture
+	 * @return The tags for the picture
+	 */
+	QStringList tags( ) const;
+	
+	/**
+	 * Method to get the url of the picture
+	 * @return The url of the picture
+	 */
+	QUrl url( ) const;
+	
+	/**
+	 * Method to get the picture data as QImage
+	 * @return The picture as QImage
+	 */
+	QImage picture( ) const;
+	
+	/**
+	 * Method to get the id of the picture
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+		
+	/**
+	 * Method to set a picture owner
+	 * @param aOwner The owner of the picture
+	 */
+	void setOwner( const QString &aOwner );
+	
+	/**
+	 * Method to set a picture title
+	 * @param aTitle The title of the picture
+	 */
+	void setTitle( const QString &aTitle );
+	
+	/**
+	 * Method to set a picture description
+	 * @param aDescription The description of the picture
+	 */
+	void setDescription( const QString &aDescription );
+	
+	/**
+	 * Method to set a visibility of a picture for public
+	 * @param aVisibility aVisibility The visibility mode of 
+	 * this picture for others
+	 */
+	void setVisibility( const SmfPictureVisibility &aVisibility );
+	
+	/**
+	 * Method to set the date of posting the picture
+	 * @param aDate The post date of the picture
+	 */
+	void setPostedDate( const QDateTime &aDate );
+	
+	/**
+	 * Method to add comment on the picture
+	 * @param aComment The comment for the picture
+	 */
+	void addComment( const SmfComment &aComment );
+	
+	/**
+	 * Method to add tags for the picture
+	 * @param aTag The tag for the picture
+	 */
+	void addTags( const QStringList &aTags );
+	
+	/**
+	 * Method to set the url of the picture
+	 * @param aUrl The url of the picture
+	 */
+	void setUrl( const QUrl &aUrl );
+	
+	/**
+	 * Method to set the picture data as QImage
+	 * @param aData The picture as QImage
+	 */
+	void setPicture( const QImage &aData );
+	
+	/**
+	 * Method to set the id of the picture
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId );
+	
+private:
+	QSharedDataPointer<SmfPicturePrivate> d;
+	
+	friend QDataStream& operator<<( QDataStream &aDataStream, 
+			const SmfPicture &aPic );
+
+	friend QDataStream& operator>>( QDataStream &aDataStream, 
+			SmfPicture &aPic );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfPicture object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPic The SmfPicture object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream& operator<<( QDataStream &aDataStream, 
+		const SmfPicture &aPic );
+
+/**
+ * Method for Internalization. Reads a SmfPicture object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPic The SmfPicture object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream& operator>>( QDataStream &aDataStream, 
+		SmfPicture &aPic);
+
+typedef QList<SmfPicture> SmfPictureList;
+
+// Make the class SmfPicture known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfPicture)
+Q_DECLARE_METATYPE(QList<SmfPicture>)
+
+#endif /* SMFPICTURE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpicture_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfPicture class
+ *
+ */
+
+#ifndef SMFPICTURE_P_H_
+#define SMFPICTURE_P_H_
+
+
+#include <QDateTime>
+#include <QStringList>
+#include <QUrl>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <smfpicture.h>
+
+class SmfPicturePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfPicturePrivate( ) { 
+		m_photoId.clear();
+		m_owner.clear();
+		m_title.clear();
+		m_description.clear();
+		m_comments.clear();
+		m_tags.clear();
+		m_url.clear();
+	}
+	/**
+	 * Constructor
+	 */
+	SmfPicturePrivate( const QImage &aImage ) { 
+		m_photoId.clear();
+		m_owner.clear();
+		m_title.clear();
+		m_description.clear();
+		m_comments.clear();
+		m_tags.clear();
+		m_url.clear();
+		m_picture = aImage;
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfPicturePrivate( const SmfPicturePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_photoId ( aOther.m_photoId ),
+		m_owner ( aOther.m_owner ),
+		m_title ( aOther.m_title ),
+		m_description ( aOther.m_description ),
+		m_picVisibility ( aOther.m_picVisibility ),
+		m_postedOn ( aOther.m_postedOn ),
+		m_comments ( aOther.m_comments ),
+		m_tags ( aOther.m_tags ),
+		m_url ( aOther.m_url ),
+		m_picture ( aOther.m_picture )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPicturePrivate( )
+		{
+		}
+  
+	QString m_photoId;		// unique ID of the picture, service provider specific
+	QString m_owner;		// owner of the picture
+	QString m_title;		// picture title
+	QString m_description;	// description
+	SmfPictureVisibility m_picVisibility;// picture visibility
+	QDateTime m_postedOn;	// date posted
+	QList<SmfComment> m_comments;		 // comments
+	QStringList m_tags;		// tags
+	QUrl m_url;				// url
+	QImage m_picture;		// picture data as bytearray
+	
+};
+
+#endif /* SMFPICTURE_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfplaylist.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,181 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The playlist class represents an instance of a playlist
+ *
+ */
+
+#include <smfplaylist.h>
+#include <smfplaylist_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfPlaylist::SmfPlaylist( )
+	{
+	d = new SmfPlaylistPrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfPlaylist::SmfPlaylist( const SmfPlaylist &aOther )
+	: d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfPlaylist& SmfPlaylist::operator=( const SmfPlaylist &aOther )
+	{
+	d->m_trackList = aOther.d->m_trackList;
+	d->m_title = aOther.d->m_title;
+	d->m_creationDate = aOther.d->m_creationDate;
+	d->m_playlistId = aOther.d->m_playlistId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfPlaylist::~SmfPlaylist( )
+	{
+	}
+
+/**
+ * Method to get the list of tracks in the playlist
+ * @return The list of tracks in the playlist
+ */
+QList<SmfTrackInfo> SmfPlaylist::trackList( ) const
+	{
+	return d->m_trackList;
+	}
+
+/**
+ * Method to get the playlist title
+ * @return The title of the playlist
+ */
+QString SmfPlaylist::playListTitle( ) const
+	{
+	return d->m_title;
+	}
+
+/**
+ * Method to get the creation date of the playlist
+ * @return The date and time of creation of the playlist
+ */
+QDateTime SmfPlaylist::creationDate( ) const
+	{
+	return d->m_creationDate;
+	}
+/**
+ * Method to get the id of the playlist
+ * @return The ID value 
+ */
+QString SmfPlaylist::id( ) const
+	{
+	return d->m_playlistId;
+	}
+
+/**
+ * Method to set the list of tracks in the playlist
+ * @param aList The new list of tracks in the playlist
+ */
+void SmfPlaylist::setTrackList( const QList<SmfTrackInfo> &aList )
+	{
+	d->m_trackList = aList;
+	}
+
+/**
+ * Method to set the playlist title
+ * @param aTitle The new title of the playlist
+ */
+void SmfPlaylist::setPlayListTitle( const QString &aTitle )
+	{
+	d->m_title = aTitle;
+	}
+
+/**
+ * Method to set the creation date of the playlist
+ * @param aDate The new date and time of creation of the playlist
+ */
+void SmfPlaylist::setCreationDate( const QDateTime &aDate )
+	{
+	d->m_creationDate = aDate;
+	}
+
+/**
+ * Method to set the id of the playlist
+ * @param aId The ID value 
+ */
+void SmfPlaylist::setId( const QString &aId)
+	{
+	d->m_playlistId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfPlaylist object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPlaylist The SmfPlaylist object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPlaylist &aPlaylist )
+	{
+	// Serialize d->m_trackList
+	aDataStream<<aPlaylist.d->m_trackList;
+	
+	// Serialize d->m_title
+	aDataStream<<aPlaylist.d->m_title;
+	
+	// Serialize d->m_creationDate
+	aDataStream<<aPlaylist.d->m_creationDate;
+	
+	// Serialize d->m_playlistId
+	aDataStream<<aPlaylist.d->m_playlistId;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfPlaylist object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPlaylist The SmfPlaylist object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPlaylist &aPlaylist)
+	{
+	// Deserialize d->m_trackList
+	aDataStream>>aPlaylist.d->m_trackList;
+	
+	// Deserialize d->m_title
+	aDataStream>>aPlaylist.d->m_title;
+	
+	// Deserialize d->m_creationDate
+	aDataStream>>aPlaylist.d->m_creationDate;
+	
+	// Deserialize d->m_playlistId
+	aDataStream>>aPlaylist.d->m_playlistId;
+	
+	return aDataStream;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfplaylist.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The playlist class represents an instance of a playlist
+ *
+ */
+
+#ifndef SMFPLAYLIST_H_
+#define SMFPLAYLIST_H_
+
+#include <smftrackinfo.h>
+#include <qdatastream.h>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfPlaylistPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The playlist class represents an instance of a playlist
+ */
+class SMFCLIENT_EXPORT SmfPlaylist
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfPlaylist( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPlaylist( const SmfPlaylist &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 */
+	SmfPlaylist& operator=( const SmfPlaylist &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPlaylist( );
+	
+	/**
+	 * Method to get the list of tracks in the playlist
+	 * @return The list of tracks in the playlist
+	 */
+	QList<SmfTrackInfo> trackList( ) const;
+	
+	/**
+	 * Method to get the playlist title
+	 * @return The title of the playlist
+	 */
+	QString playListTitle( ) const;
+	
+	/**
+	 * Method to get the creation date of the playlist
+	 * @return The date and time of creation of the playlist
+	 */
+	QDateTime creationDate( ) const;
+	
+	/**
+	 * Method to get the id of the playlist
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the list of tracks in the playlist
+	 * @param aList The new list of tracks in the playlist
+	 */
+	void setTrackList( const QList<SmfTrackInfo> &aList );
+	
+	/**
+	 * Method to set the playlist title
+	 * @param aTitle The new title of the playlist
+	 */
+	void setPlayListTitle( const QString &aTitle );
+	
+	/**
+	 * Method to set the creation date of the playlist
+	 * @param aDate The new date and time of creation of the playlist
+	 */
+	void setCreationDate( const QDateTime &aDate );
+	
+	/**
+	 * Method to set the id of the playlist
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId);
+	
+private:
+	QSharedDataPointer<SmfPlaylistPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfPlaylist &aPlaylist );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfPlaylist &aPlaylist );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfPlaylist object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPlaylist The SmfPlaylist object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPlaylist &aPlaylist );
+
+/**
+ * Method for Internalization. Reads a SmfPlaylist object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPlaylist The SmfPlaylist object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPlaylist &aPlaylist);
+
+typedef QList<SmfPlaylist> SmfPlaylistList;
+
+// Make the class SmfPlaylist known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfPlaylist)
+Q_DECLARE_METATYPE(QList<SmfPlaylist>)
+
+#endif /* SMFPLAYLIST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfplaylist_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfPlaylist class
+ *
+ */
+
+#ifndef SMFPLAYLIST_P_H_
+#define SMFPLAYLIST_P_H_
+
+#include <smftrackinfo.h>
+#include <QSharedData>
+
+class SmfPlaylistPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfPlaylistPrivate( ) { 
+		m_trackList.clear(); 
+		m_title.clear();
+		m_playlistId.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfPlaylistPrivate( const SmfPlaylistPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_trackList ( aOther.m_trackList ), 
+		m_title ( aOther.m_title ),
+		m_creationDate ( aOther.m_creationDate ),
+		m_playlistId ( aOther.m_playlistId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPlaylistPrivate( )
+		{
+		}
+  
+	QList<SmfTrackInfo> m_trackList;// list of tracks
+	QString m_title;				// playlist name
+	QDateTime m_creationDate;		// creation date
+	QString m_playlistId;
+	
+};
+
+#endif /* SMFPLAYLIST_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpluginutil.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,113 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Plugin util class provides the information required for the 
+ * plugins from Smf framework 
+ *
+ */
+
+#include <smfpluginutil.h>
+
+// Static data initialisation
+SmfPluginUtil* SmfPluginUtil::m_myInstance = NULL;
+
+/**
+ * Method to get the instance of SmfPluginUtil class
+ * @return The instance of SmfPluginUtil class
+ */
+SmfPluginUtil* SmfPluginUtil::getInstance ( )
+	{
+	if(NULL == m_myInstance)
+		m_myInstance = new SmfPluginUtil();
+	return m_myInstance;
+	}
+
+/**
+ * Constructor with default argument
+ */
+SmfPluginUtil::SmfPluginUtil ( )
+	{
+	m_jsonParser = new QJson::Parser;
+	}
+	
+/**
+ * Destructor
+ */
+SmfPluginUtil::~SmfPluginUtil ( )
+	{
+	if(m_jsonParser)
+		delete m_jsonParser;
+	
+	if(m_myInstance)
+		delete m_myInstance;
+	}
+	
+/**
+ * Method called by plugins to get the handle to QJson library 
+ * @return The QJson handle
+ */
+QJson::Parser* SmfPluginUtil::getJsonHandle( void )
+	{
+	return m_jsonParser;
+	}
+
+/**
+ * Method called by plugins to get the OAuth Keys. The PM sends the 
+ * keys only if the pluginID is that of a currently loaded plugin
+ * @param aKeys [out] The OAuth keys
+ * @param aRegToken The plugin's registration token
+ * @param aPluginID The ID of the plugin that requests for 
+ * the OAuth keys
+ */
+void SmfPluginUtil::getAuthKeys( QMap<QString, QString> &aKeys, 
+		const QString aRegToken, 
+		const QString aPluginID )
+	{
+	//// Call Credential manager function to get the keys passing the 
+	//// registration token and the plugin
+	}
+
+/**
+ * Method called by plugins to get the Nonce value
+ * @param aNonceString [out] The Nonce string
+ */
+void SmfPluginUtil::getNonce( QString &aNonceString )
+	{
+	//// Call Credential manager function to get the nonce string
+	}
+
+/**
+ * Method called by plugins to generate a parameters string required to 
+ * access Protected Resources using OAuth authorization.
+ * @param aRequestUrl The request URL
+ * @param aOperation The type of http operation
+ * @param aToken The access token
+ * @param aTokenSecret The token secret
+ * @param aSignatureMethod The signature method to be used
+ * @param aParams A map of parameters to its values
+ * @param aMode The mode of creation of the request
+ * @return The cretd parameter string
+ */
+QByteArray SmfPluginUtil::createParameterString( const QString &aRequestUrl, 
+		QNetworkAccessManager::Operation aOperation, 
+		const QByteArray &aToken, 
+		const QByteArray &aTokenSecret, 
+		const SmfSignatureMethod aSignatureMethod, 
+		const QMultiMap<QByteArray, QByteArray> &aParams, 
+		const SmfParsingMode aMode)
+	{
+	//// Call Credential manager function to create and sign the parameter string
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpluginutil.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,126 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Plugin util class provides the information required for the 
+ * plugins from Smf framework 
+ *
+ */
+
+#ifndef SMFPLUGINUTIL_H_
+#define SMFPLUGINUTIL_H_
+
+#include <QNetworkAccessManager>
+#include <QMap>
+#include <parser.h>
+#include <smfclientglobal.h>
+
+enum SmfSignatureMethod
+	{
+	HMAC_SHA1,
+	RSA_SHA1,
+	PLAINTEXT
+	};
+
+enum SmfParsingMode
+	{
+	ParseForRequestContent, //Inline query format (foo=bar&bar=baz&baz=foo ...), suitable for POST requests.
+	ParseForInlineQuery, // Same as ParseForRequestContent, but prepends the string with a question mark - 
+						// suitable for GET requests (appending parameters to the request URL) 
+	ParseForHeaderArguments // HTTP request header format (parameters to be put inside a request header). 
+	};
+
+/**
+ * The Plugin util class provides the information required for the 
+ * plugins from Smf framework
+ */
+class SMFCLIENT_EXPORT SmfPluginUtil
+	{
+public:
+	/**
+	 * Method to get the instance of SmfPluginUtil class
+	 * @return The instance of SmfPluginUtil class
+	 */
+	static SmfPluginUtil* getInstance ( );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPluginUtil ( );
+	
+	/**
+	 * Method called by plugins to get the handle to QJson library 
+	 * @return The QJson handle
+	 */
+	QJson::Parser* getJsonHandle( void );
+	
+	/**
+	 * Method called by plugins to get the OAuth Keys. The PM sends the 
+	 * keys only if the pluginID is that of a currently loaded plugin
+	 * @param aKeys [out] The OAuth keys
+	 * @param aRegToken The plugin's registration token
+	 * @param aPluginID The ID of the plugin that requests for 
+	 * the OAuth keys
+	 */
+	void getAuthKeys( QMap<QString, QString> &aKeys, 
+			const QString aRegToken, 
+			const QString aPluginID );
+	
+	/**
+	 * Method called by plugins to get the Nonce value
+	 * @param aNonceString [out] The Nonce string
+	 */
+	void getNonce( QString &aNonceString );
+	
+	/**
+	 * Method called by plugins to generate a parameters string required to 
+	 * access Protected Resources using OAuth authorization.
+	 * @param aRequestUrl The request URL
+	 * @param aOperation The type of http operation
+	 * @param aToken The access token
+	 * @param aTokenSecret The token secret
+	 * @param aSignatureMethod The signature method to be used
+	 * @param aParams A map of parameters to its values
+	 * @param aMode The mode of creation of the request
+	 * @return The cretd parameter string
+	 */
+	QByteArray createParameterString( const QString &aRequestUrl, 
+			QNetworkAccessManager::Operation aOperation, 
+			const QByteArray &aToken, 
+			const QByteArray &aTokenSecret, 
+			const SmfSignatureMethod aSignatureMethod, 
+			const QMultiMap<QByteArray, QByteArray> &aParams, 
+			const SmfParsingMode aMode);
+	
+private:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfPluginUtil ( );
+
+	
+private:
+	/**
+	 * The single instance of SmfPluginUtil
+	 */
+	static SmfPluginUtil* m_myInstance;
+	
+	/**
+	 * The instance of QJson::Parser
+	 */
+	QJson::Parser *m_jsonParser;
+	
+	};
+
+#endif /* SMFPLUGINUTIL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpost.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,208 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "Eclipse Public License v1.0" 
+* which accompanies  this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html"
+*
+* Initial Contributors:
+* Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+* Manasij Roy, Nalina Hariharan
+* 
+* Description:
+* The post class represents an instance of a post to a SN site
+*
+*/
+
+#include "smfpost.h"
+#include "smfpost_p.h"
+
+/**
+ * Constructor with default argument
+ * @param text Text
+ */
+SmfPost::SmfPost( )
+	{
+	d = new SmfPostPrivate();
+	}
+
+/**
+ * Constructor
+ * @param aText The post's text
+ * @param aImage The post's image
+ * @param aUrl The post's url
+ */
+SmfPost::SmfPost( QString aTitle, QString aDesc, QImage aImage, QUrl aUrl )
+	{
+	d = new SmfPostPrivate(aTitle, aDesc, aImage, aUrl);
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfPost::SmfPost( const SmfPost &aOther )
+: d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfPost& SmfPost::operator=( const SmfPost &aOther )
+	{
+	d->m_title = aOther.d->m_title;
+	d->m_desc = aOther.d->m_desc;
+	d->m_image = aOther.d->m_image;
+	d->m_url = aOther.d->m_url;
+	d->m_postId = aOther.d->m_postId;
+	return *this;
+	}
+/**
+ * Destructor
+ */
+SmfPost::~SmfPost( )
+	{
+	}
+
+/**
+ * Method to get the title of the post
+ * @return The post's title
+ */
+QString SmfPost::title( ) const
+		{
+	return d->m_title;
+		}
+
+/**
+ * Method to get the description of the post
+ * @return The post's description
+ */
+QString SmfPost::description( ) const
+		{
+	return d->m_desc;
+		}
+
+/**
+ * Method to get the image of the post
+ * @return The post's image
+ */
+QImage SmfPost::image( ) const
+		{
+	return d->m_image;
+		}
+
+/**
+ * Method to get the url of the post
+ * @return The post's url
+ */
+QUrl SmfPost::url( ) const
+		{
+	return d->m_url;
+		}
+
+/**
+ * Method to get the id of the post
+ * @return The ID value 
+ */
+QString SmfPost::id( ) const
+		{
+	return d->m_postId;
+		}
+void SmfPost::setId(QString aPostId)
+	{
+	d->m_postId = aPostId;
+	}
+/**
+ * Method to set the title of the post
+ * @param aTitle The post's new title
+ */
+void SmfPost::setTitle( const QString &aTitle )
+	{
+	d->m_title = aTitle;
+	}
+
+/**
+ * Method to set the description of the post
+ * @param aDesc The post's new description
+ */
+void SmfPost::setDescription( const QString &aDesc )
+	{
+	d->m_desc = aDesc;
+	}
+
+/**
+ * Method to set the image of the post
+ * @param aPic The post's image
+ */
+void SmfPost::setImage( const QImage& aPic )
+	{
+	d->m_image = aPic;
+	}
+
+/**
+ * Method to set the url of the post
+ * @param aUrl The post's url
+ */
+void SmfPost::setUrl( QUrl& aUrl )
+	{
+	d->m_url = aUrl;
+	}
+
+
+
+/**
+ * Method for Externalization. Writes the SmfPost object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPost The SmfPost object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPost &aPost )
+	{
+	aDataStream<<aPost.title();
+	aDataStream<<aPost.description();
+	aDataStream<<aPost.image();
+	aDataStream<<aPost.url();
+	aDataStream<<aPost.id();
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfPost object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPost The SmfPost object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPost &aPost)
+	{
+	QString title;
+	aDataStream>>title;
+	aPost.setTitle(title);
+	
+	QString desc;
+	aDataStream>>desc;
+	aPost.setDescription(desc);
+
+	QImage img;
+	aDataStream>>img;
+	aPost.setImage(img);
+
+	QUrl url;
+	aDataStream>>url;
+	aPost.setUrl(url);
+
+	QString id;
+	aDataStream>>id;
+	aPost.setId(id);
+
+	return aDataStream;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpost.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,183 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The post class represents an instance of a post to a SN site
+ *
+ */
+
+#ifndef SMFPOST_H_
+#define SMFPOST_H_
+
+#include <QImage>
+#include <QUrl>
+#include <qdatastream.h>
+#include <QMetaType>
+#include <QSharedData>
+#include <QTextDocument>
+#include <smfclientglobal.h>
+
+#include "smfpost_p.h"
+
+/**
+ *  Presence info of the user
+ */
+enum SmfAppearenceInfo
+	{
+	EAppearanceNotSupported,
+	EOnline,
+	EOffline,
+	EBusy,
+	EDoNotDisturb,
+	EAppearOffline,
+	EOther
+	};
+//To sort out conflict betwn client and PM, later should be removed
+typedef SmfAppearenceInfo SmfPresenceInfo;
+/**
+ * @ingroup smf_common_group
+ * The post class represents an instance of a post to a SN site
+ */
+class SMFCLIENT_EXPORT SmfPost //: public QTextDocument
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 * @param text Text
+	 */
+	SmfPost( );
+	
+	/**
+	 * Constructor
+	 * @param aText The post's text
+	 * @param aImage The post's image
+	 * @param aUrl The post's url
+	 */
+	SmfPost( QString aTitle, QString aDesc, QImage aImage, QUrl aUrl );
+
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPost( const SmfPost &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 * @return The target reference value
+	 */
+	SmfPost& operator=( const SmfPost &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPost( );
+	
+	/**
+	 * Method to get the title of the post
+	 * @return The post's title
+	 */
+	QString title( ) const;
+	
+	/**
+	 * Method to get the description of the post
+	 * @return The post's description
+	 */
+	QString description( ) const;
+	
+	/**
+	 * Method to get the image of the post
+	 * @return The post's image
+	 */
+	QImage image( ) const;
+	
+	/**
+	 * Method to get the url of the post
+	 * @return The post's url
+	 */
+	QUrl url( ) const;
+	
+	/**
+	 * Method to get the id of the post
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the title of the post
+	 * @param aTitle The post's new title
+	 */
+	void setTitle( const QString &aTitle );
+	
+	/**
+	 * Method to set the description of the post
+	 * @param aDesc The post's new description
+	 */
+	void setDescription( const QString &aDesc );
+	
+	/**
+	 * Method to set the image of the post
+	 * @param aPic The post's image
+	 */
+	void setImage( const QImage& aPic );
+	
+	/**
+	 * Method to set the url of the post
+	 * @param aUrl The post's url
+	 */
+	void setUrl( QUrl& aUrl );
+	/**
+	 * Method to get the id of the post
+	 */
+	void setId(QString aPostId);
+	
+private:
+	QSharedDataPointer<SmfPostPrivate> d;
+
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfPost &aPost );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfPost &aPost );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfPost object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aPost The SmfPost object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfPost &aPost );
+
+/**
+ * Method for Internalization. Reads a SmfPost object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aPost The SmfPost object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfPost &aPost);
+
+typedef QList<SmfPost> SmfPostList;
+
+// Make the class SmfPost known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfPost)
+Q_DECLARE_METATYPE(QList<SmfPost>)
+
+#endif /* SMFPOST_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfpost_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,72 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfPost class
+ *
+ */
+
+#ifndef SMFPOST_P_H_
+#define SMFPOST_P_H_
+
+#include <QSharedData>
+
+class SmfPostPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfPostPrivate( ) { m_title.clear(); m_desc.clear(); m_url.clear(); m_postId.clear(); }
+	
+	/**
+	 * Constructor
+	 */
+	SmfPostPrivate( QString aTitle, QString aDesc, QImage aImage, QUrl aUrl ) 
+		{
+		m_title = aTitle; 
+		m_desc = aDesc;
+		m_image = aImage;
+		m_url = aUrl;
+		m_postId.clear();
+		}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfPostPrivate( const SmfPostPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_title ( aOther.m_title ), 
+		m_desc ( aOther.m_desc ),
+		m_image ( aOther.m_image ),
+		m_url ( aOther.m_url ),
+		m_postId ( aOther.m_postId )	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPostPrivate( )
+		{
+		}
+  
+	QString m_title;	// title
+	QString m_desc;		// description
+	QImage m_image;		// image
+	QUrl m_url;			// url
+	QString m_postId;	// post's unique Id
+	
+};
+
+#endif /* SMFPOST_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfprovider.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,162 @@
+/*
+ * smfprovider.cpp
+ *
+ *  Created on: Apr 15, 2010
+ *      Author: manasij
+ */
+#include "smfprovider.h"
+
+  SmfProvider::SmfProvider(QObject* parent)//:QObject(parent)
+	  {
+	  
+	  }
+  SmfProvider::~SmfProvider()
+	  {
+	  
+	  }
+
+  /**
+   * Localizable name of the service 
+   * @return service name
+   */
+  QString SmfProvider::serviceName() const
+  {
+	  return m_serviceName;
+  }
+  
+  /**
+   * Logo of the service
+   * @return logo image of the service
+   */
+  QImage SmfProvider::serviceIcon() const
+		  {
+			  return m_serviceIcon;
+		  }
+  
+  /**
+   * Readable service description
+   * @return service description
+   */
+  QString SmfProvider::description() const
+		  {
+	  return m_description;
+		  }
+  
+  /*
+   * Website of the service
+   */
+  QUrl SmfProvider::serviceUrl() const
+		  {
+	  return m_serviceUrl;
+		  }
+  
+  /**
+   * URL of the application providing this service
+   */
+  QUrl SmfProvider::applicationUrl() const  //
+		  {
+	  return m_appUrl;
+		  }
+  
+  /**
+   * service types - list of interfaces that this provider support
+   */
+  QList<QString> SmfProvider::serviceTypes() const
+		  {
+	  return m_serviceTypes;
+		  }
+  
+  /////////////////////////////////////////set APIs
+  /**
+   * Localizable name of the service 
+   * 
+   */
+  void SmfProvider::serviceName(QString& name)
+	  {
+	  m_serviceName = name;
+	  }
+  
+  /**
+   * Logo of the service
+   * 
+   */
+  void SmfProvider::serviceIcon(QImage& image)
+	  {
+	  m_serviceIcon = image;
+	  }
+  
+  /**
+   * Readable service description
+   * 
+   */
+  void SmfProvider::description(QString& desc)
+	  {
+	  m_description = desc;
+	  }
+  
+  /*
+   * Website of the service
+   */
+  void SmfProvider::serviceUrl(QUrl& url)
+	  {
+	  m_serviceUrl = url;
+	  }
+  
+  /**
+   * URL of the application providing this service
+   */
+  void SmfProvider::applicationUrl(QUrl& url)
+	  {
+	  m_appUrl = url;
+	  }
+  
+  /**
+   * service types - list of interfaces that this provider support
+   */
+ void SmfProvider::serviceTypes( QStringList& types)
+	 {
+	 m_serviceTypes = types;
+	 }
+ /**
+  * Externalization
+  */
+ QDataStream &operator<<(QDataStream& out, const SmfProvider& base)
+ 	{
+// 	base.writeLog("operator<<");
+// 	base.writeLog("base info:-");
+// 	base.writeLog(base.m_serviceName);
+ //	base.writeLog(base.m_serviceIcon);
+// 	base.writeLog(base.m_description);
+// 	base.writeLog(base.m_serviceUrl);
+// 	base.writeLog(base.m_appUrl);
+// 	
+ 	
+ 	out<<base.m_serviceName;
+ 	out<<base.m_serviceIcon;
+ 	out<<base.m_description;
+ 	out<<base.m_serviceUrl;
+ 	out<<base.m_appUrl;
+ 	return out; 
+ 	}
+
+ /**
+  * Internalization
+  */
+ QDataStream &operator>>(QDataStream& in, SmfProvider& base)
+ 	{
+// 	base.writeLog("operator>>");
+
+ 	
+ 	in>>base.m_serviceName;
+ 	in>>base.m_serviceIcon;
+ 	in>>base.m_description;
+ 	in>>base.m_serviceUrl;
+ 	in>>base.m_appUrl;
+// 	base.writeLog("After writing,base info:-");
+// 	base.writeLog(base.m_serviceName);
+// //	base.writeLog(base.m_serviceIcon);
+// 	base.writeLog(base.m_description);
+// 	base.writeLog(base.m_serviceUrl);
+// 	base.writeLog(base.m_appUrl);
+ 	return in; 
+ 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfprovider.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,146 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfEvent class represents an event
+ *
+ */
+
+#ifndef SMFPROVIDER_H
+#define SMFPROVIDER_H
+
+#include <QObject>
+#include <QImage>
+#include <QUrl>
+#include <QStringList>
+#include <QMetaType>
+
+#include "SmfClientGlobal.h"
+/**
+ * @ingroup smf_client_group 
+ * Interface for a base service provider. Other service provider classes contains 
+ * implementation of this base class so that each has access to service provider 
+ * information.
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in object.
+ */
+//TODO:- put SMFCLIENT_EXPORT
+//TODO:- QList<SmfProvider> gives error if its derived from QObject
+class SMFCLIENT_EXPORT SmfProvider //: public QObject
+{
+  //Q_OBJECT
+
+public:
+  /**
+   *  Seeing as this is a plug-in implementation, these will realistically be generated by SMF factory of some kind
+   */
+   
+  SmfProvider(QObject* parent = 0);
+  ~SmfProvider();
+
+public:
+  /**
+   * Localizable name of the service 
+   * @return service name
+   */
+  QString serviceName() const; 
+  
+  /**
+   * Logo of the service
+   * @return logo image of the service
+   */
+  QImage serviceIcon() const; 
+  
+  /**
+   * Readable service description
+   * @return service description
+   */
+  QString description() const; 
+  
+  /*
+   * Website of the service
+   */
+  QUrl serviceUrl() const;
+  
+  /**
+   * URL of the application providing this service
+   */
+  QUrl applicationUrl() const; //
+  
+  /**
+   * service types - list of interfaces that this provider support
+   */
+  QList<QString> serviceTypes() const;
+  
+  /////////////////////////////////////////set APIs
+  /**
+   * Localizable name of the service 
+   * 
+   */
+  void serviceName(QString& name); 
+  
+  /**
+   * Logo of the service
+   * 
+   */
+  void serviceIcon(QImage& image) ; 
+  
+  /**
+   * Readable service description
+   * 
+   */
+  void description(QString& desc) ; 
+  
+  /*
+   * Website of the service
+   */
+  void serviceUrl(QUrl& url) ;
+  
+  /**
+   * URL of the application providing this service
+   */
+  void applicationUrl(QUrl& url) ; 
+  
+  /**
+   * service types - list of interfaces that this provider support
+   */
+ void serviceTypes( QStringList& types);
+ //TODO:- making data mems public just for testing, later provide set apis
+//private:
+public:
+  QString m_serviceName;
+  QImage m_serviceIcon;
+  QString m_description;
+  QUrl m_serviceUrl;
+  QUrl m_appUrl;
+  QStringList m_serviceTypes;
+  friend QDataStream &operator<<(QDataStream &, const SmfProvider&);
+  friend QDataStream &operator>>(QDataStream &, SmfProvider&);
+};
+/**
+* Externalization
+*/
+SMFCLIENT_EXPORT QDataStream &operator<<(QDataStream &, const SmfProvider&);
+/**
+ * Internalization
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>(QDataStream &, SmfProvider&);
+
+typedef QList<SmfProvider> SmfProviderList;
+
+// Make the class SmfProvider known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfProvider)
+Q_DECLARE_METATYPE(QList<SmfProvider>)
+
+#endif // SMFPROVIDER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfsubtitle.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,233 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The subtitle class represents information about a track's subtitle
+ *
+ */
+
+#include <smfsubtitle.h>
+#include <smfsubtitle_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfSubtitle::SmfSubtitle( )
+	{
+	d = new SmfSubtitlePrivate;
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfSubtitle::SmfSubtitle( const SmfSubtitle &aOther )
+	:d(aOther.d)
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfSubtitle& SmfSubtitle::operator=( const SmfSubtitle &aOther )
+	{
+	d->m_subtitle = aOther.d->m_subtitle;
+	d->m_language = aOther.d->m_language;
+	d->m_frameRate = aOther.d->m_frameRate;
+	d->m_duration = aOther.d->m_duration;
+	d->m_releaseYr = aOther.d->m_releaseYr;
+	d->m_subtitleId = aOther.d->m_subtitleId;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfSubtitle::~SmfSubtitle( )
+	{
+	}
+
+/**
+ * Method to get the subtitle as a bytearray
+ * @return The subtitle content
+ */
+QByteArray SmfSubtitle::subtitle( ) const
+	{
+	return d->m_subtitle;
+	}
+
+/**
+ * Method to get the language
+ * @return The language
+ */
+QString SmfSubtitle::language( ) const
+	{
+	return d->m_language;
+	}
+
+/**
+ * Method to get the frame rate
+ * @return the frame rate
+ */
+double SmfSubtitle::frameRate( ) const
+	{
+	return d->m_frameRate;
+	}
+
+/**
+ * Method to get the duration
+ * @return the duration
+ */
+double SmfSubtitle::duration( ) const
+	{
+	return d->m_duration;
+	}
+
+/**
+ * Method to get the release year
+ * @return The release year
+ */
+QDateTime SmfSubtitle::releaseYear( ) const
+	{
+	return d->m_releaseYr;
+	}
+
+/**
+ * Method to get the id of the subtitle
+ * @return The ID value 
+ */
+QString SmfSubtitle::id( ) const
+	{
+	return d->m_subtitleId;
+	}
+
+/**
+ * Method to set the subtitle as a bytearray
+ * @param aSubtitle The subtitle content
+ */
+void SmfSubtitle::setSubtitle( const QByteArray &aSubtitle )
+	{
+	d->m_subtitle = aSubtitle;
+	}
+
+/**
+ * Method to set the language
+ * @param aLang The language
+ */
+void SmfSubtitle::setLanguage( const QString &aLang )
+	{
+	d->m_language = aLang;
+	}
+
+/**
+ * Method to set the frame rate
+ * @param aFramerate the frame rate
+ */
+void SmfSubtitle::setFrameRate( const double &aFramerate )
+	{
+	d->m_frameRate = aFramerate;
+	}
+
+/**
+ * Method to set the duration
+ * @param aDuration the duration
+ */
+void SmfSubtitle::setDuration( const double &aDuration )
+	{
+	d->m_duration = aDuration;
+	}
+
+/**
+ * Method to set the release year
+ * @param aRelYear The release year
+ */
+void SmfSubtitle::setReleaseYear( const QDateTime &aRelYear )
+	{
+	d->m_releaseYr = aRelYear;
+	}
+
+/**
+ * Method to set the id of the subtitle
+ * @param aId The ID value 
+ */
+void SmfSubtitle::setId( const QString &aId )
+	{
+	d->m_subtitleId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfSubtitle object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aSubtitle The SmfSubtitle object to be externalized
+ * @return reference to the written stream
+ */
+ QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfSubtitle &aSubtitle )
+	{
+	// Serialize m_subtitle
+	aDataStream<<aSubtitle.d->m_subtitle;
+	
+	// Serialize m_language
+	aDataStream<<aSubtitle.d->m_language;
+	
+	// Serialize m_frameRate
+	aDataStream<<aSubtitle.d->m_frameRate;
+	
+	// Serialize m_duration
+	aDataStream<<aSubtitle.d->m_duration;
+	
+	// Serialize m_releaseYr
+	aDataStream<<aSubtitle.d->m_releaseYr;
+	
+	// Serialize m_subtitleId
+	aDataStream<<aSubtitle.d->m_subtitleId;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfSubtitle object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aSubtitle The SmfSubtitle object to be internalized
+ * @return reference to the stream
+ */
+QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfSubtitle &aSubtitle)
+	{
+	// Deserialize m_subtitle
+	aDataStream>>aSubtitle.d->m_subtitle;
+	
+	// Deserialize m_language
+	aDataStream>>aSubtitle.d->m_language;
+	
+	// Deserialize m_frameRate
+	aDataStream>>aSubtitle.d->m_frameRate;
+	
+	// Deserialize m_duration
+	aDataStream>>aSubtitle.d->m_duration;
+	
+	// Deserialize m_releaseYr
+	aDataStream>>aSubtitle.d->m_releaseYr;
+	
+	// Deserialize m_subtitleId
+	aDataStream>>aSubtitle.d->m_subtitleId;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfsubtitle.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,181 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The subtitle class represents information about a track's subtitle
+ *
+ */
+
+#ifndef SMFSUBTITLE_H_
+#define SMFSUBTITLE_H_
+
+#include <qdatastream.h>
+#include <QDateTime>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+enum SmfSubtitleSearchFilter
+	{
+	SubtitleLanguage = 0,
+	SubtitleFrameRate,		// value = 1
+	SubtitleDuration,		// value = 2
+	SubtitleReleaseYear,	// value = 3
+	SubtitleAll = SubtitleLanguage | SubtitleFrameRate | 
+			SubtitleDuration | SubtitleReleaseYear
+	};
+
+class SmfSubtitlePrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The subtitle class represents information about a track's subtitle
+ */
+class SMFCLIENT_EXPORT SmfSubtitle
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfSubtitle( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfSubtitle( const SmfSubtitle &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 */
+	SmfSubtitle& operator=( const SmfSubtitle &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfSubtitle( );
+	
+	/**
+	 * Method to get the subtitle as a bytearray
+	 * @return The subtitle content
+	 */
+	QByteArray subtitle( ) const;
+	
+	/**
+	 * Method to get the language
+	 * @return The language
+	 */
+	QString language( ) const;
+	
+	/**
+	 * Method to get the frame rate
+	 * @return the frame rate
+	 */
+	double frameRate( ) const;
+	
+	/**
+	 * Method to get the duration
+	 * @return the duration
+	 */
+	double duration( ) const;
+	
+	/**
+	 * Method to get the release year
+	 * @return The release year
+	 */
+	QDateTime releaseYear( ) const;
+	
+	/**
+	 * Method to get the id of the subtitle
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the subtitle as a bytearray
+	 * @param aSubtitle The subtitle content
+	 */
+	void setSubtitle( const QByteArray &aSubtitle );
+	
+	/**
+	 * Method to set the language
+	 * @param aLang The language
+	 */
+	void setLanguage( const QString &aLang );
+	
+	/**
+	 * Method to set the frame rate
+	 * @param aFramerate the frame rate
+	 */
+	void setFrameRate( const double &aFramerate );
+	
+	/**
+	 * Method to set the duration
+	 * @param aDuration the duration
+	 */
+	void setDuration( const double &aDuration );
+	
+	/**
+	 * Method to set the release year
+	 * @param aRelYear The release year
+	 */
+	void setReleaseYear( const QDateTime &aRelYear );
+	
+	/**
+	 * Method to set the id of the subtitle
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId );
+	
+private:
+	QSharedDataPointer<SmfSubtitlePrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfSubtitle &aSubtitle );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfSubtitle &aSubtitle );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfSubtitle object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aSubtitle The SmfSubtitle object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT  QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfSubtitle &aSubtitle );
+
+/**
+ * Method for Internalization. Reads a SmfSubtitle object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aSubtitle The SmfSubtitle object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfSubtitle &aSubtitle);
+
+
+typedef QList<SmfSubtitle> SmfSubtitleList;
+
+// Make the class SmfSubtitle known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfSubtitle)
+Q_DECLARE_METATYPE(QList<SmfSubtitle>)
+
+#endif /* SMFSUBTITLE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smfsubtitle_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,68 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfSubtitle class
+ *
+ */
+
+#ifndef SMFSUBTITLE_P_H_
+#define SMFSUBTITLE_P_H_
+
+#include <QDateTime>
+#include <QSharedData>
+
+class SmfSubtitlePrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfSubtitlePrivate( ) { 
+		m_language.clear();
+		m_frameRate = 0;
+		m_duration = 0;
+		m_subtitleId.clear();
+	}
+	
+	/**
+	 * Copy Consturctor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfSubtitlePrivate( const SmfSubtitlePrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_subtitle ( aOther.m_subtitle ), 
+		m_language ( aOther.m_language ),
+		m_frameRate ( aOther.m_frameRate ),
+		m_duration ( aOther.m_duration ),
+		m_releaseYr ( aOther.m_releaseYr ),
+		m_subtitleId ( aOther.m_subtitleId ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfSubtitlePrivate( )
+		{
+		}
+  
+	QByteArray m_subtitle;	// subtitle data
+	QString m_language;		// language
+	double m_frameRate;		// frame rate
+	double m_duration;		// duration
+	QDateTime m_releaseYr;	// release year
+	QString m_subtitleId;	// subtitle id
+	
+};
+
+#endif /* SMFSUBTITLE_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smftrackinfo.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,333 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The track info class represents information about a music track
+ *
+ */
+
+#include <smftrackinfo.h>
+#include <smftrackinfo_p.h>
+
+/**
+ * Constructor with default argument
+ */
+SmfTrackInfo::SmfTrackInfo( )
+	{
+	d = new SmfTrackInfoPrivate( );
+	}
+
+/**
+ * Copy Constructor
+ * @param aOther The reference object
+ */
+SmfTrackInfo::SmfTrackInfo( const SmfTrackInfo &aOther )
+	: d( aOther.d )
+	{
+	}
+
+/**
+ * Overloaded = operator
+ * @param aOther The reference object
+ * @return The target reference value
+ */
+SmfTrackInfo& SmfTrackInfo::operator=( const SmfTrackInfo &aOther )
+	{
+	d->m_trackId = aOther.d->m_trackId;
+	d->m_title = aOther.d->m_title;
+	d->m_album = aOther.d->m_album;
+	d->m_artists = aOther.d->m_artists;
+	d->m_genre = aOther.d->m_genre;
+	d->m_tags = aOther.d->m_tags;
+	d->m_year = aOther.d->m_year;
+	d->m_rating = aOther.d->m_rating;
+	d->m_comments = aOther.d->m_comments;
+	d->m_duration = aOther.d->m_duration;
+	return *this;
+	}
+
+/**
+ * Destructor
+ */
+SmfTrackInfo::~SmfTrackInfo( )
+	{
+	}
+
+/**
+ * Method to get the track title
+ * @return The title of the track
+ */
+QString SmfTrackInfo::title( ) const
+	{
+	return d->m_title;
+	}
+
+/**
+ * Method to get the track album
+ * @return The album of the track
+ */
+SmfAlbum SmfTrackInfo::album( ) const
+	{
+	return d->m_album;
+	}
+
+/**
+ * Method to get the track's artists
+ * @return The artists of the track
+ */
+SmfArtists SmfTrackInfo::artists( ) const
+	{
+	return d->m_artists;
+	}		
+
+/**
+ * Method to get the genre of the track
+ * @return The genre of the track
+ */
+QString SmfTrackInfo::genre( ) const
+	{
+	return d->m_genre;
+	}
+
+/**
+ * Method to get the track's tag
+ * @return The tag of the track
+ */
+QStringList SmfTrackInfo::tags( ) const
+	{
+	return d->m_tags;
+	}
+
+/**
+ * Method to get the release year of the track
+ * @return The release year of the track
+ */
+QDateTime SmfTrackInfo::year( ) const
+	{
+	return d->m_year;
+	}
+
+/**
+ * Method to get the track's rating
+ * @return The rating of the track
+ */
+SmfMusicRating SmfTrackInfo::rating( ) const
+	{
+	return d->m_rating;
+	}
+
+/**
+ * Method to get the comments on the track
+ * @return The comments on the track
+ */
+QList<SmfComment> SmfTrackInfo::comments( ) const
+	{
+	return d->m_comments;
+	}
+
+/**
+ * Method to get the track's duration
+ * @return The duration of the track
+ */
+QTime SmfTrackInfo::duration( ) const
+	{
+	return d->m_duration;
+	}
+
+/**
+ * Method to get the id of the track
+ * @return The ID value 
+ */
+QString SmfTrackInfo::id( ) const
+	{
+	return d->m_trackId;
+	}
+
+/**
+ * Method to set the track title
+ * @param aTitle The new title of the track
+ */
+void SmfTrackInfo::setTitle( const QString &aTitle )
+	{
+	d->m_title = aTitle;
+	}
+
+/**
+ * Method to set the track album
+ * @param aAlbum The new album of the track
+ */
+void SmfTrackInfo::setAlbum( const SmfAlbum &aAlbum )
+	{
+	d->m_album = aAlbum;
+	}
+
+/**
+ * Method to set the track's artists
+ * @param aArtists The new artists of the track
+ */
+void SmfTrackInfo::setArtists( const SmfArtists &aArtists )
+	{
+	d->m_artists = aArtists;
+	}
+
+/**
+ * Method to set the genre of the track
+ * @param aGenre The new genre of the track
+ */
+void SmfTrackInfo::setGenre( const QString &aGenre )
+	{
+	d->m_genre = aGenre;
+	}
+
+/**
+ * Method to set the track's tag
+ * @param aTag The tag of the track
+ */
+void SmfTrackInfo::setTags( const QStringList &aTags )
+	{
+	d->m_tags = aTags;
+	}
+
+/**
+ * Method to set the release year of the track
+ * @param aYear The new release year of the track
+ */
+void SmfTrackInfo::setYear( const QDateTime &aYear )
+	{
+	d->m_year = aYear;
+	}
+
+/**
+ * Method to set the track's rating
+ * @param aRating The new rating of the track
+ */
+void SmfTrackInfo::setRating( const SmfMusicRating &aRating )
+	{
+	d->m_rating = aRating;
+	}
+
+/**
+ * Method to set the comments on the track
+ * @param aComment The new comment of the track
+ */
+void SmfTrackInfo::setComment( const QList<SmfComment> &aComments )
+	{
+	d->m_comments = aComments;
+	}
+
+/**
+ * Method to set the duration of the track
+ * @param aDuration The new duration of the track
+ */
+void SmfTrackInfo::setDuration( const QTime &aDuration )
+	{
+	d->m_duration = aDuration;
+	}
+
+/**
+ * Method to set the id of the track
+ * @param aId The ID value 
+ */
+void SmfTrackInfo::setId( const QString &aId )
+	{
+	d->m_trackId = aId;
+	}
+
+
+/**
+ * Method for Externalization. Writes the SmfTrackInfo object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aTrackInfo The SmfTrackInfo object to be externalized
+ * @return reference to the written stream
+ */
+QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfTrackInfo &aTrackInfo )
+	{
+	// Serialize d->m_trackId
+	aDataStream<<aTrackInfo.d->m_trackId;
+	
+	// Serialize d->m_title
+	aDataStream<<aTrackInfo.d->m_title;
+	
+	// Serialize d->m_album
+	aDataStream<<aTrackInfo.d->m_album;
+	
+	// Serialize d->m_artists
+	aDataStream<<aTrackInfo.d->m_artists;
+	
+	// Serialize d->m_genre
+	aDataStream<<aTrackInfo.d->m_genre;
+	
+	// Serialize d->m_tags
+	aDataStream<<aTrackInfo.d->m_tags;
+	
+	// Serialize d->m_year
+	aDataStream<<aTrackInfo.d->m_year;
+	
+	// Serialize d->m_rating
+	aDataStream<<aTrackInfo.d->m_rating;
+	
+	// Serialize d->m_comments
+	aDataStream<<aTrackInfo.d->m_comments;
+	
+	// Serialize d->m_duration
+	aDataStream<<aTrackInfo.d->m_duration;
+	
+	return aDataStream;
+	}
+
+/**
+ * Method for Internalization. Reads a SmfTrackInfo object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aTrackInfo The SmfTrackInfo object to be internalized
+ * @return reference to the stream
+ */
+ QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfTrackInfo &aTrackInfo)
+	{
+	// Deserialize d->m_trackId
+	aDataStream>>aTrackInfo.d->m_trackId;
+	
+	// Deserialize d->m_title
+	aDataStream>>aTrackInfo.d->m_title;
+	
+	// Deserialize d->m_album
+	aDataStream>>aTrackInfo.d->m_album;
+	
+	// Deserialize d->m_artists
+	aDataStream>>aTrackInfo.d->m_artists;
+	
+	// Deserialize d->m_genre
+	aDataStream>>aTrackInfo.d->m_genre;
+	
+	// Deserialize d->m_tags
+	aDataStream>>aTrackInfo.d->m_tags;
+	
+	// Deserialize d->m_year
+	aDataStream>>aTrackInfo.d->m_year;
+	
+	// Deserialize d->m_rating
+	aDataStream>>aTrackInfo.d->m_rating;
+	
+	// Deserialize d->m_comments
+	aDataStream>>aTrackInfo.d->m_comments;
+	
+	// Deserialize d->m_duration
+	aDataStream>>aTrackInfo.d->m_duration;
+	
+	return aDataStream;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smftrackinfo.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The track info class represents information about a music track
+ *
+ */
+
+#ifndef SMFTRACKINFO_H_
+#define SMFTRACKINFO_H_
+
+#include <QTime>
+#include <qdatastream.h>
+#include <smfmusicrating.h>
+#include <smfartists.h>
+#include "smfalbum.h"
+#include <smfcomment.h>
+#include <QStringList>
+#include <QSharedData>
+#include <smfclientglobal.h>
+#include <QMetaType>
+
+class SmfTrackInfoPrivate;
+
+/**
+ * @ingroup smf_common_group
+ * The track info class represents information about a music track
+ */
+class SMFCLIENT_EXPORT SmfTrackInfo
+	{
+public:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfTrackInfo( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfTrackInfo( const SmfTrackInfo &aOther );
+	
+	/**
+	 * Overloaded = operator
+	 * @param aOther The reference object
+	 */
+	SmfTrackInfo& operator=( const SmfTrackInfo &aOther );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfTrackInfo( );
+	
+	/**
+	 * Method to get the track title
+	 * @return The title of the track
+	 */
+	QString title( ) const;
+	
+	/**
+	 * Method to get the track album
+	 * @return The album of the track
+	 */
+	SmfAlbum album( ) const;
+	
+	/**
+	 * Method to get the track's artists
+	 * @return The artists of the track
+	 */
+	SmfArtists artists( ) const;
+	
+	/**
+	 * Method to get the genre of the track
+	 * @return The genre of the track
+	 */
+	QString genre( ) const;
+	
+	/**
+	 * Method to get the track's tag
+	 * @return The tag of the track
+	 */
+	QStringList tags( ) const;
+	
+	/**
+	 * Method to get the release year of the track
+	 * @return The release year of the track
+	 */
+	QDateTime year( ) const;
+	
+	/**
+	 * Method to get the track's rating
+	 * @return The rating of the track
+	 */
+	SmfMusicRating rating( ) const;
+	
+	/**
+	 * Method to get the comments on the track
+	 * @return The comments on the track
+	 */
+	QList<SmfComment> comments( ) const;
+	
+	/**
+	 * Method to get the track's duration
+	 * @return The duration of the track
+	 */
+	QTime duration( ) const;
+	
+	/**
+	 * Method to get the id of the track
+	 * @return The ID value 
+	 */
+	QString id( ) const;
+	
+	/**
+	 * Method to set the track title
+	 * @param aTitle The new title of the track
+	 */
+	void setTitle( const QString &aTitle );
+	
+	/**
+	 * Method to set the track album
+	 * @param aAlbum The new album of the track
+	 */
+	void setAlbum( const SmfAlbum &aAlbum );
+	
+	/**
+	 * Method to set the track's artists
+	 * @param aArtists The new artists of the track
+	 */
+	void setArtists( const SmfArtists &aArtists );
+	
+	/**
+	 * Method to set the genre of the track
+	 * @param aGenre The new genre of the track
+	 */
+	void setGenre( const QString &aGenre );
+	
+	/**
+	 * Method to set the track's tag
+	 * @param aTag The tag of the track
+	 */
+	void setTags( const QStringList &aTags );
+	
+	/**
+	 * Method to set the release year of the track
+	 * @param aYear The new release year of the track
+	 */
+	void setYear( const QDateTime &aYear );
+	
+	/**
+	 * Method to set the track's rating
+	 * @param aRating The new rating of the track
+	 */
+	void setRating( const SmfMusicRating &aRating );
+	
+	/**
+	 * Method to set the comments on the track
+	 * @param aComment The new comment of the track
+	 */
+	void setComment( const QList<SmfComment> &aComments );
+	
+	/**
+	 * Method to set the duration of the track
+	 * @param aDuration The new duration of the track
+	 */
+	void setDuration( const QTime &aDuration );
+	
+	/**
+	 * Method to set the id of the track
+	 * @param aId The ID value 
+	 */
+	void setId( const QString &aId );
+
+private:
+	QSharedDataPointer<SmfTrackInfoPrivate> d;
+	
+	friend QDataStream &operator<<( QDataStream &aDataStream, 
+			const SmfTrackInfo &aTrackInfo );
+
+	friend QDataStream &operator>>( QDataStream &aDataStream, 
+			SmfTrackInfo &aTrackInfo );
+	
+	};
+
+
+/**
+ * Method for Externalization. Writes the SmfTrackInfo object to 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be written
+ * @param aTrackInfo The SmfTrackInfo object to be externalized
+ * @return reference to the written stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator<<( QDataStream &aDataStream, 
+		const SmfTrackInfo &aTrackInfo );
+
+/**
+ * Method for Internalization. Reads a SmfTrackInfo object from 
+ * the stream and returns a reference to the stream.
+ * @param aDataStream Stream to be read
+ * @param aTrackInfo The SmfTrackInfo object to be internalized
+ * @return reference to the stream
+ */
+SMFCLIENT_EXPORT QDataStream &operator>>( QDataStream &aDataStream, 
+		SmfTrackInfo &aTrackInfo);
+
+
+typedef QList<SmfTrackInfo> SmfTrackInfoList;
+
+// Make the class SmfTrackInfo known to QMetaType, so that as to register it.
+Q_DECLARE_METATYPE(SmfTrackInfo)
+Q_DECLARE_METATYPE(QList<SmfTrackInfo>)
+
+#endif /* SMFTRACKINFO_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/common/smftrackinfo_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,81 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Private class implemented for implicit sharing of SmfTrackInfo class
+ *
+ */
+
+#ifndef SMFTRACKINFO_P_H_
+#define SMFTRACKINFO_P_H_
+
+#include <QTime>
+#include <smfmusicrating.h>
+#include <smfcomment.h>
+#include <QStringList>
+#include <QSharedData>
+
+class SmfTrackInfoPrivate : public QSharedData
+{
+public:
+	/**
+	 * Constructor
+	 */
+	SmfTrackInfoPrivate( ) : m_rating( ) 
+		{ 
+		m_trackId.clear();
+		m_title.clear();
+		m_genre.clear();
+		m_tags.clear();
+		m_comments.clear();
+	}
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object to be copy constructed
+	 */
+	SmfTrackInfoPrivate( const SmfTrackInfoPrivate &aOther ) : 
+		QSharedData ( aOther ), 
+		m_trackId ( aOther.m_trackId ),
+		m_title ( aOther.m_title ),
+		m_album ( aOther.m_album ),
+		m_artists ( aOther.m_artists ),
+		m_genre ( aOther.m_genre ),
+		m_tags ( aOther.m_tags ),
+		m_year ( aOther.m_year ),
+		m_rating ( aOther.m_rating ),
+		m_comments ( aOther.m_comments ),
+		m_duration ( aOther.m_duration ) 	{ }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfTrackInfoPrivate( )
+		{
+		}
+  
+	QString m_trackId;		// track id
+	QString m_title;		// title
+	SmfAlbum m_album;		// album 
+	SmfArtists m_artists;	// artist name
+	QString m_genre;		// genre information
+	QStringList m_tags;		// tag information
+	QDateTime m_year;		// release year
+	SmfMusicRating m_rating;// rating
+	QList<SmfComment> m_comments;	// comments
+	QTime m_duration;		// duration
+	
+};
+
+#endif /* SMFTRACKINFO_P_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/main.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * */
+
+#include <QtCore>
+#include <QCoreApplication>
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication a(argc, argv);
+	
+    return a.exec();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/smfclient.pkg	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,31 @@
+; SmfClientIntf_template.pkg generated by qmake at 2010-04-21T19:01:17
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"smfclient"},(0xE3E6303C),1,0,0
+
+; Localised Vendor name
+%{"Vendor"}
+
+; Unique Vendor name
+:"Vendor"
+
+; Manual PKG pre-rules from PRO files
+; Default HW/platform dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+ 
+; Default dependency to Qt libraries
+(0x2001E61C), 4, 6, 1, {"Qt"}
+
+; Executable and default resource files
+; DEPLOYMENT, shoudn't be hard coded
+"E:/Symbian/S60_5th_Edition_SDK_v1.0_2/epoc32/release/$(PLATFORM)/$(TARGET)/smfclient.dll"    - "!:\sys\bin\smfclient.dll"
+
+; Manual PKG post-rules from PRO files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfclient/smfclient.pro	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,33 @@
+TEMPLATE = lib
+TARGET = smfclient
+QT += core \
+    gui \
+    network
+CONFIG += mobility
+MOBILITY = contacts \
+    location
+DEFINES += WRITE_LOG \
+    SMFCLIENT_LIB_EXPORT #\
+#    OLDER_QT_MOBILITY
+include(client/client.pri)
+include(common/common.pri)
+PUBLIC_HEADERS += 
+
+# Private Headers
+PRIVATE_HEADERS += 
+HEADERS += $$PUBLIC_HEADERS \
+    $$PRIVATE_HEADERS
+SOURCES += main.cpp \
+    smfclient_reg.rss
+FORMS += 
+RESOURCES += 
+symbian: { 
+    TARGET.UID3 = 0xE08059D4
+    TARGET.CAPABILITY = ReadUserData \
+        WriteUserData \
+        LocalServices \
+        NetworkServices \
+        UserEnvironment
+    TARGET.EPOCALLOWDLLDATA = 1
+    LIBS += -lqjson.dll
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/ABLD.BAT	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/Makefile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,260 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.1) on: Tue May 18 15:52:55 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+#  Name        : Makefile
+#  Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE          = Makefile
+QMAKE             = d:\Qt\4.6.1\bin\qmake
+DEL_FILE          = del
+DEL_DIR           = rmdir
+MOVE              = move
+XCOPY             = xcopy /d /f /h /r /y /i
+ABLD              = ABLD.BAT
+DEBUG_PLATFORMS   = winscw gcce armv5 armv6
+RELEASE_PLATFORMS = gcce armv5 armv6
+MAKE              = make
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+DEFINES	 = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS -DNO_OTHER_MODULES -DQT_SQL_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB
+INCPATH	 =  -I"D:/Qt/4.6.1/include/QtCore" -I"D:/Qt/4.6.1/include/QtCore/tmp" -I"D:/Qt/4.6.1/include/QtNetwork" -I"D:/Qt/4.6.1/include/QtNetwork/tmp" -I"D:/Qt/4.6.1/include/QtGui" -I"D:/Qt/4.6.1/include/QtGui/tmp" -I"D:/Qt/4.6.1/include/QtSql" -I"D:/Qt/4.6.1/include/QtSql/tmp" -I"D:/Qt/4.6.1/include" -I"D:/Qt/4.6.1/include/tmp" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/tmp" -I"D:/Qt/4.6.1/mkspecs/common/symbian" -I"D:/Qt/4.6.1/mkspecs/common/symbian/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/sys" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/pluginmgr" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/pluginmgr/tmp" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/server" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/server/tmp" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/smfplugins" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/smfplugins/tmp" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/transportmgr" -I"D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/transportmgr/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/middleware" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/middleware" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/applications" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/applications" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/middleware/loc" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/stlport"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+	$(QMAKE) -spec symbian-abld -o "bld.inf" "D:/CarbideWorkspace/smfserver_cleaned/smf/smfservermodule/smfserver/smfserver.pro"
+
+bld.inf:
+	$(QMAKE)
+
+$(ABLD): bld.inf
+	bldmake bldfiles
+
+debug: $(ABLD)
+	$(ABLD) build winscw udeb
+	$(ABLD) build gcce udeb
+	$(ABLD) build armv5 udeb
+	$(ABLD) build armv6 udeb
+
+release: $(ABLD)
+	$(ABLD) build gcce urel
+	$(ABLD) build armv5 urel
+	$(ABLD) build armv6 urel
+
+debug-winscw: $(ABLD)
+	$(ABLD) build winscw udeb
+debug-gcce: $(ABLD)
+	$(ABLD) build gcce udeb
+debug-armv5: $(ABLD)
+	$(ABLD) build armv5 udeb
+debug-armv6: $(ABLD)
+	$(ABLD) build armv6 udeb
+release-gcce: $(ABLD)
+	$(ABLD) build gcce urel
+release-armv5: $(ABLD)
+	$(ABLD) build armv5 urel
+release-armv6: $(ABLD)
+	$(ABLD) build armv6 urel
+
+export: $(ABLD)
+	$(ABLD) export
+
+cleanexport: $(ABLD)
+	$(ABLD) cleanexport
+
+D:\Qt\4.6.1\bin\moc.exe:
+	(cd $(QTDIR)/src/tools/moc && $(MAKE))
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all: moc_smfpluginmanager.cpp moc_smfpluginmanagerutil.cpp moc_smfserver.cpp moc_smftransportmanager.cpp moc_smftransportmanagerutil.cpp moc_smfserverqt_p.cpp
+compiler_moc_header_clean:
+	-$(DEL_FILE) moc_smfpluginmanager.cpp moc_smfpluginmanagerutil.cpp moc_smfserver.cpp moc_smftransportmanager.cpp moc_smftransportmanagerutil.cpp moc_smfserverqt_p.cpp 2> NUL
+moc_smfpluginmanager.cpp: smfserverglobal.h \
+		pluginmgr\smfpluginmanager.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN pluginmgr\smfpluginmanager.h -o moc_smfpluginmanager.cpp
+
+moc_smfpluginmanagerutil.cpp: smfserverglobal.h \
+		pluginmgr\smfpluginmanagerutil.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN pluginmgr\smfpluginmanagerutil.h -o moc_smfpluginmanagerutil.cpp
+
+moc_smfserver.cpp: server\smfserver.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN server\smfserver.h -o moc_smfserver.cpp
+
+moc_smftransportmanager.cpp: smfserverglobal.h \
+		transportmgr\smftransportmanager.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN transportmgr\smftransportmanager.h -o moc_smftransportmanager.cpp
+
+moc_smftransportmanagerutil.cpp: smfserverglobal.h \
+		transportmgr\smftransportmanagerutil.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN transportmgr\smftransportmanagerutil.h -o moc_smftransportmanagerutil.cpp
+
+moc_smfserverqt_p.cpp: server\smfserverqt_p.h \
+		d:\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN server\smfserverqt_p.h -o moc_smfserverqt_p.cpp
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+	-$(DEL_FILE) qmake_image_collection.cpp 2> NUL
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all:
+compiler_uic_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean 
+
+create_temps:
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtCore\tmp" mkdir "D:\Qt\4.6.1\include\QtCore\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtNetwork\tmp" mkdir "D:\Qt\4.6.1\include\QtNetwork\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtGui\tmp" mkdir "D:\Qt\4.6.1\include\QtGui\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtSql\tmp" mkdir "D:\Qt\4.6.1\include\QtSql\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\tmp" mkdir "D:\Qt\4.6.1\include\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" mkdir "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\pluginmgr\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\pluginmgr\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\server\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\server\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfplugins\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfplugins\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\transportmgr\tmp" mkdir "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\transportmgr\tmp"
+
+extension_clean: compiler_clean
+	-@ if EXIST "D:\Qt\4.6.1\include\QtCore\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtCore\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\QtNetwork\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtNetwork\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\QtGui\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtGui\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\QtSql\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtSql\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\pluginmgr\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\pluginmgr\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\server\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\server\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfplugins\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfplugins\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\transportmgr\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\transportmgr\tmp"
+
+pre_targetdeps: \
+	generated_sources \
+	all_source_deps
+
+generated_sources: \
+	moc_smfpluginmanager.cpp \
+	moc_smfpluginmanagerutil.cpp \
+	moc_smfserver.cpp \
+	moc_smftransportmanager.cpp \
+	moc_smftransportmanagerutil.cpp \
+	moc_smfserverqt_p.cpp
+
+all_source_deps: \
+	pluginmgr\smfpluginmanager.h \
+	smfserverglobal.h \
+	pluginmgr\smfpluginmanagerutil.h \
+	server\smfserver.h \
+	server\smfserversymbian_p.h \
+	server\SmfServer.h \
+	server\smfserverqt_p.h \
+	transportmgr\smftransportmanager.h \
+	transportmgr\smftransportmanagerutil.h
+
+finalize:
+
+winscw_deployment:
+
+winscw_deployment_clean:
+
+sis: restore_build
+	$(if $(wildcard smfserver_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+	createpackage.bat $(QT_SIS_OPTIONS) smfserver_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+	$(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+	$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+restore_build:
+-include .make.cache
+
+store_build:
+	@echo # ============================================================================== > .make.cache
+	@echo # This file is generated by make and should not be modified by the user >> .make.cache
+	@echo #  Name        : .make.cache >> .make.cache
+	@echo #  Part of     : smfserver >> .make.cache
+	@echo #  Description : This file is used to cache last build target for >> .make.cache
+	@echo #                make sis target. >> .make.cache
+	@echo #  Version     :  >> .make.cache
+	@echo # >> .make.cache
+	@echo # ============================================================================== >> .make.cache
+	@echo. >> .make.cache
+	@echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> .make.cache
+
+dodistclean:
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver_template.pkg" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver_template.pkg"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\Makefile" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\Makefile"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\Makefile_0xE5027327.mk" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\Makefile_0xE5027327.mk"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver_0xE5027327.mmp" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver_0xE5027327.mmp"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver_reg.rss" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver_reg.rss"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver.rss" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver.rss"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver.loc" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\smfserver.loc"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\.make.cache" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\.make.cache"
+	-@ if EXIST "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\bld.inf" $(DEL_FILE)  "d:\CarbideWorkspace\smfserver_cleaned\smf\smfservermodule\smfserver\bld.inf"
+
+distclean: clean dodistclean
+
+clean: $(ABLD)
+	-$(ABLD) reallyclean
+	-bldmake clean
+
+clean-debug: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+	$(ABLD) reallyclean gcce udeb
+	$(ABLD) reallyclean armv5 udeb
+	$(ABLD) reallyclean armv6 udeb
+
+clean-release: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+	$(ABLD) reallyclean armv5 urel
+	$(ABLD) reallyclean armv6 urel
+
+clean-debug-winscw: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+clean-debug-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce udeb
+clean-debug-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 udeb
+clean-debug-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 udeb
+clean-release-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+clean-release-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 urel
+clean-release-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 urel
+
+run:
+	-call /S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/release/winscw/udeb/smfserver.exe $(QT_RUN_OPTIONS)
+runonphone: sis
+	runonphone $(QT_RUN_ON_PHONE_OPTIONS) --sis smfserver_$(QT_SIS_TARGET).sis smfserver.exe $(QT_RUN_OPTIONS)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/bld.inf	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,38 @@
+// ============================================================================
+// * Makefile for building: smfserver
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-18T15:52:55
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// * Project:  smfserver.pro
+// * Template: app
+// ============================================================================
+
+#define BLD_INF_SMFSERVER_F941367E
+
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+
+prj_mmpfiles
+
+gnumakefile Makefile_0xE5027327.mk
+smfserver_0xE5027327.mmp
+
+prj_extensions
+
+
+
+prj_exports
+
+smfplugins/smfpluginbase.h
+smfplugins/smfproviderbase.h
+smfplugins/smfcontactfetcherplugin.h
+smfplugins/smfpostproviderplugin.h
+smfplugins/smflyricsserviceplugin.h
+smfplugins/smfmusiceventsplugin.h
+smfplugins/smfmusicsearchplugin.h
+smfplugins/smfmusicserviceplugin.h
+smfplugins/smfplaylistserviceplugin.h
+smfplugins/smfgalleryplugin.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/datastoremgr.pri	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,22 @@
+INCLUDEPATH += datastoremgr \
+    ./
+
+CONFIG += console \
+    qt \
+    debug \
+    warn_on
+
+PUBLIC_HEADERS += \
+	datastoremgr/smfSns.h \
+    datastoremgr/smfUserProfile.h \
+    datastoremgr/smfSocialProfile.h \
+    datastoremgr/dsm.h
+
+PRIVATE_HEADERS += 
+
+SOURCES += \
+	datastoremgr/smfSns.cpp \
+#    datastoremgr/test.cpp \
+    datastoremgr/smfUserProfile.cpp \
+    datastoremgr/smfSocialProfile.cpp \
+    datastoremgr/dsm.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/doc/Doxyfile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,1551 @@
+# Doxyfile 1.6.3
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = SMF-DATASTORE
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER         =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = ./doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING      =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = NO
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE            =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT                  =
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          =
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS       =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        =
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP         = YES
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE               =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING     =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+#  will be generated, which together with the HTML files, form an Eclipse help
+#  plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index
+# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup
+# and does not have live searching capabilities.
+
+SERVER_BASED_SEARCH    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE      = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA             =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD                =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH            =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME           = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS           =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP            = YES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/dsm.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,603 @@
+/*! \file
+    \brief File containing class description for DataStoreManager class.
+
+    Copyright (c) 2010 Sasken Communication Technologies Ltd.
+    All rights reserved.
+    This component and the accompanying materials are made available
+    under the terms of the "{License}"
+    which accompanies  this distribution, and is available
+    at the URL "{LicenseUrl}".
+
+    \author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+    \version 0.1
+
+*/
+
+#include <dsm.h>
+#include <QDebug>
+
+// Static data initialization
+DataStoreManager* DataStoreManager::m_dsm_instance = NULL;
+const QString DataStoreManager::db_name = "dsm.db";
+DataStoreManagerState DataStoreManager::state = CLOSED;
+
+//! \fn getDataStoreManager()
+/*!
+    \brief  To get a handle on the datastore instantiation.
+    \brief  This function returns a pointer to the existing DataStoreManager instantiation(object).
+            If no object exists, a new one is created.
+
+    \return Pointer to the current instantiation of DataStoreManager.
+*/
+DataStoreManager* DataStoreManager::getDataStoreManager(){
+    if(m_dsm_instance == NULL){
+        m_dsm_instance = new DataStoreManager(DataStoreManager::db_name);
+        if(!(m_dsm_instance->InitializeDataBase())){
+            return NULL;
+        }
+
+    }
+
+    return  m_dsm_instance;
+}
+
+//! \fn ~DataStoreManager()
+/*!
+    \brief  Destructor for DataStoreManager class.
+
+    \note   Should this be public?
+*/
+DataStoreManager::~DataStoreManager(){
+    db.close();
+    state = CLOSED;
+    delete m_dsm_instance;
+}
+
+//! \fn getState()
+/*!
+    \brief  Get the current state of the DataStoreManager object.
+    \return The state of the DSM object.
+*/
+DataStoreManagerState DataStoreManager::getState() const{
+    return state;
+}
+
+//! \fn getError()
+/*!
+    \brief  Get the last error message from the DataStoreManager object.
+    \return The last error message string of the DSM object.
+*/
+QString DataStoreManager::getError() const{
+    return m_last_msg;
+}
+
+/* Refactor this. Think Signals. */
+QList <SMFSocialProfile> DataStoreManager::getAllRelated(const SMFUserProfile& user_profile) {
+    QList <SMFSocialProfile> related_profiles;
+    int usr_id = user_profile.userID();
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return related_profiles;
+            /* Do something to signal an error. Just returning an empty list is NOT ok */
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("SELECT social_profiles.social_profile_id , social_profiles.user_id , social_profiles.sns_id , "
+                " social_profiles.profile_url , social_profiles.screen_alias"
+                " FROM social_profiles JOIN user_profiles WHERE user_profiles.user_id = social_profiles.user_id"
+                " AND social_profiles.user_id = :user_id");
+    qry.bindValue(":user_id", usr_id);
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        /* Do something to signal an error. Just returning an empty list is NOT ok */
+        return related_profiles;
+    }
+
+    while(qry.next())
+    {
+        SMFSocialProfile _profile(qry.value(2).toInt()/* sns ID*/,
+                                  qry.value(1).toInt() /* user ID */,
+                                  qry.value(3).toString()/* url */,
+                                  qry.value(4).toString()/* alias */);
+        related_profiles << _profile;
+
+    }
+/*
+    for( int i = 0; i < related_profiles.size(); i++){
+        qDebug() << related_profiles.at(i).associatedSnsID() << ", " << related_profiles.at(i).associatedUserID()
+                << related_profiles.at(i).profileURL() << related_profiles.at(i).screenAlias() ;
+    }
+*/
+    qry.finish();
+    db.close();
+
+    return related_profiles;
+
+}
+
+
+SMFSocialProfile DataStoreManager::getRelatedByService(const SMFUserProfile& user_profile, const SMFSocialNetworkingSite& sns){
+
+    SMFSocialProfile _profile;
+    int usr_id = user_profile.userID();
+    int sns_id = sns.snsID();
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return _profile;
+            /* Do something to signal an error. Just returning an empty list is NOT ok */
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("SELECT social_profiles.social_profile_id , social_profiles.user_id , social_profiles.sns_id , "
+                " social_profiles.profile_url , social_profiles.screen_alias"
+                " FROM social_profiles JOIN user_profiles WHERE user_profiles.user_id = social_profiles.user_id"
+                " AND social_profiles.user_id = :user_id AND social_profiles.sns_id = :sns_id");
+    qry.bindValue(":user_id", usr_id);
+    qry.bindValue(":sns_id", sns_id);
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        /* Do something to signal an error. Just returning an empty list is NOT ok */
+        return _profile;
+    }
+
+    if(qry.next()) {
+        _profile.setAssociatedSnsID(qry.value(2).toInt());
+        _profile.setAssociatedUserID(qry.value(1).toInt());
+        _profile.setProfileURL(qry.value(3).toString());
+        _profile.setScreenAlias(qry.value(4).toString());
+    }
+/*
+    qDebug() << _profile.associatedSnsID() << ", " << _profile.associatedUserID() << ", "
+            << _profile.profileURL() << ", "<< _profile.screenAlias() ;
+*/
+    qry.finish();
+    db.close();
+
+    return _profile;
+}
+
+/* Cannot return something like this. Make this async */
+SMFUserProfile DataStoreManager::getUserProfile(const QString& name, const QString& contact_id){    
+    SMFUserProfile _profile;
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return _profile;
+            /* Do something to signal an error. Just returning an empty list is NOT ok */
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("SELECT user_id , name , contact_id FROM user_profiles WHERE name=:name  AND contact_id=:contact_id");
+    qry.bindValue(":name", name);
+    qry.bindValue(":contact_id", contact_id);
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        /* Do something to signal an error. Just returning an empty list is NOT ok */
+        return _profile;
+    }
+
+    if(qry.next()){
+        _profile.setName(qry.value(1).toString());
+        _profile.setContactID(qry.value(2).toString());
+        _profile.setUserID(qry.value(0).toInt());
+    }
+
+    qry.finish();
+    db.close();
+
+    return _profile;
+}
+
+/*! Fetches the Social Networking site identified by \a name */
+SMFSocialNetworkingSite DataStoreManager::getSNSEntry(const QString& name){
+    SMFSocialNetworkingSite sns;
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return sns;
+            /* Do something to signal an error. Just returning an empty list is NOT ok */
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("SELECT sns_id, sns_name, sns_url FROM sns_base WHERE sns_name=:name");
+    qry.bindValue(":name", name);
+
+    if(!qry.exec()){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return sns;
+    }
+
+    if(qry.next()){
+        sns.setSnsID(qry.value(0).toInt());
+        sns.setSnsName(qry.value(1).toString());
+        sns.setSnsURL(qry.value(2).toString());
+    }
+
+    qry.finish();
+    db.close();
+
+    return sns;
+}
+
+/* Actually all these 'save' functions can be written as a template */
+void DataStoreManager::saveUserProfile(const SMFUserProfile& user_profile){
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("UPDATE user_profiles"
+                " SET name=:name , contact_id=:contact_id"
+                " WHERE user_id=:user_id");
+    qry.bindValue(":name", user_profile.name());
+    qry.bindValue(":contact_id", user_profile.contactID());
+    qry.bindValue(":user_id", user_profile.userID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+    }
+
+    qry.finish();
+    db.close();
+}
+
+void DataStoreManager::saveSocialProfile(const SMFSocialProfile& social_profile){
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("UPDATE social_profiles"
+                " SET user_id=:user_id, sns_id=:sns_id, profile_url=:profile_url, screen_alias=:screen_alias"
+                " WHERE social_profile_id=:social_profile_id");
+    qry.bindValue(":user_id", social_profile.associatedUserID());
+    qry.bindValue(":sns_id", social_profile.associatedSnsID());
+    qry.bindValue(":profile_url", social_profile.profileURL());
+    qry.bindValue(":screen_alias", social_profile.screenAlias());
+    qry.bindValue(":social_profile_id", social_profile.profileID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+    }
+
+    qry.finish();
+    db.close();
+}
+
+void DataStoreManager::saveSNSEntry(const SMFSocialNetworkingSite& sns){
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("UPDATE sns_base"
+                " SET sns_name=:sns_name, sns_url=:sns_url"
+                " WHERE sns_id=:sns_id");
+    qry.bindValue(":sns_name", sns.snsName());
+    qry.bindValue(":sns_url", sns.snsURL());
+    qry.bindValue(":sns_id", sns.snsID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+    }
+
+    qry.finish();
+    db.close();
+
+}
+
+void DataStoreManager::modifyRelation(SMFSocialProfile& sns, SMFUserProfile& new_user_profile){
+    sns.setAssociatedUserID(new_user_profile.userID());
+}
+
+
+int DataStoreManager::addUserProfile(SMFUserProfile& user_profile){
+    int user_id = user_profile.userID();
+
+    /* Check Required to identify multiple Entries */
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return user_id;
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("INSERT INTO user_profiles (name, contact_id) VALUES (:name, :contact_id)");
+    qry.bindValue(":name", user_profile.name());
+    qry.bindValue(":contact_id", user_profile.contactID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return user_id;
+    }
+
+    qry.prepare("SELECT user_id FROM user_profiles WHERE name=:name AND contact_id=:contact_id");
+    qry.bindValue(":name", user_profile.name());
+    qry.bindValue(":contact_id", user_profile.contactID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return user_id;
+    }
+
+    if(qry.next()){
+        user_id = qry.value(0).toInt();
+        user_profile.setUserID(user_id);
+    }
+
+    qry.finish();
+    db.close();
+
+    return user_id;
+
+
+}
+
+int DataStoreManager::deleteUserProfile( SMFUserProfile& user_profile){
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return -1;
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("DELETE FROM user_profiles WHERE user_id=:user_id");
+    qry.bindValue(":user_id", user_profile.userID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return -1;
+    }
+
+    qry.finish();
+    db.close();
+
+    return 0;
+}
+
+int DataStoreManager::addSocialProfile(SMFSocialProfile& social_profile){
+    int social_prof_id = social_profile.profileID();
+
+    /* Check Required to identify multiple entries */
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return social_prof_id;
+        }
+    }
+
+    /*  There might be a request to add a social profile with either user and/or sns profile(s)
+        not stored in the database. What to do in that case? Automatically store the other profiles too?
+    */
+    QSqlQuery qry;
+    qry.prepare("INSERT INTO social_profiles (user_id, sns_id, profile_url, screen_alias) "
+                "VALUES (:user_id, :sns_id, :profile_url, :screen_alias)");
+    qry.bindValue(":user_id", social_profile.associatedUserID());
+    qry.bindValue(":sns_id", social_profile.associatedSnsID());
+    qry.bindValue(":profile_url", social_profile.profileURL());
+    qry.bindValue(":screen_alias", social_profile.screenAlias());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return social_prof_id;
+    }
+
+    qry.prepare("SELECT social_profile_id FROM social_profiles  "
+                "WHERE user_id=:user_id AND sns_id=:sns_id AND profile_url=:profile_url AND screen_alias=:screen_alias");
+    qry.bindValue(":user_id", social_profile.associatedUserID());
+    qry.bindValue(":sns_id", social_profile.associatedSnsID());
+    qry.bindValue(":profile_url", social_profile.profileURL());
+    qry.bindValue(":screen_alias", social_profile.screenAlias());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return social_prof_id;
+    }
+
+    if(qry.next()){
+        social_prof_id = qry.value(0).toInt();
+        social_profile.setProfileID(social_prof_id);
+    }
+
+    qry.finish();
+    db.close();
+
+    return social_prof_id;
+}
+
+int DataStoreManager::deleteSocialProfile(SMFSocialProfile& social_profile){
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return -1;
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("DELETE FROM social_profiles WHERE social_profile_id=:social_profile_id");
+    qry.bindValue(":social_profile_id", social_profile.profileID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return -1;
+    }
+
+    qry.finish();
+    db.close();
+
+    return 0;
+}
+
+int DataStoreManager::addSNSEntry( SMFSocialNetworkingSite& sns){
+    int sns_id = sns.snsID();
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return sns_id;
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("INSERT INTO sns_base (sns_name, sns_url) VALUES (:sns_name, :sns_url)");
+    qry.bindValue(":sns_name", sns.snsName());
+    qry.bindValue(":sns_url", sns.snsURL());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return sns_id;
+    }
+
+    qry.prepare("SELECT sns_id FROM sns_base WHERE sns_name=:sns_name AND sns_url=:sns_url");
+    qry.bindValue(":sns_name", sns.snsName());
+    qry.bindValue(":sns_url", sns.snsURL());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return sns_id;
+    }
+
+    if(qry.next()){
+        sns_id = qry.value(0).toInt();
+        sns.setSnsID(sns_id);
+    }
+
+    qry.finish();
+    db.close();
+
+    return sns_id;
+}
+
+int DataStoreManager::deleteSNSEntry(SMFSocialNetworkingSite& sns){
+
+    if (!(db.isOpen())){
+        if(!(db.open())){
+            state = ERROR;
+            m_last_msg = db.lastError().text();
+            return -1;
+        }
+    }
+
+    QSqlQuery qry;
+    qry.prepare("DELETE FROM sns_base WHERE sns_id=:sns_id");
+    qry.bindValue(":sns_id", sns.snsID());
+
+    if(!(qry.exec())){
+        m_last_msg = qry.lastError().text();
+        qry.finish();
+        return -1;
+    }
+
+    qry.finish();
+    db.close();
+
+    return 0;
+}
+
+int DataStoreManager::createRelation(const SMFUserProfile& user_profile, SMFSocialProfile& social_profile){
+    social_profile.setAssociatedUserID(user_profile.userID());
+    /* Save the socialProfile */
+    //saveSocialProfile(social_profile);
+    return 0;
+}
+
+int DataStoreManager::deleteRelation(const SMFUserProfile&,  SMFSocialProfile& social_profile){
+    social_profile.setAssociatedUserID(-1);
+    /* Save the profile */
+    //saveSocialProfile(social_profile);
+    return 0;
+}
+
+
+DataStoreManager::DataStoreManager(const QString& db_name, QObject* parent):QObject(parent){
+    db = QSqlDatabase::addDatabase("QSQLITE");
+    db.setDatabaseName(db_name);
+}
+
+bool DataStoreManager::InitializeDataBase(){
+
+    if(!db.open()){
+        state = ERROR;
+        m_last_msg = db.lastError().text();
+        return FALSE;
+    }
+    else
+        state = READY;
+
+    QSqlQuery create_tables[3];
+
+    create_tables[0].prepare("CREATE TABLE IF NOT EXISTS user_profiles (user_id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT, contact_id TEXT)");
+    create_tables[1].prepare("CREATE TABLE IF NOT EXISTS sns_base (sns_id INTEGER PRIMARY KEY AUTOINCREMENT , sns_name TEXT, sns_url TEXT)");
+    create_tables[2].prepare("CREATE TABLE IF NOT EXISTS social_profiles (social_profile_id INTEGER PRIMARY KEY AUTOINCREMENT , user_id INTEGER, sns_id INTEGER, profile_url TEXT, screen_alias TEXT)");
+
+
+
+    for(int i = 0; i < 3; i++){
+        if(!create_tables[i].exec()){
+            state = ERROR;
+            m_last_msg = create_tables[i].lastError().text();
+            return FALSE;
+        }
+        create_tables[i].finish();
+    }
+
+    db.close();
+    state = CLOSED;
+    return TRUE;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/dsm.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,86 @@
+/*!	\file 
+	\brief File containing class description for DataStoreManager class.
+	
+	Copyright (c) 2010 Sasken Communication Technologies Ltd.
+	All rights reserved.
+	This component and the accompanying materials are made available
+	under the terms of the "{License}"
+	which accompanies  this distribution, and is available
+	at the URL "{LicenseUrl}".
+
+	\author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+	\version 0.1
+
+*/
+
+#ifndef DATASTOREMANAGER_H
+#define DATASTOREMANAGER_H
+
+#include <QString>
+#include <QObject>
+#include <QtSql>
+#include "smfSns.h"
+#include "smfSocialProfile.h"
+#include "smfUserProfile.h"
+
+enum DataStoreManagerState{READY, BUSY, CLOSED, ERROR};
+
+//!	\class 	DataStoreManager
+/*!
+	\brief 	Data Store Manager
+	\brief 	Data Store Manager provides the functional interface between the data store and the outside world. 
+			It manages access to the data store and encapsulates prebuilt queries for relation management and makes sure 
+			that the data in persistent storage is always in a consistent state.
+			The DSM implements the Singleton Pattern, which means that only one instance of DSM will be available throughout the system.
+	
+	\warning	Not Thread Safe
+	\warning	Do not subclass
+*/
+class DataStoreManager : public QObject
+{
+	Q_OBJECT
+	
+	public:
+        static DataStoreManager* getDataStoreManager();
+        ~DataStoreManager();
+
+        QList <SMFSocialProfile> getAllRelated(const SMFUserProfile&);
+        SMFSocialProfile getRelatedByService(const SMFUserProfile&, const SMFSocialNetworkingSite&);
+
+        DataStoreManagerState getState() const;
+        QString getError() const;
+
+
+
+        SMFUserProfile getUserProfile(const QString& name, const QString& contact_id);
+        SMFSocialNetworkingSite getSNSEntry(const QString& name);
+        void saveUserProfile(const SMFUserProfile& user_profile);
+        void saveSocialProfile(const SMFSocialProfile& social_profile);
+        void saveSNSEntry(const SMFSocialNetworkingSite& sns);
+        void modifyRelation(SMFSocialProfile& sns, SMFUserProfile& new_user_profile);
+
+
+	public slots:
+        int addUserProfile( SMFUserProfile&);
+        int deleteUserProfile( SMFUserProfile&);
+        int addSocialProfile( SMFSocialProfile&);
+		int deleteSocialProfile(SMFSocialProfile&);
+        int addSNSEntry( SMFSocialNetworkingSite&);
+		int deleteSNSEntry(SMFSocialNetworkingSite&);
+        int createRelation(const SMFUserProfile&, SMFSocialProfile&);
+        int deleteRelation(const SMFUserProfile&, SMFSocialProfile&);
+
+	private:
+        static DataStoreManager* m_dsm_instance;		// Unique Instance for DSM (Singleton Implementation)
+        static const QString db_name;
+        int m_dsm_instance_count; 				// Track references to the DSM
+        static DataStoreManagerState state;				// Current state of DSM
+        QString m_last_msg;					// Last message/error generated by the database.
+        QSqlDatabase db;
+
+        DataStoreManager(const QString& db_name, QObject* parent = 0); 			// Private Constructor.
+        bool InitializeDataBase();				// Initialization code to be called once while lazy construction of the instance
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/smfSns.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,103 @@
+/*!	\file
+        \brief File containing implementation for SMFSocialNetworkingSite class.
+
+        Copyright (c) 2010 Sasken Communication Technologies Ltd.
+        All rights reserved.
+        This component and the accompanying materials are made available
+        under the terms of the "{License}"
+        which accompanies  this distribution, and is available
+        at the URL "{LicenseUrl}".
+
+        \author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+        \version 0.1
+
+*/
+
+#include "smfSns.h"
+
+//! \fn SMFSocialNetworkingSite(const QString& name, const QString& url, QObject* parent = 0)
+/*!
+    \brief Constructor for SMFSocialNetworkingSite class
+    \param name Name of the Social Networking site
+    \param url URL of the Social Networking Site
+    \param parent Parent of the class. Default 0.
+*/
+SMFSocialNetworkingSite::SMFSocialNetworkingSite(const QString& name, const QString& url, QObject* parent): QObject( parent ){
+    setSnsName(name);
+    setSnsURL(url);
+    setSnsID(-1); // Set a negative ID till we store the object in the database or retrieve it from the database.
+}
+
+
+//! \fn ~SMFSocialNetworkingSite()
+/*!
+    \brief Destructor for SMFSocialNetworkingSite class
+*/
+SMFSocialNetworkingSite::~SMFSocialNetworkingSite(){
+    //Empty
+}
+
+
+//! \fn int snsID() const
+/*!
+    \brief Returns the ID for the social networking site the object corresponds to.
+    \return Integer ID for the social networking site the object represents.
+*/
+int SMFSocialNetworkingSite::snsID() const{
+    return m_sns_id;
+}
+
+
+//! \fn const QString& snsName() const
+/*!
+    \brief Gets the name of the social networking site.
+    \return A const reference to the name of the social networking site
+    \sa setSnsName()
+*/
+const QString& SMFSocialNetworkingSite::snsName() const{
+    return m_sns_name;
+}
+
+
+//! \fn const QString& snsURL() const
+/*!
+    \brief Gets the URL of the social networking site
+    \return A const reference to the URL of the social networking site
+    \sa setSnsURL()
+*/
+const QString& SMFSocialNetworkingSite::snsURL() const{
+    return m_sns_url;
+}
+
+
+//! \fn void setSnsName(const QString& name)
+/*!
+    \brief 	Setter method for name of the social networking site
+    \param 	name 	reference to the name object
+    \sa 	snsName()
+*/
+void SMFSocialNetworkingSite::setSnsName(const QString &name){
+    m_sns_name = name;
+}
+
+
+//! \fn void setSnsURL(const QString& url)
+/*!
+    \brief Setter method for the URL of the social networking site
+    \param 	url 	const reference to the URL object
+    \sa 	snsURL()
+*/
+void SMFSocialNetworkingSite::setSnsURL(const QString &url){
+    m_sns_url = url;
+}
+
+
+//! \fn void setSnsID(int id)
+/*!
+    \brief Setter method for the id of the social networking site
+    \param 	id 	Integer ID
+*/
+void SMFSocialNetworkingSite::setSnsID(int id){
+    m_sns_id = id;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/smfSns.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,59 @@
+/*!	\file 
+	\brief File containing class description for SMFSocialNetworkingSite class.
+	
+	Copyright (c) 2010 Sasken Communication Technologies Ltd.
+	All rights reserved.
+	This component and the accompanying materials are made available
+	under the terms of the "{License}"
+	which accompanies  this distribution, and is available
+	at the URL "{LicenseUrl}".
+
+	\author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+	\version 0.1
+
+*/
+
+
+#ifndef SMFSOCIALNETWORKINGSITE_H
+#define SMFSOCIALNETWORKINGSITE_H
+
+#include <QObject>
+#include <QString>
+
+class DataStoreManager; //Forward Declaration
+
+//!	\class 	SMFSocialNetworkingSite
+/*!
+	\brief 	This class represents a social networking site.
+	
+	\sa		SMFSocialProfile
+*/
+class SMFSocialNetworkingSite : public QObject
+{
+	Q_OBJECT
+
+    friend class DataStoreManager;
+
+	public:
+        SMFSocialNetworkingSite(const QString& name="", const QString& url="", QObject* parent = 0);
+        int snsID() const;
+		const QString& snsName() const;
+		const QString& snsURL() const;
+		~SMFSocialNetworkingSite();
+			
+	public slots:	
+		void setSnsName(const QString& name);
+		void setSnsURL(const QString& url);
+
+	private:
+                int m_sns_id;                   // m_sns_id gets generated. It is never set through a setter method. Hence, no public setter for ID.
+						// It gets generated when the social networking site is stored in the database.
+		QString m_sns_name;
+		QString m_sns_url;	
+		
+        private slots:
+                void setSnsID(int id);          //private setter method for ID. Might be required.
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/smfSocialProfile.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,225 @@
+/*!	\file
+    \brief File containing implementation for SMFSocialProfile class.
+
+    Copyright (c) 2010 Sasken Communication Technologies Ltd.
+    All rights reserved.
+    This component and the accompanying materials are made available
+    under the terms of the "{License}"
+    which accompanies  this distribution, and is available
+    at the URL "{LicenseUrl}".
+
+    \author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+    \author
+    \version 0.1
+
+*/
+
+#include "smfSocialProfile.h"
+
+//! \fn SMFSocialProfile(const SMFSocialNetworkingSite&, const SMFUserProfile&, QObject*)
+/*!
+    \brief  Constructor for the class SMFSocialProfile.
+    \param  site A constant reference to the SMFSocialNetworkingSite profile associated with this profile.
+    \param  user_profile A constant reference to the SMFUserProfile object associated with this profile.
+    \param  parent Reference to the parent object.
+*/
+SMFSocialProfile::SMFSocialProfile(const SMFSocialNetworkingSite &site, const QString& profile_url, const QString& screen_alias, QObject *parent):QObject(parent){
+    setAssociatedSns(site);
+    m_social_profile_id = -1;    // Set as negative to indicate that this is not yet stored in the database.
+    setAssociatedUserID(-1);
+    m_screen_alias = screen_alias;
+    m_profile_url = profile_url;
+}
+
+
+SMFSocialProfile::SMFSocialProfile (const SMFSocialProfile& other){
+    this->setAssociatedSnsID(other.associatedSnsID());
+    this->setAssociatedUserID(other.associatedUserID());
+    this->setScreenAlias(other.screenAlias());
+    this->setProfileURL(other.profileURL());
+    this->setParent(other.parent());
+    m_social_profile_id = other.profileID();
+}
+
+
+//! \fn SMFSocialProfile(int , int , QObject* )
+/*!
+    \brief  Constructor for the class SMFSocialProfile.
+    \param  sns_id Integer id of the SMFSocialNetworkingSite profile associated with this profile.
+    \param  user_id Integer id of the SMFUserProfile associated with this profile.
+    \param  parent Reference to the parent object.
+*/
+SMFSocialProfile::SMFSocialProfile(int sns_id, int user_id, const QString& profile_url, const QString& screen_alias, QObject* parent):QObject(parent){
+    setAssociatedUserID(user_id);
+    setAssociatedSnsID(sns_id);
+    m_social_profile_id = -1;    // Set as negative to indicate that this is not yet stored in the database.
+    m_screen_alias = screen_alias;
+    m_profile_url = profile_url;
+}
+
+//! \fn ~SMFSocialProfile()
+/*!
+    \brief  Destructor for the class SMFSocialProfile.
+*/
+SMFSocialProfile::~SMFSocialProfile(){
+    // Empty
+}
+
+
+//! \fn associatedSnsID()
+/*!
+    \brief  Gets the ID of the Social Networking Site associated with this profile.
+    \return Integer ID of the Social Networking Site associated with this profile.
+
+    \sa setAssociatedSnsID()
+    \sa setAssociatedSns()
+*/
+int SMFSocialProfile::associatedSnsID() const{
+    return m_sns_id;
+}
+
+
+//! \fn associatedUserID()
+/*!
+    \brief  Gets the ID of the User Profile associated with this profile.
+    \return Integer ID identifying the User Profile associated with this profile.
+
+    \sa setAssociatedUserID()
+    \sa setAssociatedUserProfile()
+*/
+int SMFSocialProfile::associatedUserID() const{
+    return m_user_id;
+}
+
+
+//! \fn profileURL()
+/*!
+    \brief  Gets profile URL of the social profile.
+    \return Returns a QString containing the profile URL of this social profile.
+            An empty string is returned if the value is not present.
+
+    \sa setProfileURL()
+*/
+const QString& SMFSocialProfile::profileURL() const{
+    return m_profile_url;
+}
+
+
+//! \fn screenAlias()
+/*!
+    \brief  Gets the screen alias of the social profile.
+    \return Returns a QString containing the screen alias of this social profile.
+            An empty string is returned if the value is not present.
+
+    \sa setScreenAlias()
+*/
+const QString& SMFSocialProfile::screenAlias() const{
+    return m_screen_alias;
+}
+
+
+//! \fn profileID()
+/*!
+    \brief  Gets the profile ID of the social profile.
+    \return Returns an Integer ID of this profile.
+*/
+int SMFSocialProfile::profileID() const{
+    return m_social_profile_id;
+}
+
+//! \fn setProfileID()
+/*!
+    \brief  Private function to set the profile ID.
+    \param  id Integer ID to be set.
+*/
+void SMFSocialProfile::setProfileID(int id){
+    m_social_profile_id = id;
+}
+
+//! \fn setAssociatedSns(const SMFSocialNetworkingSite& )
+/*!
+    \brief  Sets the social networking site associated to this ID. This function and the related
+            function setAssociatedSnsID() do the same job of associating a social networking site to
+            this profile. Either one of these can be called to create an association. There is no
+            requirement to call both separately.
+    \param  site Constant reference to the SMFSocialNetworkingSite to be associated.
+
+    \sa     setAssociatedSnsID()
+    \sa     associatedSnsID()
+*/
+void SMFSocialProfile::setAssociatedSns(const SMFSocialNetworkingSite &site){
+    setAssociatedSnsID(site.snsID());
+}
+
+
+//! \fn setAssociatedSnsID( int )
+/*!
+    \brief  Sets the social networking site associated to this ID. This function and the related
+            function setAssociatedSns() do the same job of associating a social networking site to
+            this profile. Either one of these can be called to create an association. There is no
+            requirement to call both separately.
+    \param  id Integer ID of the Social Networking site to be associated.
+
+    \sa     setAssociatedSns()
+    \sa     associatedSnsID()
+*/
+void SMFSocialProfile::setAssociatedSnsID(int sns_id){
+    m_sns_id = sns_id;
+}
+
+
+//! \fn setAssociatedUserProfile( const SMFUserProfile& )
+/*!
+    \brief  Sets the social user profile associated to this ID. This function and the related
+            function setAssociatedUserID() do the same job of associating a user profile to
+            this profile. Either one of these can be called to create an association. There is no
+            requirement to call both separately.
+    \param  user_profile Constant reference to the SMFUserProfile to be associated with this profile.
+
+    \sa     setAssociatedUserID()
+    \sa     associatedUserID()
+*/
+void SMFSocialProfile::setAssociatedUserProfile(const SMFUserProfile &user_profile){
+    setAssociatedUserID(user_profile.userID());
+}
+
+
+//! \fn setAssociatedUserProfile( const SMFUserProfile& )
+/*!
+    \brief  Sets the social user profile associated to this ID. This function and the related
+            function setAssociatedUserProfile() do the same job of associating a user profile to
+            this profile. Either one of these can be called to create an association. There is no
+            requirement to call both separately.
+    \param  id Integer ID identifying the SMFUserProfile to be associated with this profile.
+
+    \sa     setAssociatedUserProfile()
+    \sa     associatedUserID()
+*/
+void SMFSocialProfile::setAssociatedUserID(int user_id){
+    m_user_id = user_id;
+}
+
+
+//! \fn setProfileURL( const QString& )
+/*!
+    \brief  Sets the profile URL for the social profile
+    \param  profile_url Constant reference to the profile URL string.
+
+    \sa     profileURL()
+*/
+void SMFSocialProfile::setProfileURL(const QString &profile_url){
+    m_profile_url = profile_url;
+}
+
+
+//! \fn setScreenAlias( const QString& )
+/*!
+    \brief  Sets the screen alias for the social profile
+    \param  screen_alias Constant reference to the screen alias string.
+
+    \sa     screenAlias()
+*/
+void SMFSocialProfile::setScreenAlias(const QString &screen_alias){
+    m_screen_alias = screen_alias;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/smfSocialProfile.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,74 @@
+/*!	\file 
+	\brief File containing class description for SMFSocialProfile class.
+	
+	Copyright (c) 2010 Sasken Communication Technologies Ltd.
+	All rights reserved.
+	This component and the accompanying materials are made available
+	under the terms of the "{License}"
+	which accompanies  this distribution, and is available
+	at the URL "{LicenseUrl}".
+
+	\author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+	\author
+	\version 0.1
+
+*/
+
+#ifndef SMFSOCIALPROFILE_H
+#define SMFSOCIALPROFILE_H
+
+#include <QObject>
+#include <QString>
+
+#include "smfSns.h"
+#include "smfUserProfile.h"
+
+class DataStoreManager; //Forward Declaration
+
+//!	\class 	SMFSocialProfile
+/*!
+	\brief	This class represents a user's public profile on a social networking site.
+	\brief	A social profile represents the information about the user/contact profiles on various social networking sites. 
+			Every profile on a social networking site gets a social profile. 
+			A single social profile can be tied to one social networking site and one user profile.
+			
+	\sa 	SMFUserProfile , SMFSocialNetworkingSite
+*/
+class SMFSocialProfile: public QObject
+{
+	Q_OBJECT
+
+    friend class DataStoreManager;
+	
+	public:
+        SMFSocialProfile(const SMFSocialNetworkingSite& site, const QString& profile_url = "", const QString& screen_alias = "", QObject* parent = 0);
+        SMFSocialProfile(int sns_id = -1, int user_id = -1, const QString& profile_url = "", const QString& screen_alias = "", QObject* parent = 0);
+        SMFSocialProfile (const SMFSocialProfile& other);
+		~SMFSocialProfile();
+		int associatedUserID() const;
+		int associatedSnsID() const;
+		int profileID() const;
+		const QString& profileURL() const;
+		const QString& screenAlias() const;
+	
+	public slots:
+		void setAssociatedSns(const SMFSocialNetworkingSite& site);
+		void setAssociatedSnsID(int sns_id);
+		void setProfileURL(const QString& profile_url);
+		void setScreenAlias(const QString& screen_alias);
+	
+	private:
+		int m_social_profile_id;
+		int m_user_id;
+		int m_sns_id;
+		QString m_profile_url;
+		QString m_screen_alias;		
+		
+	private slots:
+		void setProfileID(int id);
+        void setAssociatedUserID(int user_id);
+        void setAssociatedUserProfile(const SMFUserProfile& user_profile);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/smfUserProfile.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,104 @@
+/*!	\file
+        \brief File containing implementation for SMFUserProfile class.
+
+        Copyright (c) 2010 Sasken Communication Technologies Ltd.
+        All rights reserved.
+        This component and the accompanying materials are made available
+        under the terms of the "{License}"
+        which accompanies  this distribution, and is available
+        at the URL "{LicenseUrl}".
+
+        \author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+        \version 0.1
+
+*/
+
+#include "smfUserProfile.h"
+
+//! \fn SMFUserProfile(const QString&, const QString& , QObject*)
+/*!
+    \brief  Constructor for the class SMFUserProfile
+    \param  name Reference to the name of the user/person whom this profile identifies.
+    \param  contact_id Reference to the contact ID of the user/person whom this profile identifies.
+    \param  parent Pointer to a parent object.
+*/
+SMFUserProfile::SMFUserProfile(const QString &name, const QString &contact_id, QObject *parent):QObject(parent){
+    setName(name);
+    setContactID(contact_id);
+    setUserID(-1);  // Set as negative to indicate that this is not yet stored in the database.
+}
+
+
+//! \fn ~SMFUserProfile()
+/*!
+    \brief Destructor for the class SMFUserProfile
+*/
+SMFUserProfile::~SMFUserProfile(){
+    // EMpty
+}
+
+
+//! \fn int userID() const
+/*!
+    \brief  Gets the user ID of this profile.
+    \return Integer User ID of this profile. -1 if not assigned a user id yet.
+*/
+int SMFUserProfile::userID() const{
+    return m_user_id;
+}
+
+
+//! \fn const QString& name() const
+/*!
+    \brief Gets the name of user/person whom this profile identifies.
+    \return A const reference to the name of the user/person whom this profile identifies.
+    \sa setName()
+*/
+const QString& SMFUserProfile::name() const {
+    return m_name;
+}
+
+
+//! \fn const QString& contactID() const
+/*!
+    \brief Gets the contact ID of the user/person whom this profile identifies.
+    \return A const reference to the contact ID of the user/person whom this profile identifies.
+    \sa setContactID()
+*/
+const QString& SMFUserProfile::contactID() const{
+    return m_contact_id;
+}
+
+
+//! \fn void setName(const QString&)
+/*!
+    \brief Sets the name of user/person whom this profile identifies.
+    \param name A const reference to the name of the social networking site
+    \sa name()
+*/
+void SMFUserProfile::setName(const QString& name){
+    m_name = name;
+}
+
+
+//! \fn void setContactID(const QString&)
+/*!
+    \brief  Sets the contact ID of the user/person whom this profile identifies.
+    \param  contact_id A const reference to the contact ID of the user/person whom this profile identifies.
+    \sa contactID()
+*/
+void SMFUserProfile::setContactID(const QString& contact_id){
+    m_contact_id = contact_id;
+}
+
+
+//! \fn void setUserID(int)
+/*!
+    \brief  Sets the user ID of this profile.
+    \param  id An integer user ID of this profile.
+    \sa userID()
+*/
+void SMFUserProfile::setUserID(int id){
+    m_user_id = id;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/smfUserProfile.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,59 @@
+/*!	\file 
+	\brief File containing class description for SMFUserProfile class.
+	
+	Copyright (c) 2010 Sasken Communication Technologies Ltd.
+	All rights reserved.
+	This component and the accompanying materials are made available
+	under the terms of the "{License}"
+	which accompanies  this distribution, and is available
+	at the URL "{LicenseUrl}".
+
+	\author Jaspinder Singh, Sasken Communication Technologies Ltd - Initial contribution
+
+	\version 0.1
+
+*/
+
+#ifndef SMFUSERPROFILE_H
+#define SMFUSERPROFILE_H
+
+#include <QObject>
+#include <QString>
+
+class DataStoreManager; //Forward Declaration
+
+//!	\class 	SMFUserProfile
+/*!
+	\brief 	This class represents a user's profile.
+	\brief 	A user is a contact stored in the handset. This profile is created for contacts in the handset and is related to the social profiles.
+			A single user profile can be associated with multiple social profiles in the database.
+	
+	\sa		SMFSocialProfile
+*/
+class SMFUserProfile : public QObject
+{
+	Q_OBJECT
+	
+    friend class DataStoreManager;
+
+	public:
+        SMFUserProfile(const QString& name = "", const QString& contact_id = "", QObject* parent = 0);
+		~SMFUserProfile();
+		int userID() const;
+		const QString& name() const;
+		const QString& contactID() const;
+		
+	public slots:
+		void setName(const QString& name);
+		void setContactID(const QString& contact_id);
+	
+	private:
+		int m_user_id;
+        QString m_name;
+        QString m_contact_id;
+		
+	private slots:
+		void setUserID(int id);
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/datastoremgr/test.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,78 @@
+#include <QDebug>
+#include "smfSns.h"
+#include <QString>
+#include "smfUserProfile.h"
+#include "smfSocialProfile.h"
+#include "dsm.h"
+
+
+int main(){
+
+    QString sns_name = "facebook";
+    QString sns_url = "http://www.facebook.com";
+    SMFSocialNetworkingSite mySns (sns_name, sns_url);
+
+    qDebug() << "Name of my SNS: " << mySns.snsName();
+    qDebug() << "URL of my SNS: " << mySns.snsURL();
+    qDebug() << "ID of my SNS(should be negative): " << mySns.snsID();
+
+    QString user_name = "Test User";
+    QString user_contact_id = "1234567890";
+    SMFUserProfile myUser(user_name, user_contact_id);
+
+    qDebug() << "Name of my user: " << myUser.name();
+    qDebug() << "Contact ID of my user: " << myUser.contactID();
+    qDebug() << "User ID of my user: " << myUser.userID();
+
+    DataStoreManager* dsm_p = DataStoreManager::getDataStoreManager();
+    if(dsm_p != NULL){
+        dsm_p->addUserProfile(myUser);
+        dsm_p->addSNSEntry(mySns);
+       // dsm_p->deleteUserProfile(myUser);
+        qDebug() << "----------------\nState: " << dsm_p->getState();
+        qDebug() << "Error Message: " << dsm_p->getError() << "\n----------------";
+    }
+    else
+        qDebug() << "Error getting database handle";
+
+    qDebug() << "Name of my user: " << myUser.name();
+    qDebug() << "Contact ID of my user: " << myUser.contactID();
+    qDebug() << "User ID of my user: " << myUser.userID();
+
+    qDebug() << "Name of my SNS: " << mySns.snsName();
+    qDebug() << "URL of my SNS: " << mySns.snsURL();
+    qDebug() << "ID of my SNS(should be negative): " << mySns.snsID();
+
+    QString profile_url = sns_url + "/test_user";
+    QString screen_alias = "scrnALIAS";
+    SMFSocialProfile mySocPrfl(mySns,profile_url, screen_alias);
+
+    qDebug() << "My Social Profile's associated SNS ID: " << mySocPrfl.associatedSnsID();
+    qDebug() << "My social Profile's associated User ID: " << mySocPrfl.associatedUserID();
+    qDebug() << "ProfileURL: " << mySocPrfl.profileURL();
+    qDebug() << "Screen Alias: " << mySocPrfl.screenAlias();
+    qDebug() << "My Social Profile's ID: " << mySocPrfl.profileID();
+
+    DataStoreManager* dsm2 = DataStoreManager::getDataStoreManager(); // jsut to test that only one object is created.
+    if (dsm_p == dsm2)
+        qDebug() << "true";
+
+    if(dsm2 != NULL){
+        dsm2->createRelation(myUser, mySocPrfl);
+        dsm2->addSocialProfile(mySocPrfl);
+
+        //dsm2->deleteSocialProfile(mySocPrfl);
+    }
+
+    qDebug() << "My Social Profile's associated SNS ID: " << mySocPrfl.associatedSnsID();
+    qDebug() << "My social Profile's associated User ID: " << mySocPrfl.associatedUserID();
+    qDebug() << "ProfileURL: " << mySocPrfl.profileURL();
+    qDebug() << "Screen Alias: " << mySocPrfl.screenAlias();
+    qDebug() << "My Social Profile's ID: " << mySocPrfl.profileID();
+
+    dsm2->getAllRelated(myUser);
+    dsm2->getRelatedByService(myUser,mySns);
+
+    return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/main.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,43 @@
+/****************************************************************************
+**
+** Trolltech hereby grants a license to use the Qt/Eclipse Integration
+** plug-in (the software contained herein), in binary form, solely for the
+** purpose of creating code to be used with Trolltech's Qt software.
+**
+** Qt Designer is licensed under the terms of the GNU General Public
+** License versions 2.0 and 3.0 ("GPL License"). Trolltech offers users the
+** right to use certain no GPL licensed software under the terms of its GPL
+** Exception version 1.2 (http://trolltech.com/products/qt/gplexception).
+**
+** THIS SOFTWARE IS PROVIDED BY TROLLTECH AND ITS CONTRIBUTORS (IF ANY) "AS
+** IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+** PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+** OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** Since we now have the GPL exception I think that the "special exception
+** is no longer needed. The license text proposed above (other than the
+** special exception portion of it) is the BSD license and we have added
+** the BSD license as a permissible license under the exception.
+**
+****************************************************************************/
+
+#include <QtCore>
+#include <QCoreApplication>
+#include "smfserver.h"
+
+int main(int argc, char *argv[])
+{
+    QCoreApplication a(argc, argv);
+    
+	SmfServer* server = new SmfServer();
+	server->startServer();
+	
+    return a.exec();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/pluginmgr/pluginmgr.pri	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,10 @@
+INCLUDEPATH += pluginmgr \
+    ./
+
+PUBLIC_HEADERS += \
+	pluginmgr/smfpluginmanager.h \
+	pluginmgr/smfpluginmanagerutil.h
+
+SOURCES += \
+	pluginmgr/smfpluginmanager.cpp \
+	pluginmgr/smfpluginmanagerutil.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/pluginmgr/smfpluginmanager.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,1051 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Plugin Manager class manages the loading and unloading of plug-ins
+ *
+ */
+
+#include <QDir>
+#include <QLibraryInfo>
+#include <QFileSystemWatcher>
+#include <QPluginLoader>
+#include <QList>
+#include <smfpluginbase.h>
+#include <smfpluginutil.h>
+#include <smfprovider.h>
+
+#include "smfpluginmanager.h"
+#include "smfpluginmanagerutil.h"
+#include "smftransportmanagerutil.h"
+
+// Static data initialisation
+SmfPluginManager* SmfPluginManager::m_myInstance = NULL;
+
+
+/**
+ * Method to get the instance of SmfPluginManager class
+ * @param aServer The Smf server instance
+ * @return The instance of SmfPluginManager class
+ */
+SmfPluginManager* SmfPluginManager::getInstance ( SmfServer *aServer)
+	{
+	if(NULL == m_myInstance)
+		m_myInstance = new SmfPluginManager(aServer);
+	return m_myInstance;
+	}
+
+
+/**
+ * Constructor with default argument
+ * @param aServer The Smf server instance
+ */
+SmfPluginManager::SmfPluginManager ( SmfServer *aServer )
+	{
+	// Save the server instance
+	m_server = aServer;
+	
+	m_server->writeLog("Inside SmfPluginManager::SmfPluginManager()");
+	
+	// initialize the file watcher to monitor plugin addition/upgradation/removal
+	initializeFileWatcher ( );
+	
+	// create a database to store the folder structure of the path "c://resource//qt//plugins"
+	initializeSmfPluginDataBase ( );
+	
+	// create teh Plugin Manager utility class instance
+	m_util = new SmfPluginManagerUtil(this);
+	
+	// Get handle to the Transport MAnager utility instance
+	m_transMngrUtil = SmfTransportManagerUtil::getInstance();
+	}
+
+
+/**
+ * Destructor
+ */
+SmfPluginManager::~SmfPluginManager ( )
+	{
+	m_server->writeLog("Inside SmfPluginManager::~SmfPluginManager()");
+	if(m_fileWatcher)
+		delete m_fileWatcher;
+	
+	if(m_tempStruct)
+		delete m_tempStruct;
+	
+	if(m_waitingPluginHash.count() > 0)
+		{
+		foreach(SmfWaitingPluginInfoStruc *str, m_waitingPluginHash.values())
+			delete str;
+		}
+	
+	if(m_util)
+		delete m_util;
+	
+	if(m_pluginDataBase.isOpen())
+		{
+		m_pluginDataBase.close();
+		m_pluginDataBase.removeDatabase("SmfPluginsInfoDatabase");
+		}
+	
+	// unload all loaded plugins
+	unload(m_pluginLoaderHash.keys());
+	
+	if(m_myInstance)
+		delete m_myInstance;
+	}
+
+
+/**
+ * Method called by Smf server to create a web query.
+ * Plugin Manager calls the appropriate web query creation method 
+ * using the aOperation and aInputData parameters. Once the web request 
+ * is ready, it calls the appropriate methods exposed by the Transport 
+ * Manager to send the network request.
+ * @param aSessionID The session ID provided by Smf Server
+ * @param aPluginID The plugin ID that need to perform this operation
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @return SmfPluginManagerResult The result of the operation
+ * @see smfglobal.h
+ */
+SmfPluginManagerResult SmfPluginManager::createRequest ( const quint32& aSessionID, 
+		const QString& aPluginID, 
+		const SmfRequestTypeID& aOperation, 
+		QByteArray& aInputData )
+	{
+	m_server->writeLog("Inside SmfPluginManager::createRequest()");
+	
+	SmfPluginManagerResult result = SmfPluginUnknownError;
+
+	// Load the plugin
+	QObject *plugin = load(aPluginID, result);
+	
+	// Check if plugin is loaded
+	if(plugin && (SmfPluginLoaded == result))
+		{
+		m_server->writeLog("Plugin loaded");
+		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(plugin);
+		
+		if(instance)
+		{
+		// Get the registration token of the plugin
+		QString regToken = instance->getProviderInfo()->smfRegistrationId();
+		QList<QUrl> urlList;
+		SmfPluginRequestData reqData;
+
+		// check if the plugin is authorised (with CSM)
+		if( authorisePlugin(regToken, urlList ))
+			{
+			m_server->writeLog("Plugin authorised");
+			
+			// call the utility method to create plugin specific request
+			m_util->createRequest(plugin, aOperation, aInputData, reqData, result);
+
+			// If the request is created successfully, call the TM method to send the request
+			if( SmfPluginRequestCreated == result )
+				{
+				m_server->writeLog("Plugin request creation successful");
+				m_tempStruct = new SmfWaitingPluginInfoStruc();
+				m_tempStruct->iSessionID = aSessionID;
+				m_tempStruct->iPluginId = aPluginID;
+				m_tempStruct->iInstance = instance;
+				m_tempStruct->iOperation = aOperation;
+				m_tempStruct->iInputData = aInputData;
+				m_tempStruct->iUrlList = urlList;
+			
+				// send the request
+				sendRequest ( reqData, result, urlList );
+				}
+			}
+		
+		else
+			{
+			// plugin not authorised, so unload
+			m_server->writeLog("Plugin not authorised!!!");
+			unload(instance);
+			result = SmfPluginNotAuthorised;
+			}
+		}
+		else
+			{
+			// plugin instance cannot be casted, so unload
+			m_server->writeLog("Plugin instance cannot be casted to SmfPluginBase*!!!");
+			unload(instance);
+			result = SmfPluginLoadError;
+			}
+		}
+
+	else
+		{
+		// plugin not loaded
+		m_server->writeLog("Plugin not loaded!!!");
+		result = SmfPluginLoadError;
+		}
+	
+	return result;
+	}
+
+
+/**
+ * Method called by Transport Manager when network response is available
+ * @param aTransportResult The result of Transport Operation
+ * @param aReply The QNetworkReply instance that requested 
+ * this transaction
+ * @param aResponse The network response data, may be NULL for error
+ */
+void SmfPluginManager::responseAvailable ( 
+		const SmfTransportResult &aTransportResult, 
+		QNetworkReply *aReply,
+		QByteArray *aResponse )
+	{
+	m_server->writeLog("Inside SmfPluginManager::responseAvailable()");
+		
+	// For request success or For request cancellation
+	if((SmfTransportOpNoError == aTransportResult) || 
+			(SmfTransportOpOperationCanceledError == aTransportResult))
+			{
+		m_server->writeLog("no transport error/ cancellation");
+
+			// get the details of the plugin which made this request
+			SmfWaitingPluginInfoStruc* info = m_waitingPluginHash.value(aReply);
+			quint32 sessionId = m_waitingPluginHash.value(aReply)->iSessionID;
+			QString pluginId = m_waitingPluginHash.value(aReply)->iPluginId;
+			SmfRequestTypeID operation = m_waitingPluginHash.value(aReply)->iOperation;
+			QByteArray inputData = m_waitingPluginHash.value(aReply)->iInputData;
+			
+			QVariant result;
+			SmfPluginRetType retType = SmfRequestError;
+			SmfResultPage pageResult;
+			
+			m_server->writeLog("Before m_util->responseAvailable");
+			
+			// call the utility method to send response to appropriate plugins
+			SmfPluginManagerResult retValue = m_util->responseAvailable( info->iInstance, operation, 
+				aTransportResult, aResponse, &result, retType, pageResult );
+			
+			// remove the plugin from the waiting list
+			delete m_waitingPluginHash.value(aReply);
+			m_waitingPluginHash.remove(aReply);
+		
+			QByteArray arr;
+			QDataStream stream(&arr, QIODevice::ReadWrite);
+			if( SmfPluginResponseParsed == retValue )
+				{
+				m_server->writeLog("Parsing successful");
+				
+				// serialize the response to suitable class and pass the data to server
+				serializeResult(operation, &result, stream);
+			
+				////TODO:- send error in enums-by manasij
+				// Send the response data to the server
+				m_server->resultsAvailable(sessionId, &arr, SmfNoError);
+				}
+		
+			// Send the request again
+			else if( SmfPluginSendRequestAgain == retValue )
+				{
+				m_server->writeLog("Send request again");
+				
+				// create the request again (with same paramaters)
+				retValue = createRequest( sessionId, pluginId, operation, inputData );
+				}
+			
+			// Error
+			else
+				{
+				m_server->writeLog("Parsing failed!!");
+				
+				// Error in parsing, sent to server
+				m_server->resultsAvailable(sessionId, &arr, SmfpluginResponseParseFailure);
+				}
+		
+			// delete aReply later, when event loop is re-entered
+			aReply->deleteLater();
+			}
+	
+	// Any other error
+	else
+		{
+		m_server->writeLog("Error in SmfPluginManager::responseAvailable, Transport failure code : ");
+		QString err = QString::number(aTransportResult);
+		m_server->writeLog(err);
+		
+		//Added by manasij, send all kind of errors to the server
+		//TODO:- to be refined by PM owner
+		quint32 sessionId = m_waitingPluginHash.value(aReply)->iSessionID;
+		QByteArray arr;
+		m_server->resultsAvailable(sessionId, &arr, SmftransportInitNetworkNotAvailable);
+		}
+	}
+
+
+/**
+ * Method to cancel the service request
+ * @param aPluginId The plugin whose current operation 
+ * is to be cancelled
+ */
+bool SmfPluginManager::cancelRequest ( const QString& aPluginId )
+	{
+	bool retValue = false;
+	m_server->writeLog("Inside SmfPluginManager::cancelRequest()");
+	
+	// Get the plugin for which cancel is requested
+	foreach(SmfWaitingPluginInfoStruc* iPluginInfo, m_waitingPluginHash.values())
+		{
+		if( 0 == iPluginInfo->iPluginId.compare(aPluginId))
+			{
+			m_server->writeLog("Plugin to be cancelled found in the waiting list");
+			
+			// Notify Transport Manager
+			m_transMngrUtil->cancelRequest(m_waitingPluginHash.key(iPluginInfo));
+			
+			// Notify the plugin that the request has been cancelled
+			SmfPluginRetType retType;
+			SmfResultPage pageResult;
+			SmfPluginError ret = iPluginInfo->iInstance->responseAvailable( SmfTransportOpCancelled, 
+					NULL, NULL, retType, pageResult );
+			
+			// Remove that plugin from the waiting list
+			delete (m_waitingPluginHash.value(m_waitingPluginHash.key(iPluginInfo)));
+			m_waitingPluginHash.remove(m_waitingPluginHash.key(iPluginInfo));
+			
+			if(SmfPluginErrNone == ret)
+				retValue = true;
+			}
+		//else , cancel requested for a plugin which is not loaded, do nothing
+		else
+			{
+			m_server->writeLog("Plugin to be cancelled not found in the waiting list!!! - do nothing");
+			retValue =  false;
+		}
+		}
+	return retValue;
+	}
+
+
+/**
+ * Method called to initialize the file watcher watching the file  
+ * system for adition/upgradation/removal of plugins
+ */
+void SmfPluginManager::initializeFileWatcher ( )
+	{
+	m_server->writeLog("Inside SmfPluginManager::initializeFileWatcher()");
+	
+	// Create the file watcher for the plugins in /Smf folder of the Qt plugin directory
+	m_fileWatcher = new QFileSystemWatcher(this);
+	
+	// Get the directory having the Qt plugin stubs
+	QDir dir(QLibraryInfo::location(QLibraryInfo::PluginsPath));
+	
+	// If Smf folder exists
+	if(dir.cd("smf/plugin"))
+		{
+		// Add each service provider folders to the file watcher
+		foreach(QString folder, dir.entryList(QDir::AllDirs))
+			{
+			dir.cd(folder);
+			m_fileWatcher->addPath(dir.absolutePath());
+			dir.cdUp();
+			}
+		}
+	else
+		m_fileWatcher->addPath(dir.absolutePath());
+	}
+
+
+
+/**
+ * Method called to initialize the database holding the plugin 
+ * directory sructure information. This is called only once when 
+ * the Plugin Manager is instantiated.
+ * This method creates and updates m_pluginIdPathHash member 
+ * of this class
+ */
+bool SmfPluginManager::initializeSmfPluginDataBase ( )
+	{
+	m_server->writeLog("Inside SmfPluginManager::initializeSmfPluginDataBase()");
+	
+	// Find QSQLite driver and create a connection to database
+	m_pluginDataBase.removeDatabase("SmfPluginsInfoDatabase");
+	m_pluginDataBase = QSqlDatabase::addDatabase("QSQLITE");
+	m_pluginDataBase.setDatabaseName("SmfPluginsInfoDatabase");
+	
+	// Open the database
+	bool opened = m_pluginDataBase.open();
+	if(!opened)
+		return false;
+	
+	m_server->writeLog("Database opened");
+	
+	// Create a query to create the DB table for Plugin Manager (if it doesn't exists)
+	QSqlQuery query;
+	bool tableCreated = false;
+
+	tableCreated = query.exec("CREATE TABLE IF NOT EXISTS pluginDetails ("
+			"pluginId TEXT PRIMARY KEY, interfaceName TEXT, serviceProvider TEXT, "
+			"description TEXT, serviceUrl TEXT, authAppId TEXT)");
+
+	// Error - table not created, Plugin Manager might not work properly
+	if(!tableCreated)
+		{
+		m_server->writeLog("Table not created, error = "+query.lastError().text());
+		return false;
+		}
+	
+	m_server->writeLog("Table created");
+	
+	// Get the directory having the Qt plugin stubs
+	QDir dir(QLibraryInfo::location(QLibraryInfo::PluginsPath));
+	
+	// If Smf folder exists
+	if(dir.cd("smf/plugin"))
+		{
+		m_server->writeLog("Smf/plugin folder exists");
+		// Get each interface folders names
+		foreach(QString intfName, dir.entryList(QDir::AllDirs))
+			{
+			dir.cd(intfName);
+			m_server->writeLog("Interface name : "+dir.dirName());
+			
+			// Get each plugin in this folder
+			foreach(QString pluginName, dir.entryList(QDir::Files))
+				{
+				m_server->writeLog("plugins for this Interface : "+pluginName);
+				
+				// load this plugin
+				QPluginLoader pluginLoader(dir.absoluteFilePath(pluginName));
+				QObject *instance = pluginLoader.instance();
+				if (instance)
+					{
+					m_server->writeLog("instance found");
+					SmfPluginBase* plugin = qobject_cast<SmfPluginBase *>(instance);
+				    if (plugin)
+				    	{
+						m_server->writeLog("SmfPluginBase found");
+						plugin->initialize(SmfPluginUtil::getInstance());
+				    
+						// get the plugin id
+						QString id = plugin->getProviderInfo()->pluginId();
+						
+						// get the interface implemented by the plugin
+						QString intfImplemented = dir.dirName();
+						intfImplemented.prepend("org.symbian.smf.plugin.");
+						m_server->writeLog("intfImplemented=");
+						m_server->writeLog(intfImplemented);
+						
+						// get the service provider
+						QString serProv = plugin->getProviderInfo()->serviceName();
+						
+						//get the description
+						QString desc = plugin->getProviderInfo()->description();
+						
+						// get the service URL
+						QString servURL = plugin->getProviderInfo()->serviceUrl().toString();
+						
+						// get the authentication application id
+						QString str;
+						QStringList list;
+						QString authAppId = plugin->getProviderInfo()->authenticationApp(
+								str, list, QIODevice::ReadWrite);
+						
+						// Update m_pluginIdPathHash
+						m_pluginIdPathHash.insert(id, dir.absoluteFilePath(pluginName));
+						
+						QSqlQuery rowInsertQuery;
+						
+						// insert into database
+						bool rowInserted = rowInsertQuery.exec(QString("INSERT INTO pluginDetails VALUES ('%1', "
+								"'%2', '%3', '%4', '%5', '%6')").arg(id).arg(intfImplemented).arg(serProv)
+								.arg(desc).arg(servURL).arg(authAppId));
+						
+						if(rowInserted)
+							m_server->writeLog("This Plugin's information is added to database : "+id+""
+									", "+intfImplemented+", "+serProv);
+						else
+							m_server->writeLog("plugins data not written to database, error = "+query.lastError().text());
+				    	}
+				    else
+				    	{
+						m_server->writeLog("Plugin could not be converted to SmfpluginBase* - returning");
+						
+						// Close the database
+						m_pluginDataBase.close();
+						
+				    	return false;
+				    	}
+				    
+				    pluginLoader.unload();
+					}
+				else
+					{
+					m_server->writeLog("Plugin could not be loaded - returning");
+					
+					// Close the database
+					m_pluginDataBase.close();
+										
+					return false;
+				}
+				}
+			dir.cdUp();
+			}
+		}
+	else
+		m_server->writeLog("No Smf plugins installed!!!");
+	
+	// Close the database
+	m_pluginDataBase.close();
+	
+	return true;
+	}
+
+
+
+/**
+ * Method to load a plugin using its Plugin Id.
+ * @param aPluginId The unique ID of the plugin 
+ * @param aLoadResult [out] Output paramater indicating the result 
+ * of the loading
+ * @return The instance of the loaded plugin if loaded, else NULL
+ */
+QObject* SmfPluginManager::load ( const QString &aPluginId,
+		SmfPluginManagerResult &aLoadResult)
+	{
+	m_server->writeLog("Inside SmfPluginManager::load()");
+	
+	QPluginLoader *pluginLoader;
+	
+	// Find the plugin Path
+	QString pluginPath = m_pluginIdPathHash.value(aPluginId);
+	
+	if(!pluginPath.isEmpty())
+		{
+		// create the plugin loader and load the plugin
+		pluginLoader = new QPluginLoader(pluginPath);
+		SmfPluginBase *plugin = qobject_cast<SmfPluginBase *>(pluginLoader->instance());
+		
+		// If the plugin is loaded
+		if( pluginLoader->isLoaded() && plugin )
+			{
+			// Initialize the plugin
+			plugin->initialize(SmfPluginUtil::getInstance());
+			
+			// update the plugin loader and the loaded plugin lists
+			m_pluginLoaderHash.insertMulti(plugin, pluginLoader);
+			aLoadResult = SmfPluginLoaded;
+			m_server->writeLog("Plugin loaded");
+			}
+		else
+			{
+			m_server->writeLog("Plugin not loaded");
+		
+			// Plugin could not be loaded, error
+			aLoadResult = SmfPluginNotLoaded;
+		}
+		}
+	else
+		{
+		m_server->writeLog("Plugin not found");
+		
+		// plugin not found in hash
+		aLoadResult = SmfPluginNotFound;
+		}
+	
+	return pluginLoader->instance();
+	}
+
+
+/**
+ * Method to unload a loaded plugin. Returns true if success, else 
+ * returns false.
+ * @param aPlugin The plugin instance to be unloaded
+ * @return Returns true if success, else returns false
+ */
+bool SmfPluginManager::unload ( SmfPluginBase *aPlugin )
+	{
+	m_server->writeLog("Inside SmfPluginManager::unload()");
+	
+	// Get all the loaders for this plugin
+	QList<QPluginLoader*> loaderList = m_pluginLoaderHash.values(aPlugin);
+	bool unloaded = false;
+
+	foreach(QPluginLoader *loader, loaderList)
+		{
+		// for each loader unload the plugin
+		unloaded = loader->unload();
+		
+		// delete the instance of the loader
+		delete loader;
+		loader = NULL;
+		}
+	
+	// Remove the plugin and its associated loaders from the Hash
+	m_pluginLoaderHash.remove(aPlugin);
+	return unloaded;
+	}
+
+
+/**
+ * Method to unload the list of loaded plugins. Returns true if all are 
+ * success, else returns false if any one fails.
+ * @param aPluginList The list of instances for all plugins that are 
+ * to be unloaded
+ * @return Returns true if all are success, else returns false if any 
+ * one fails.
+ */
+bool SmfPluginManager::unload ( const QList<SmfPluginBase *> &aPluginList)
+	{
+	m_server->writeLog("Inside SmfPluginManager::unload() - overloaded fn");
+	//unload all the required plugins
+	bool unloaded = true;
+	
+	foreach(SmfPluginBase *plugin, aPluginList)
+		{
+		// unload individual plugins in the list
+		bool ret = unload(plugin);
+		
+		// indicate error if any one of the plugin failed to unload
+		if(!ret)
+			unloaded = ret;
+		}
+	return unloaded;
+	}
+
+
+/**
+ * Method that calls the Transport Manager Utility class method to 
+ * send the request created by the plugins over the network
+ * @param aReqData The request data created by the plugin
+ * @param aResult [out] The output parameter indicating the result 
+ * of this method
+ * @param aUrlList The list of accessible Urls for this plugin
+ * @see smfglobal.h
+ */
+void SmfPluginManager::sendRequest ( SmfPluginRequestData &aReqData, 
+		SmfPluginManagerResult &aResult,
+		const QList<QUrl> &aUrlList )
+	{
+	m_server->writeLog("Inside SmfPluginManager::sendRequest()");
+	
+	QNetworkReply* reply;
+	bool sopCompliant = false;
+	
+	// Check the type of Http operation to be performed
+	switch(aReqData.iHttpOperationType)
+		{
+		// Http HEAD
+		case QNetworkAccessManager::HeadOperation:
+			reply = m_transMngrUtil->head(aReqData.iNetworkRequest, aUrlList, sopCompliant);
+			break;
+		
+		// Http GET
+		case QNetworkAccessManager::GetOperation:
+			reply = m_transMngrUtil->get(aReqData.iNetworkRequest, aUrlList, sopCompliant);
+			break;
+			
+		// Http PUT	
+		case QNetworkAccessManager::PutOperation:
+			reply = m_transMngrUtil->put(aReqData.iNetworkRequest, aReqData.iPostData->buffer(), aUrlList, sopCompliant);
+			break;
+			
+		// Http POST
+		case QNetworkAccessManager::PostOperation:
+			reply = m_transMngrUtil->post(aReqData.iNetworkRequest, aReqData.iPostData->buffer(), aUrlList, sopCompliant);
+			break;
+			
+		// Http DELETE
+		case QNetworkAccessManager::DeleteOperation:
+			reply = m_transMngrUtil->deleteResource(aReqData.iNetworkRequest, aUrlList, sopCompliant);
+			break;
+			
+		default:
+			aResult = SmfPluginUnknownService;
+			return;
+		}
+	
+	if( sopCompliant )
+		{
+		if( reply )
+			{
+			// SOP compliant, sending successful
+			m_waitingPluginHash.insert(reply, m_tempStruct);
+			m_tempStruct = NULL;
+			aResult = SmfPluginNoError;
+			
+			m_server->writeLog("No error, request sent");
+			
+			}
+		// reply is NULL, sending failed
+		else
+			{
+			m_server->writeLog("QNEtrworkReply returned error - not sent");
+			aResult = SmfPluginRequestSendingFailed;
+		}
+		}
+	
+	// SOP violation
+	else
+		{
+		m_server->writeLog("SOP checking failed");
+		aResult = SmfPluginSOPCheckFailed;
+	}
+	}
+
+
+/**
+ * Method that checks if a plugin is authorised to make a request. 
+ * This method communicates with Credential and Settings Manager 
+ * through Smf server, giving the registration token and getting 
+ * the valid url list if available for this plugin.
+ * @param aRegToken The registration token given by the plugin
+ * @param aUrlList [out] The list of Urls that the plugin can send 
+ * request to (to be filled by CSM)
+ * @return Returns true if plugin is authorised, else returns false.
+ */
+bool SmfPluginManager::authorisePlugin( const QString &aRegToken, 
+		QList<QUrl> &aUrlList )
+	{
+	Q_UNUSED(aRegToken)
+	m_server->writeLog("Inside SmfPluginManager::authorisePlugin()");
+	
+#ifdef CSM_INTEGRATED
+// Get the valid URL list from CSM, giving the reg token
+	if(m_server->authorisePlugin(aRegToken, aUrlList))
+		return true;
+	else
+		return false;
+	
+#else
+// CSM STUBBING - start
+	QUrl url1 ("http://www.example.com");
+	QUrl url2 ("http://api.facebook.com");
+	QUrl url3 ("http://api.flickr.com");
+
+	aUrlList.append(url1);
+	aUrlList.append(url2);
+	aUrlList.append(url3);
+
+	return true;
+// CSM STUBBING - end
+#endif
+
+	}
+
+
+/**
+ * Method to serialize the result of parsing (which is done by the 
+ * plugins) to QByteArray to be sent to Smf server.
+ * @param aOperation The type of operation to be performed
+ * @param aResult The data to be serialized
+ * @param aDataStream Stream to be written
+ */
+void SmfPluginManager::serializeResult ( 
+		const SmfRequestTypeID &aOperation, 
+		QVariant* aResult,
+		QDataStream &aDataStream )
+	{
+	m_server->writeLog("Inside SmfPluginManager::serializeResult()");
+	
+	// Call the utlity class method to serialize the result
+	m_util->serializeResult(aOperation, aResult, aDataStream);
+	}
+
+
+/**
+ * Method for the directoryChanged signal of QFileSystemWatcher.
+ * This will update the iPluginHash member and also the Plugin 
+ * Information List.
+ * @param aPath The path of the directory that has changed
+ */
+void SmfPluginManager::directoryChanged ( const QString &aPath )
+	{
+	m_server->writeLog("Inside SmfPluginManager::directoryChanged()");
+	
+	// Create a QDir instance with the given path
+	QDir dir(aPath);
+	QString pluginId;
+	QString oldpluginId;
+	QString interfaceName;
+	QString serviceProv;
+	QString authAppId;
+
+	// Get all the files in the directory at a specified path(sorted)
+	QStringList newPlugins = dir.entryList(QDir::Files, QDir::Name);
+	QStringList::const_iterator newListIterator = newPlugins.constBegin();
+	
+	// Get all plugins who were in this path, before this directory was changed
+	QStringList availablePlugins = m_pluginIdPathHash.keys(aPath);
+	availablePlugins.sort();
+	QStringList::const_iterator oldListIterator = availablePlugins.constBegin();
+	
+	// Open the database
+	bool opened = m_pluginDataBase.open();
+	if(!opened)
+		;//return;
+	
+	// If plugin is changed
+	if( newPlugins.count() == availablePlugins.count() )
+		{
+		// Check for equality
+		while( newListIterator != newPlugins.constEnd() )
+			{
+			if( *newListIterator == *oldListIterator )
+				{
+				newListIterator++;
+				oldListIterator++;
+				}
+			else
+				break;
+			}
+		// replace *oldListIterator with *newListIterator
+		QHash<QString, QString>::iterator i = m_pluginIdPathHash.find(*oldListIterator);
+		m_pluginIdPathHash.insert(*newListIterator, i.value());
+		m_pluginIdPathHash.remove(*oldListIterator);
+		
+		// Also update database with *newListIterator
+	    QSqlQuery updateQuery;
+	    
+	    bool updated = updateQuery.exec(QString("UPDATE pluginDetails SET pluginId = '%1' "
+	    		"WHERE pluginId = '%2'").arg(*newListIterator).arg(*oldListIterator));
+	    if (!updated)
+	    	m_server->writeLog("Database table not updated, error = "+updateQuery.lastError().text());
+		
+		
+		// Get the new and old plugin Ids
+		pluginId = *newListIterator;
+		oldpluginId = *oldListIterator;
+		
+		// Load the plugin and get its service provider name
+		SmfPluginManagerResult result;
+		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(load(pluginId, result));
+		
+		if(instance && (SmfPluginLoaded == result))
+			{
+			instance->initialize(SmfPluginUtil::getInstance());
+			serviceProv = instance->getProviderInfo()->serviceName();
+			interfaceName = dir.dirName();
+			}
+		
+		unload(instance);
+		// Inform server that plugin has been changed
+#ifdef CSM_INTEGRATED
+		//Remove after Server Integration
+		m_server->pluginChanged(oldPluginId, newPluginId, interfaceName, serviceProv);
+#endif
+		}
+		
+	// If plugin is added
+	else if(newPlugins.count() > availablePlugins.count())
+		{
+		// Check for equality
+		while( oldListIterator != availablePlugins.constEnd() )
+			{
+			if( *newListIterator == *oldListIterator )
+				{
+				newListIterator++;
+				oldListIterator++;
+				}
+			else
+				break;
+			}
+		// replace *oldListIterator with *newListIterator
+		m_pluginIdPathHash.insert(*newListIterator, aPath);
+		
+		// Get the plugin Id
+		pluginId = *newListIterator;
+		
+		// Load the plugin and get its service provider name
+		SmfPluginManagerResult result;
+		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(load(pluginId, result));
+		
+		if(instance && (SmfPluginLoaded == result))
+			{
+			instance->initialize(SmfPluginUtil::getInstance());
+			serviceProv = instance->getProviderInfo()->serviceName();
+			interfaceName = dir.dirName();
+			interfaceName.prepend("org.symbian.smf.plugin.");
+			QString prgm;
+			QStringList list;
+			authAppId = instance->getProviderInfo()->authenticationApp(prgm, list, QIODevice::ReadWrite);
+			}
+		
+		unload(instance);
+		
+		// Also add to the database the value newListIterator and aPath
+		QSqlQuery insertRowQuery;
+		bool rowInserted = insertRowQuery.exec(QString("INSERT INTO pluginDetails VALUES "
+				"('%1', '%2', '%3', '%4')").arg(pluginId).arg(interfaceName).arg(serviceProv).arg(authAppId));
+
+		 // Error
+		if (!rowInserted)
+			m_server->writeLog("Database table not inserted, error = "+insertRowQuery.lastError().text());
+		
+		// Inform server that plugin has been added
+#ifdef CSM_INTEGRATED
+		//Remove after Server Integration
+		m_server->pluginAdded(pluginId, interfaceName, serviceProv);
+#endif
+		}
+	
+	// If plugin is removed
+	else //for newPlugins.count() < availablePlugins.count()
+		{
+		// Check for equality
+		while( newListIterator != newPlugins.constEnd() )
+			{
+			if( *newListIterator == *oldListIterator )
+				{
+				newListIterator++;
+				oldListIterator++;
+				}
+			else
+				break;
+			}
+		// remove *oldListIterator
+		m_pluginIdPathHash.remove(*oldListIterator);
+		
+		// Also remove oldListIterator from the database
+		QSqlQuery deleteRowQuery;
+		bool rowDeleted = deleteRowQuery.exec(QString("DELETE FROM pluginDetails WHERE pluginId = '%1'")
+				.arg(*oldListIterator));
+		 
+		// Error
+		if (!rowDeleted)
+			m_server->writeLog("Database table row not deleted, error = "+deleteRowQuery.lastError().text());
+		
+		// Get the plugin Id
+		pluginId = *oldListIterator;
+		
+		// Load the plugin and get its service provider name
+		SmfPluginManagerResult result;
+		SmfPluginBase* instance = qobject_cast<SmfPluginBase *>(load(pluginId, result));
+		
+		if(instance && (SmfPluginLoaded == result))
+			{
+			instance->initialize(SmfPluginUtil::getInstance());
+			serviceProv = instance->getProviderInfo()->serviceName();
+			interfaceName = dir.dirName();
+			}
+		
+		unload(instance);
+		// Inform server that plugin has removed
+#ifdef CSM_INTEGRATED
+		//Remove after Server Integration
+		m_server->pluginRemoved(pluginId, interfaceName, serviceProv);
+#endif
+		}
+	// Close the database
+	m_pluginDataBase.close();
+	}
+
+
+/**
+ * Method to get the list of the SmfProvider for all the plugins that implement 
+ * the mentioned Interface 
+ * @param aInterface The interface for which list of plugins is required 
+ * @param aMap The map of pluginID and its corresponding SmfProvider
+ */
+void SmfPluginManager::getPlugins(const QString& aInterface, QMap<QString,SmfProvider>& aMap)
+	{
+	m_server->writeLog("Inside SmfPluginManager::getPlugins()");
+	
+	// Open the database
+	bool opened = m_pluginDataBase.open();
+	if(!opened)
+		{
+		m_server->writeLog("Data base not opened, exiting getplugins()");
+		return;
+		}
+	
+	m_server->writeLog("Data base opened");
+	
+	// Query the database for all pluginIDs that implement the given interface
+	QSqlQuery query(QString("SELECT pluginId, interfaceName, serviceProvider, description, "
+			"serviceUrl FROM pluginDetails where interfaceName = '%1'").arg(aInterface));
+	
+	if (query.next())
+		{
+		m_server->writeLog("Query is success");
+
+		SmfProvider prov;
+		
+		// get the pluginId
+		QString pluginId = query.value(0).toString();
+		
+		// get the service type / interface name
+		QStringList servicetypes;
+		servicetypes.insert(0, query.value(1).toString());
+		prov.serviceTypes(servicetypes);
+		
+		// Get the serv provider
+		QString servName = query.value(2).toString();
+		prov.serviceName(servName);
+		
+		// Get the description
+		QString desc = query.value(3).toString();
+		prov.description(desc);
+		
+		// Get the service URL
+		QUrl url(query.value(4).toString());
+	prov.serviceUrl(url);
+
+		aMap.insert(pluginId, prov);
+		}
+	else
+		m_server->writeLog("Data base query->next() returned false, error = "+query.lastError().text());
+	
+	// Close the database
+	m_pluginDataBase.close();
+	}
+
+
+/**
+ * Method to get the pluginID for the mentioned interface and service provider 
+ * @param aInterface The interface implemented by the plugin
+ * @param aProv The plugin's service provider
+ * @param aPluginId The required pluginID
+ */
+void SmfPluginManager::getPluginId(const QString& aInterface, const SmfProvider& aProv, QString& aPluginId)
+	{
+	m_server->writeLog("SmfPluginManager::getPluginId");
+	
+	// Open the database
+	bool opened = m_pluginDataBase.open();
+	if(!opened)
+		{
+		m_server->writeLog("Data base not opened, exiting");
+		return;
+		}
+	
+	m_server->writeLog("Data base opened");
+
+	// Query the database for a pluginID with given interface name and service provider
+	QSqlQuery query(QString("SELECT pluginId FROM pluginDetails where interfaceName = '%1' AND "
+			"serviceProvider = '%2'").arg(aInterface).arg(aProv.serviceName()));
+	
+	if (query.next())
+		{
+		m_server->writeLog("Query is success");
+		
+		// get the pluginId
+		aPluginId = query.value(0).toString();
+		}
+	else
+		m_server->writeLog("Data base query->next() returned false, error = "+query.lastError().text());
+	
+	m_server->writeLog("returned pluginID = "+aPluginId);
+	
+	// Close the database
+	m_pluginDataBase.close();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/pluginmgr/smfpluginmanager.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,320 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Plugin Manager class manages the loading and unloading of plug-ins
+ *
+ */
+
+#ifndef SMFPLUGINMANAGER_H_
+#define SMFPLUGINMANAGER_H_
+
+#include <QtSql>
+#include <smfglobal.h>
+#include <smfserverglobal.h>
+#include "smfserver.h"
+
+// Forward declaration
+class SmfPluginManagerUtil;
+class SmfTransportManagerUtil;
+class QFileSystemWatcher;
+class QPluginLoader;
+class SmfPluginBase;
+class SmfProvider;
+
+/**
+ * Structure that holds information about a plugin that is awaiting a 
+ * response from Transport Manager
+ */
+struct SmfWaitingPluginInfoStruc
+	{
+	/**
+	 * The server session ID for this request
+	 */
+	quint32 iSessionID;
+	/**
+	 * The plugin Id who creates this request
+	 */
+	QString iPluginId;
+	
+	/**
+	 * The instance of the loaded plugin
+	 */
+	SmfPluginBase *iInstance;
+	
+	/**
+	 * The type of operation requested by the plugin
+	 * @see smfglobal.h
+	 */
+	SmfRequestTypeID iOperation;
+	
+	/**
+	 * The input data for this request (if request need to be send again)
+	 */
+	QByteArray iInputData;
+	
+	/**
+	 * The list of valid Urls accessible for this plugin
+	 */
+	QList<QUrl> iUrlList;
+
+	};
+
+
+/**
+ * The Plugin Manager class manages the loading and unloading of plug-ins
+ */
+class SmfPluginManager : public QObject
+	{
+	Q_OBJECT
+	
+public:
+	/**
+	 * Method to get the instance of SmfPluginManager class
+	 * @param aServer The Smf server instance
+	 * @return The instance of SmfPluginManager class
+	 */
+	static SmfPluginManager* getInstance ( SmfServer *aServer = NULL );
+	
+	/**
+	 * Debugging only
+	 */
+	SmfServer* server ( ) { return m_server; }
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPluginManager ( );
+	
+public:
+	/**
+	 * Method called by Smf server to create a web query.
+	 * Plugin Manager calls the appropriate web query creation method 
+	 * using the aOperation and aInputData parameters. Once the web request 
+	 * is ready, it calls the appropriate methods exposed by the Transport 
+	 * Manager to send the network request.
+	 * @param aSessionID The session ID provided by Smf Server
+	 * @param aPluginID The plugin ID that need to perform this operation
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @return SmfPluginManagerResult The result of the operation
+	 * @see smfglobal.h
+	 */
+	SmfPluginManagerResult createRequest ( const quint32& aSessionID, 
+			const QString& aPluginID, 
+			const SmfRequestTypeID& aOperation, 
+			QByteArray& aInputData );
+	
+	/**
+	 * Method called by Transport Manager when network response 
+	 * is available
+	 * @param aTransportResult The result of Transport Operation
+	 * @param aReply The QNetworkReply instance that requested 
+	 * this transaction
+	 * @param aResponse The network response data
+	 */
+	void responseAvailable ( const SmfTransportResult &aTransportResult, 
+			QNetworkReply *aReply,
+			QByteArray *aResponse );
+	
+	/**
+	 * Method to cancel the service request
+	 * @param aPluginId The plugin whose current operation 
+	 * is to be cancelled
+	 */
+	bool cancelRequest ( const QString& aPluginId );
+	
+	/**
+	 * Method to get the list of the SmfProvider for all the plugins that implement 
+	 * the mentioned Interface 
+	 * @param aInterface The interface for which list of plugins is required 
+	 * @param aMap The map of pluginID and its corresponding SmfProvider
+	 */
+	void getPlugins ( const QString& aInterface, 
+			QMap<QString,SmfProvider>& aMap );
+	
+	/**
+	 * Method to get the pluginID for the mentioned interface and service provider 
+	 * @param aInterface The interface implemented by the plugin
+	 * @param aProv The plugin's service provider
+	 * @param aPluginId The required pluginID
+	 */
+	void getPluginId ( const QString& aInterface, 
+			const SmfProvider& aProv, QString& aPluginId );
+	
+private:
+	/**
+	 * Method called to initialize the file watcher watching the file  
+	 * system for adition/upgradation/removal of plugins
+	 */
+	void initializeFileWatcher ( );
+	
+	/**
+	 * Method called to initialize the database holding the plugin 
+	 * directory sructure information. This is called only once when 
+	 * the Plugin Manager is instantiated.
+	 * This method creates and updates iPluginIdPathHash member 
+	 * of this class
+	 * @return Retuns true if success else false
+	 */
+	bool initializeSmfPluginDataBase ( );
+	
+	/**
+	 * Method to load a plugin using its Plugin Id.
+	 * @param aPluginId The unique ID of the plugin 
+	 * @param aLoadResult [out] Output paramater indicating the result 
+	 * of the loading
+	 * @return The instance of the loaded plugin if loaded, else NULL
+	 */
+	QObject* load ( const QString &aPluginId, 
+			SmfPluginManagerResult &aLoadResult);
+	
+	/**
+	 * Method to unload a loaded plugin. Returns true if success, else 
+	 * returns false.
+	 * @param aPlugin The plugin instance to be unloaded
+	 * @return Returns true if success, else returns false
+	 */
+	bool unload ( SmfPluginBase *aPlugin ); 
+	
+	/**
+	 * Method to unload the list of loaded plugins. Returns true if all are 
+	 * success, else returns false if any one fails.
+	 * @param aPluginList The list of instances for all plugins that are 
+	 * to be unloaded
+	 * @return Returns true if all are success, else returns false if any 
+	 * one fails.
+	 */
+	bool unload ( const QList<SmfPluginBase*> &aPluginList);
+	
+	/**
+	 * Method that calls the Transport Manager Utility class method to 
+	 * send the request created by the plugins over the network
+	 * @param aReqData The request data created by the plugin
+	 * @param aResult [out] The output parameter indicating the result 
+	 * of this method
+	 * @param aUrlList The list of accessible Urls for this plugin
+	 * @see smfglobal.h
+	 */
+	void sendRequest ( SmfPluginRequestData &aReqData, 
+			SmfPluginManagerResult &aResult,
+			const QList<QUrl> &aUrlList );
+	
+	/**
+	 * Method that checks if a plugin is authorised to make a request. 
+	 * This method communicates with Credential and Settings Manager 
+	 * through Smf server, giving the registration token and getting 
+	 * the valid url list if available for this plugin.
+	 * @param aRegToken The registration token given by the plugin
+	 * @param aUrlList [out] The list of Urls that the plugin can send 
+	 * request to (to be filled by CSM)
+	 * @return Returns true if plugin is authorised, else returns false.
+	 */
+	bool authorisePlugin( const QString &aRegToken, 
+			QList<QUrl> &aUrlList );
+	
+	/**
+	 * Method to serialize the result of parsing (which is done by the 
+	 * plugins) to QByteArray to be sent to Smf server.
+	 * @param aOperation The type of operation to be performed
+	 * @param aResult The data to be serialized
+	 * @param aDataStream Stream to be written
+	 */
+	void serializeResult ( const SmfRequestTypeID &aOperation, 
+			QVariant* aResult,
+			QDataStream &aDataStream );
+	
+private slots:
+	/**
+	 * Method for the directoryChanged signal of QFileSystemWatcher.
+	 * This will update the iPluginHash member and also the Plugin 
+	 * Information List.
+	 * @param aPath The path of the directory that has changed
+	 */
+	void directoryChanged ( const QString &aPath );
+
+private:
+	/**
+	 * Constructor with default argument
+	 * @param aServer The Smf server instance
+	 */
+	SmfPluginManager ( SmfServer *aServer );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfPluginManager ( const SmfPluginManager &aOther );
+	
+private:
+	/**
+	 * The single instance of SmfPluginManager
+	 */
+	static SmfPluginManager* m_myInstance;
+	
+	/**
+	 * Member variable that maps the plugin instances to their 
+	 * respective QPluginLoader instances (loaders may be multiple)
+	 */
+	QHash<SmfPluginBase*, QPluginLoader*> m_pluginLoaderHash;
+	
+	/**
+	 * Member variable that watches the file system for 
+	 * addition/upgradation/removal of plugins 
+	 */
+	QFileSystemWatcher *m_fileWatcher;
+	
+	/**
+	 * Member variable that is an instance of a structure that 
+	 * holds a loaded plugin information 
+	 */
+	SmfWaitingPluginInfoStruc *m_tempStruct;
+	
+	/**
+	 * Member variable that maps a QNetworkReply instance to 
+	 * its corresponding loaded plugin information structure  
+	 */
+	QHash<QNetworkReply*, SmfWaitingPluginInfoStruc*> m_waitingPluginHash;
+	
+	/**
+	 * Member variable that maps a pluginId to its path
+	 */
+	QHash<QString, QString> m_pluginIdPathHash;
+	
+	/**
+	 * Member variable that holds the instance of 
+	 * SmfServer class
+	 */
+	SmfServer *m_server;
+	
+	/**
+	 * Member variable that holds the instance of 
+	 * SmfTransportManagerUtil class
+	 */
+	SmfTransportManagerUtil *m_transMngrUtil;
+
+	/**
+	 * Member variable that holds the instance of 
+	 * SmfPluginManagerUtil class. SmfPluginManager is a friend of SmfPluginManagerUtil.
+	 */
+	SmfPluginManagerUtil *m_util;
+
+	/**
+	 * Member variable that holds QSqlDatabase instance.
+	 */
+	QSqlDatabase m_pluginDataBase;
+	
+	};
+
+#endif /* SMFPLUGINMANAGER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/pluginmgr/smfpluginmanagerutil.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,1178 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Plugin Manager util class performs all plugin functional 
+ * specific functionalities
+ *
+ */
+
+// plugin interfaces
+#include <smfcontactfetcherplugin.h>
+#include <smfpostproviderplugin.h>
+#include <smflyricsserviceplugin.h>
+#include <smfmusiceventsplugin.h>
+#include <smfmusicsearchplugin.h>
+#include <smfmusicserviceplugin.h>
+#include <smfplaylistserviceplugin.h>
+#include <smfgalleryplugin.h>
+#include <smfprovider.h>
+
+#include "smfpluginmanagerutil.h"
+#include "smfpluginmanager.h"
+
+// Static data initialisation
+SmfPluginManagerUtil* SmfPluginManagerUtil::m_myInstance = NULL;
+
+
+/**
+ * Method to get the instance of SmfPluginManagerUtil class
+ * @param aParent The parent object
+ * @return The instance of SmfPluginManagerUtil class
+ */
+SmfPluginManagerUtil* SmfPluginManagerUtil::getInstance ( QObject *aParent )
+	{
+	if(NULL == m_myInstance)
+		m_myInstance = new SmfPluginManagerUtil( aParent );
+	return m_myInstance;
+	}
+
+
+/**
+ * Constructor with default argument
+ * @param aParent The parent object
+ */
+SmfPluginManagerUtil::SmfPluginManagerUtil ( QObject */*aParent*/ )
+	{
+	}
+
+
+/**
+ * Destructor
+ */
+SmfPluginManagerUtil::~SmfPluginManagerUtil ( )
+	{
+	if(m_myInstance)
+		delete m_myInstance;
+	}
+
+
+/**
+ * Method called by Plugin Manager to create a web query.
+ * This method calls the respective plugin methods for creation of 
+ * web queries using the aOperation and aInputData parameters.
+ * @param aInstance Instance of the loaded plugin that perform this operation
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @see smfglobal.h
+ */
+void SmfPluginManagerUtil::createRequest ( QObject* aInstance, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createRequest");
+	SmfPluginError pluginErrorVal;
+	
+	// Find the type of service required
+	switch(aOperation)
+		{
+		case SmfContactGetFriends:
+		case SmfContactGetFollowers:
+		case SmfContactSearch:
+		case SmfContactSearchNear:
+		case SmfContactGetGroups:
+		case SmfContactSearchInGroup:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createContactFetcherRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+			
+		case SmfContactRetrievePosts:
+		case SmfContactPost:
+		case SmfContactUpdatePost:
+		case SmfContactPostDirected:
+		case SmfContactCommentOnAPost:
+		case SmfContactPostAppearence:
+		case SmfContactSharePost:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createContactPostRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+			
+		case SmfMusicGetLyrics:
+		case SmfMusicGetSubtitle:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createMusicLyricsRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+	
+		case SmfMusicGetEventsOnLoc:
+		case SmfMusicGetVenueOnLoc:
+		case SmfMusicGetEventsOnVenue:
+		case SmfMusicPostEvents:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createMusicEventsRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+			
+		case SmfMusicGetRecommendations:
+		case SmfMusicGetTracks:
+		case SmfMusicGetTrackInfo:
+		case SmfMusicGetStores:
+		case SmfMusicPostCurrentPlaying:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createMusicSearchRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+			
+		case SmfMusicGetUserInfo:
+		case SmfMusicSearchUser:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createMusicServiceRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+			
+		case SmfMusicGetPlaylists:
+		case SmfMusicGetPlaylistsOfUser:
+		case SmfMusicAddToPlaylist:
+		case SmfMusicPostCurrentPlayingPlaylist:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createMusicPlaylistRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+			
+		case SmfPictureGetPictures:
+		case SmfPictureDescription:
+		case SmfPictureUpload:
+		case SmfPictureMultiUpload:
+		case SmfPicturePostComment:
+			// Authorise the plugin and call create request methods
+			pluginErrorVal = createGalleryRequest(aInstance, aOperation, 
+					aInputData, aReqData, aResult);
+			break;
+			
+		default:
+			SmfPluginManager::getInstance()->server()->writeLog("Unknown service type!!!");
+			aResult = SmfPluginUnknownService;
+		}
+	if(SmfPluginErrNone == pluginErrorVal)
+		aResult = SmfPluginRequestCreated;
+	else
+		aResult = SmfPluginRequestCreationFailed;
+	}
+
+
+/**
+ * Method to create a web query to fetch contact details.
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createContactFetcherRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createContactFetcherRequest");
+	
+	// typecast instance to the contact - fetcher type, here SmfContactFetcherPlugin
+	SmfContactFetcherPlugin *plugin = qobject_cast<SmfContactFetcherPlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		int pageNum, itemPerPage;
+
+		switch(aOperation)
+			{
+			case SmfContactGetFriends:
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->friends(aReqData, pageNum, itemPerPage);
+				break;
+				
+			case SmfContactGetFollowers:
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->followers(aReqData, pageNum, itemPerPage);
+				break;
+				
+			case SmfContactSearch:
+				{
+				SmfContact searchContact;
+				stream>>searchContact;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->search(aReqData, searchContact, pageNum, itemPerPage);
+				break;
+				}
+				
+			case SmfContactSearchNear:
+				{
+				SmfLocation location;
+				int i;
+				stream>>i;
+				SmfLocationSearchBoundary proximity = (SmfLocationSearchBoundary)i;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->searchNear(aReqData, location, proximity, pageNum, itemPerPage);
+				break;
+				}
+				
+			case SmfContactGetGroups:
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->groups(aReqData, pageNum, itemPerPage);
+				break;
+				
+			case SmfContactSearchInGroup:
+				{
+				SmfGroup group;
+				stream>>group;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->searchInGroup(aReqData, group, pageNum, itemPerPage);
+				break;
+				}
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+	
+
+/**
+ * Method to create a web query to do post operation on contacts 
+ * (like scraps or messages)
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createContactPostRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createContactPostRequest");
+	
+	// typecast instance to SmfPostProviderPlugin
+	SmfPostProviderPlugin *plugin = qobject_cast<SmfPostProviderPlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;	
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		SmfContact contact;
+		SmfPost post;
+		SmfLocation location;
+		int pageNum, itemPerPage;
+	
+		switch(aOperation)
+			{
+			case SmfContactRetrievePosts:
+				stream>>contact;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->retrieve(aReqData, &contact, pageNum, itemPerPage);
+				break;
+				
+			case SmfContactPost:
+				stream>>post;
+				stream>>location;
+				pluginErrorVal = plugin->post(aReqData, post, location);
+				break;
+				
+			case SmfContactUpdatePost:
+				stream>>post;
+				pluginErrorVal = plugin->updatePost(aReqData, post);
+				break;
+				
+			case SmfContactPostDirected:
+				stream>>post;
+				stream>>contact;
+				stream>>location;
+				pluginErrorVal = plugin->postDirected(aReqData, post, contact, &location);
+				break;
+				
+			case SmfContactCommentOnAPost:
+				{
+				SmfPost post2;
+				stream>>post;
+				stream>>post2;
+				stream>>location;
+				pluginErrorVal = plugin->commentOnAPost(aReqData, post, post2, &location);
+				break;
+				}
+				
+			case SmfContactPostAppearence:
+				{
+				QString status;
+				int i;
+				stream>>i;
+				SmfPresenceInfo presence = (SmfPresenceInfo)i;
+				stream>>status;
+				pluginErrorVal = plugin->postAppearence(aReqData, presence, status);
+				break;
+				}
+				
+			case SmfContactSharePost:
+				{
+				bool edited;
+				stream>>post;
+				stream>>contact;
+				stream>>edited;
+				pluginErrorVal = plugin->sharePost(aReqData, post, contact, edited);
+				break;
+				}
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+	
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+	
+
+
+/**
+ * Method to create a web query to do music lyrics or subtitle search
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicLyricsRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicLyricsRequest");
+	
+	// typecast instance to SmfLyricsServicePlugin
+	SmfLyricsServicePlugin *plugin = qobject_cast<SmfLyricsServicePlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		SmfTrackInfo trackInfo;
+		int pageNum, itemPerPage;
+
+		switch(aOperation)
+			{
+			case SmfMusicGetLyrics:
+				stream>>trackInfo;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->lyrics(aReqData, trackInfo, pageNum, itemPerPage);
+				break;
+				
+			case SmfMusicGetSubtitle:
+				{
+				stream>>trackInfo;
+				int i;
+				stream>>i;
+				SmfSubtitleSearchFilter filter = (SmfSubtitleSearchFilter)i;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->subtitles(aReqData, trackInfo, filter, pageNum, itemPerPage);
+				break;
+				}
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+
+
+/**
+ * Method to create a web query to do music event search or event post operation 
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicEventsRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicEventsRequest");
+	
+	// typecast instance to SmfMusicEventsPlugin
+	SmfMusicEventsPlugin *plugin = qobject_cast<SmfMusicEventsPlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		int pageNum, itemPerPage;
+		QtMobility::QGeoPositionInfo location;
+
+		switch(aOperation)
+			{
+			case SmfMusicGetEventsOnLoc:
+				stream>>location;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->events(aReqData, location, pageNum, itemPerPage);
+				break;
+				
+			case SmfMusicGetVenueOnLoc:
+				stream>>location;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->venues(aReqData, location, pageNum, itemPerPage);
+				break;
+				
+			case SmfMusicGetEventsOnVenue:
+				{
+				SmfLocation venue;
+				stream>>venue;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->events(aReqData, venue, pageNum, itemPerPage);
+				break;
+				}
+				
+			case SmfMusicPostEvents:
+				{
+				QList<SmfEvent> list;
+				stream>>list;
+				pluginErrorVal = plugin->postEvents(aReqData, list);
+				break;
+				}
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+	
+
+
+/**
+ * Method to create a web query to do music search operation 
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicSearchRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicSearchRequest");
+	
+	// typecast instance to SmfMusicSearchPlugin
+	SmfMusicSearchPlugin *plugin = qobject_cast<SmfMusicSearchPlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		int pageNum, itemPerPage;
+		SmfTrackInfo trackInfo;
+
+		switch(aOperation)
+			{
+			case SmfMusicGetRecommendations:
+				stream>>trackInfo;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->recommendations(aReqData, trackInfo, pageNum, itemPerPage);
+				break;
+				
+			case SmfMusicGetTracks:
+				stream>>trackInfo;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->tracks(aReqData, trackInfo, pageNum, itemPerPage);
+				break;
+				
+			case SmfMusicGetTrackInfo:
+				{
+				SmfMusicFingerPrint fp;
+				stream>>fp;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->trackInfo(aReqData, fp, pageNum, itemPerPage);
+				break;
+				}
+				
+			case SmfMusicGetStores:
+				stream>>trackInfo;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->stores(aReqData, trackInfo, pageNum, itemPerPage);
+				break;
+				
+			case SmfMusicPostCurrentPlaying:
+				stream>>trackInfo;
+				pluginErrorVal = plugin->postCurrentPlaying(aReqData, trackInfo);
+				break;
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+	
+
+/**
+ * Method to create a web query to do music service request operation 
+ * like getting self profile or search profiles of other users
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicServiceRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicServiceRequest");
+	
+	// typecast instance to SmfMusicServicePlugin
+	SmfMusicServicePlugin *plugin = qobject_cast<SmfMusicServicePlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		int pageNum, itemPerPage;
+
+		switch(aOperation)
+			{
+			case SmfMusicGetUserInfo:
+				pluginErrorVal = plugin->userInfo(aReqData);
+				break;
+				
+			case SmfMusicSearchUser:
+				{
+				SmfLocation place;
+				stream>>place;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->searchUser(aReqData, place, pageNum, itemPerPage);
+				break;
+				}
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+	
+
+
+/**
+ * Method to create a web query to do music playlist related operation
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createMusicPlaylistRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createMusicPlaylistRequest");
+	
+	// typecast instance to SmfPlaylistServicePlugin
+	SmfPlaylistServicePlugin *plugin = qobject_cast<SmfPlaylistServicePlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		int pageNum, itemPerPage;
+		SmfPlaylist playlist;
+
+		switch(aOperation)
+			{
+			case SmfMusicGetPlaylists:
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->playlists(aReqData, pageNum, itemPerPage);
+				break;
+				
+			case SmfMusicGetPlaylistsOfUser:
+				{
+				SmfMusicProfile user;
+				stream>>user;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->playlistsOf(aReqData, user, pageNum, itemPerPage);
+				break;
+				}
+				
+			case SmfMusicAddToPlaylist:
+				{
+				QList<SmfTrackInfo> list;
+				stream>>playlist;
+				stream>>list;
+				pluginErrorVal = plugin->addToPlaylist(aReqData, playlist, list);
+				break;
+				}
+				
+			case SmfMusicPostCurrentPlayingPlaylist:
+				stream>>playlist;
+				pluginErrorVal = plugin->postCurrentPlayingPlaylist(aReqData, playlist);
+				break;
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+	
+
+/**
+ * Method to create a web query to do gallery related operation
+ * @param aPlugin The instance of the loaded plugin that performs the 
+ * contact fetch operation.
+ * @param aOperation The type of operation to be performed
+ * @param aInputData The data required to create the web query
+ * @param aReqData [out] The request data created by the plugin
+ * @param aResult [out] SmfPluginManagerResult, The result of the operation
+ * @return SmfPluginError
+ * @see smfglobal.h
+ */
+SmfPluginError SmfPluginManagerUtil::createGalleryRequest ( QObject *aPlugin, 
+		const SmfRequestTypeID &aOperation, 
+		QByteArray &aInputData,
+		SmfPluginRequestData &aReqData,
+		SmfPluginManagerResult &aResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::createGalleryRequest");
+	
+	// typecast instance to SmfGalleryPlugin
+	SmfGalleryPlugin *plugin = qobject_cast<SmfGalleryPlugin *>(aPlugin);
+	SmfPluginError pluginErrorVal;
+	
+	if(plugin)
+		{
+		QDataStream stream(aInputData);
+		SmfPicture picture;
+		
+		switch(aOperation)
+			{
+			case SmfPictureGetPictures:
+				{
+				int pageNum, itemPerPage;
+				stream>>pageNum;
+				stream>>itemPerPage;
+				pluginErrorVal = plugin->pictures(aReqData, pageNum, itemPerPage);
+				break;
+				}
+				
+			case SmfPictureDescription:
+				stream>>picture;
+				pluginErrorVal = plugin->description(aReqData, picture);
+				break;
+				
+			case SmfPictureUpload:
+				stream>>picture;
+				pluginErrorVal = plugin->upload(aReqData, picture);
+				break;
+				
+			case SmfPictureMultiUpload:
+				{
+				QList<SmfPicture> list;
+				stream>>list;
+				pluginErrorVal = plugin->upload(aReqData, list);
+				break;
+				}
+				
+			case SmfPicturePostComment:
+				{
+				SmfComment comment;
+				stream>>picture;
+				stream>>comment;
+				pluginErrorVal = plugin->postComment(aReqData, picture, comment);
+				break;
+				}
+				
+			default:
+				// do nothing, unknown service
+				aResult = SmfPluginUnknownService;
+				SmfPluginManager::getInstance()->server()->writeLog("No API found for this operation type!!!");
+				return SmfPluginErrInvalidRequest;
+			}
+
+			if(SmfPluginErrNone == pluginErrorVal)
+				aResult = SmfPluginRequestCreated;
+			else
+				aResult = SmfPluginServiceError;
+		}
+		else
+			aResult = SmfPluginLoadError;
+	
+	return pluginErrorVal;
+	}
+	
+	
+/**
+ * Method called by Plugin Manager when network response is available
+ * @param aInstance The instance of the loaded plugin that requested 
+ * the network operation.
+ * @param aOperation The type of operation to be performed
+ * @param aTransportResult The result of Transport Operation
+ * @param aResponse The network response data
+ * @param aResult [out] An output parameter to the plugin manager 
+ * containing the data parsed by the plugins
+ * @param aRetType [out] The Plugin return value
+ * @param aPageResult [out] The page information filled by the plugins
+ * @return SmfPluginManagerResult, The result of the operation
+ * @see smfglobal.h
+ */	
+SmfPluginManagerResult SmfPluginManagerUtil::responseAvailable ( 
+		SmfPluginBase *aInstance,
+		const SmfRequestTypeID &aOperation,
+		const SmfTransportResult &aTransportResult, 
+		QByteArray *aResponse,
+		QVariant *aResult,
+		SmfPluginRetType &aRetType,
+		SmfResultPage &aPageResult )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::responseAvailable");
+	
+	SmfPluginError pluginRet;
+	SmfPluginManagerResult result = SmfPluginUnknownError;
+
+	switch(aOperation)
+		{
+		case SmfContactGetFriends:
+		case SmfContactGetFollowers:
+		case SmfContactSearch:
+		case SmfContactSearchNear:
+		case SmfContactGetGroups:
+		case SmfContactSearchInGroup:
+		case SmfContactRetrievePosts:
+		case SmfContactPost:
+		case SmfContactUpdatePost:
+		case SmfContactPostDirected:
+		case SmfContactCommentOnAPost:
+		case SmfContactPostAppearence:
+		case SmfContactSharePost:
+		case SmfMusicGetLyrics:
+		case SmfMusicGetSubtitle:
+		case SmfMusicGetEventsOnLoc:
+		case SmfMusicGetVenueOnLoc:
+		case SmfMusicGetEventsOnVenue:
+		case SmfMusicPostEvents:
+		case SmfMusicGetRecommendations:
+		case SmfMusicGetTracks:
+		case SmfMusicGetTrackInfo:
+		case SmfMusicGetStores:
+		case SmfMusicPostCurrentPlaying:
+		case SmfMusicGetUserInfo:
+		case SmfMusicSearchUser:
+		case SmfMusicGetPlaylists:
+		case SmfMusicGetPlaylistsOfUser:
+		case SmfMusicAddToPlaylist:
+		case SmfMusicPostCurrentPlayingPlaylist:
+		case SmfPictureGetPictures:
+		case SmfPictureDescription:
+		case SmfPictureUpload:
+		case SmfPictureMultiUpload:
+		case SmfPicturePostComment:
+			{
+			pluginRet = aInstance->responseAvailable(aTransportResult, aResponse, 
+					aResult, aRetType, aPageResult );
+			
+			// When plugin returns no error
+			if( SmfPluginErrNone == pluginRet )
+				{
+				// Request is complete, parsed data available with aResult
+				if( SmfRequestComplete == aRetType )
+					result =  SmfPluginResponseParsed;
+				
+				// Send the request again
+				else if(SmfSendRequestAgain == aRetType )
+					result = SmfPluginSendRequestAgain;
+				else
+					result = SmfPluginResponseParseFailure;
+				}
+			// Parsing failed
+			else
+				result =  SmfPluginResponseParseFailure;
+			
+			break;
+			}
+			
+		default:
+			// Unknown service, saved data in Plugin manager is corrupted
+			SmfPluginManager::getInstance()->server()->writeLog("No operation type found!!!");
+		}
+	
+	return result;
+	}
+
+
+/**
+ * Method to serialize the result of parsing (which is done by the 
+ * plugins) to QByteArray to be sent to Smf server.
+ * @param aOperation The type of operation to be performed
+ * @param aResult The data to be serialized
+ * @param aDataStream Stream to be written
+ */
+void SmfPluginManagerUtil::serializeResult ( 
+		const SmfRequestTypeID &aOperation, 
+		QVariant* aResult,
+		QDataStream &aDataStream )
+	{
+	SmfPluginManager::getInstance()->server()->writeLog("SmfPluginManagerUtil::serializeResult");
+	switch(aOperation)
+		{
+		// FOR CONTACT - FETCHER
+		case SmfContactGetFriends:
+		case SmfContactGetFollowers:
+		case SmfContactSearch:
+		case SmfContactSearchNear:
+		case SmfContactSearchInGroup:
+			{
+			QList<SmfContact> contactList;
+			if( aResult->canConvert<SmfContactList>() )
+				contactList = aResult->value<SmfContactList>();
+			aDataStream<<contactList;
+			break;
+			}
+
+		case SmfContactGetGroups:
+			{
+			QList<SmfGroup> groupList;
+			if( aResult->canConvert<SmfGroupList>() )
+				groupList = aResult->value<SmfGroupList>();
+			aDataStream<<groupList;
+
+			break;
+			}
+			
+		// FOR CONTACT - POSTS
+		case SmfContactRetrievePosts:
+			{
+			SmfPluginManager::getInstance()->server()->writeLog("Serialize - retrieveposts() result");
+			
+			QList<SmfPost> postList;
+			if( aResult->canConvert<SmfPostList>() )
+				postList = aResult->value<SmfPostList>();
+			aDataStream<<postList;
+			break;
+			}
+			
+		case SmfContactPost:
+		case SmfContactUpdatePost:
+		case SmfContactPostDirected:
+		case SmfContactCommentOnAPost:
+		case SmfContactPostAppearence:
+		case SmfContactSharePost:
+			{
+			bool value;
+			if( QVariant::Bool == aResult->type() )
+				value = aResult->toBool();
+			aDataStream<<value;
+			break;
+			}
+			
+		// FOR MUSIC - LYRICS SERVICE
+		case SmfMusicGetLyrics:
+			{
+			QList<SmfLyrics> lyricsList;
+			if( aResult->canConvert<SmfLyricsList>() )
+				lyricsList = aResult->value<SmfLyricsList>();
+			aDataStream<<lyricsList;
+
+			break;
+			}
+
+		case SmfMusicGetSubtitle:
+			{
+			QList<SmfSubtitle> subtitleList;
+			if( aResult->canConvert<SmfSubtitleList>() )
+				subtitleList = aResult->value<SmfSubtitleList>();
+			aDataStream<<subtitleList;
+
+			break;
+			}
+
+		// FOR MUSIC - EVENTS
+		case SmfMusicGetEventsOnLoc:
+		case SmfMusicGetEventsOnVenue:
+			{
+			QList<SmfEvent> eventList;
+			if( aResult->canConvert<SmfEventList>() )
+				eventList = aResult->value<SmfEventList>();
+			aDataStream<<eventList;
+
+			break;
+			}
+			
+		case SmfMusicGetVenueOnLoc:
+			{
+			QList<SmfLocation> venueList;
+			if( aResult->canConvert<SmfLocationList>() )
+				venueList = aResult->value<SmfLocationList>();
+			aDataStream<<venueList;
+			break;
+			}
+		
+		case SmfMusicPostEvents:
+			{
+			bool value;
+			if( QVariant::Bool == aResult->type() )
+				value = aResult->toBool();
+			aDataStream<<value;
+			break;
+			}
+
+		// FOR MUSIC - SEARCH
+		case SmfMusicGetRecommendations:
+		case SmfMusicGetTracks:
+		case SmfMusicGetTrackInfo:
+			{
+			QList<SmfTrackInfo> trackList;
+			if( aResult->canConvert<SmfTrackInfoList>() )
+				trackList = aResult->value<SmfTrackInfoList>();
+			aDataStream<<trackList;
+
+			break;
+			}
+			
+		case SmfMusicGetStores:
+			{
+			QList<SmfProvider> storeList;
+			if( aResult->canConvert<SmfProviderList>() )
+				storeList = aResult->value<SmfProviderList>();
+			aDataStream<<storeList;
+			break;
+			}
+			
+		case SmfMusicPostCurrentPlaying:
+			{
+			bool value;
+			if( QVariant::Bool == aResult->type() )
+				value = aResult->toBool();
+			aDataStream<<value;
+			break;
+			}
+		
+
+		// FOR MUSIC - SERVICE
+		case SmfMusicGetUserInfo:
+			{
+			SmfMusicProfile user;
+			if(aResult->canConvert<SmfMusicProfile>())
+				user = aResult->value<SmfMusicProfile>();
+			aDataStream<<user;
+			break;
+			}
+			
+		case SmfMusicSearchUser:
+			{
+			QList<SmfMusicProfile> userList;
+			if( aResult->canConvert<SmfMusicProfileList>() )
+				userList = aResult->value<SmfMusicProfileList>();
+			aDataStream<<userList;
+			break;
+			}
+	 
+			// FOR MUSIC - PLAYLIST SERVICE
+		case SmfMusicGetPlaylists:
+		case SmfMusicGetPlaylistsOfUser:
+			{
+			QList<SmfPlaylist> playlists;
+			if( aResult->canConvert<SmfPlaylistList>() )
+				playlists = aResult->value<SmfPlaylistList>();
+			aDataStream<<playlists;
+			break;
+			}
+			
+		case SmfMusicAddToPlaylist:
+		case SmfMusicPostCurrentPlayingPlaylist:
+			{
+			bool value;
+			if( QVariant::Bool == aResult->type() )
+				value = aResult->toBool();
+			aDataStream<<value;
+			break;
+			}
+				 
+			// FOR PICTURES - GALLERY SERVICES
+		case SmfPictureGetPictures:
+			{
+			QList<SmfPicture> picList;
+			if( aResult->canConvert<SmfPictureList>() )
+				picList = aResult->value<SmfPictureList>();
+			aDataStream<<picList;
+			break;
+			}
+			
+		case SmfPictureDescription:
+			{
+			QString str;
+			if( QVariant::String == aResult->type() )
+				str = aResult->toString();
+			aDataStream<<str;
+			break;
+			}
+			
+		case SmfPictureUpload:
+		case SmfPictureMultiUpload:
+		case SmfPicturePostComment:
+			{
+			bool value;
+			if( QVariant::Bool == aResult->type() )
+				value = aResult->toBool();
+			aDataStream<<value;
+			break;
+			}
+			
+		default:
+			// Unknown service, saved data in Plugin manager is corrupted
+			SmfPluginManager::getInstance()->server()->writeLog("No operation type found!!!");
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/pluginmgr/smfpluginmanagerutil.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,260 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Plugin Manager util class performs all plugin functional 
+ * specific functionalities
+ *
+ */
+
+#ifndef SMFPLUGINMANAGERUTIL_H_
+#define SMFPLUGINMANAGERUTIL_H_
+
+#include <smfpluginbase.h>
+#include <smfserverglobal.h>
+
+// Forward declaration
+class SmfPluginManager;
+
+/**
+ * The Plugin Manager util class performs all plugin functional 
+ * specific functionalities
+ */
+class SmfPluginManagerUtil : public QObject
+	{
+	Q_OBJECT
+	
+public:
+	/**
+	 * Method to get the instance of SmfPluginManagerUtil class
+	 * @param aParent The parent object
+	 * @return The instance of SmfPluginManagerUtil class
+	 */
+	static SmfPluginManagerUtil* getInstance ( QObject *aParent = 0 );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfPluginManagerUtil ( );
+	
+private:
+	/**
+	 * Constructor with default argument
+	 * @param aParent The parent object
+	 */
+	SmfPluginManagerUtil ( QObject *aParent = 0 );
+	
+private:
+	/**
+	 * Method called by Plugin Manager to create a web query.
+	 * This method calls the respective plugin methods for creation of 
+	 * web queries using the aOperation and aInputData parameters.
+	 * @param aInstance Instance of the loaded plugin that perform this operation
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @see smfglobal.h
+	 */
+	void createRequest ( QObject* aInstance, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+
+	/**
+	 * Method to create a web query to fetch contact details.
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createContactFetcherRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+	
+	/**
+	 * Method to create a web query to do post operation on contacts 
+	 * (like scraps or messages)
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createContactPostRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+
+	/**
+	 * Method to create a web query to do music lyrics or subtitle search
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createMusicLyricsRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+
+
+	/**
+	 * Method to create a web query to do music event search or event post operation 
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createMusicEventsRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+
+	/**
+	 * Method to create a web query to do music search operation 
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createMusicSearchRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+
+
+	/**
+	 * Method to create a web query to do music service request operation 
+	 * like getting self profile or search profiles of other users
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createMusicServiceRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+
+
+	/**
+	 * Method to create a web query to do music playlist related operation
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createMusicPlaylistRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+
+	/**
+	 * Method to create a web query to do gallery related operation
+	 * @param aPlugin The instance of the loaded plugin that performs the 
+	 * contact fetch operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aInputData The data required to create the web query
+	 * @param aReqData [out] The request data created by the plugin
+	 * @param aResult [out] SmfPluginManagerResult, The result of the operation
+	 * @return SmfPluginError
+	 * @see smfglobal.h
+	 */
+	SmfPluginError createGalleryRequest ( QObject *aPlugin, 
+			const SmfRequestTypeID &aOperation, 
+			QByteArray &aInputData,
+			SmfPluginRequestData &aReqData,
+			SmfPluginManagerResult &aResult );
+	
+	/**
+	 * Method called by Plugin Manager when network response is available
+	 * @param aInstance The instance of the loaded plugin that requested 
+	 * the network operation.
+	 * @param aOperation The type of operation to be performed
+	 * @param aTransportResult The result of Transport Operation
+	 * @param aResponse The network response data
+	 * @param aResult [out] An output parameter to the plugin manager 
+	 * containing the data parsed by the plugins
+	 * @param aRetType [out] The Plugin return value
+	 * @param aPageResult [out] The page information filled by the plugins
+	 * @return SmfPluginManagerResult, The result of the operation
+	 * @see smfglobal.h
+	 */
+	SmfPluginManagerResult responseAvailable ( SmfPluginBase *aInstance,
+			const SmfRequestTypeID &aOperation,
+			const SmfTransportResult &aTransportResult, 
+			QByteArray *aResponse,
+			QVariant *aResult,
+			SmfPluginRetType &aRetType,
+			SmfResultPage &aPageResult );
+	
+	/**
+	 * Method to serialize the result of parsing (which is done by the 
+	 * plugins) to QByteArray to be sent to Smf server.
+	 * @param aOperation The type of operation to be performed
+	 * @param aResult The data to be serialized
+	 * @param aDataStream Stream to be written
+	 */
+	void serializeResult ( const SmfRequestTypeID &aOperation, 
+			QVariant* aResult,
+			QDataStream &aDataStream );
+
+	friend class SmfPluginManager;
+	
+private:
+	/**
+	 * The single instance of SmfPluginManagerUtil
+	 */
+	static SmfPluginManagerUtil* m_myInstance;
+	
+	};
+
+#endif /* SMFPLUGINMANAGERUTIL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/server/server.pri	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,13 @@
+INCLUDEPATH += server \
+    ./
+
+PUBLIC_HEADERS += \
+	server/smfserver.h 
+
+PRIVATE_HEADERS += \
+	server/smfserverqt_p.h \
+	server/smfserversymbian_p.h 
+
+SOURCES += \
+	server/smfserver.cpp \
+	server/smfserversymbian.cpp 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/server/smfserver.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,385 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ */
+
+#include "smfserver.h"
+#include "smfpluginmanager.h"
+#include "smftransportmanager.h"
+#include "smfclientglobal.h"
+#include <smfprovider.h>
+#include <smfpost.h>
+#include <smflocation.h>
+#include <smfcontact.h>
+#include <smfpicture.h>
+#include <smfcomment.h>
+//#ifdef NO_OTHER_MODULES
+#include <QImage>
+#include <QUrl>
+#include <smfgroup.h>
+#include <QTextStream>
+#include <QFile>
+//#endif
+#ifdef Q_OS_SYMBIAN
+#include "smfserversymbian_p.h"
+#else
+#include "smfserverqt_p.h"
+#endif
+
+SmfServer::SmfServer(QObject* parent): QObject(parent)
+	{
+	}
+bool SmfServer::startServer()
+	{
+	bool success = false;
+	//Initialize all the component handles
+	writeLog("Not doing SmfTransportManager::getInstance");
+	//m_transportManager = SmfTransportManager::getInstance();
+	writeLog("Not doing m_transportManager->initializeTransport");
+	//checking the network status, no need to proceed if not permitted
+	//SmfTransportInitializeResult networkStatus = m_transportManager->initializeTransport();
+	writeLog("Before networkStatus");
+	//TODO:-check this
+	if(1/*networkStatus == SmfTransportInitNoError*/)
+		{
+		writeLog("Before m_pluginManager construction");
+		m_pluginManager = SmfPluginManager::getInstance(this);
+		writeLog("After m_pluginManager construction");
+		//	m_dataStoreManager = new SmfDataStoreManager();
+		//Initialize private implementation
+		#ifdef Q_OS_SYMBIAN
+		TRAPD(err, m_SmfServerPrivate = SmfServerSymbian::NewL(CActive::EPriorityStandard,this));
+		QString log("SmfServer::startServer=");
+		int errorQ = err ;
+		log += errorQ;
+		 writeLog(log);
+		if( KErrNone != err )
+			{
+			return success;
+			}
+		TInt error = m_SmfServerPrivate->Start( KSmfServerName );
+		errorQ = error ;
+		log.clear();
+		log = QString("m_SmfServerPrivate->Start=");
+		log += QString::number(error);
+		 writeLog(log);
+		if( KErrNone == error ) 
+			{
+			success = true;
+			}
+		else 
+			{
+			//error
+			return success;
+			}
+		#else
+		m_SmfServerPrivate = new SmfServerQt();
+		success = m_SmfServerPrivate->start();
+		if (!success) 
+			{
+			return success;
+			}
+		#endif
+		//request CM server for auth expiry info, note:- we should resend the request everytime we get expiry
+		//notification
+		//TODO:- Do it after CM implementation
+		//CMclient->requestAuthExpiryNotify();
+		//connect(CMClient,SIGNAL(authExpiryNotify(NotificationType,SmfPluginID),this,SLOT(NotificationType,SmfPluginID));
+		}
+    return success;
+	}
+//Note:- Almost all the following APIs are called by private impl via the handle
+/**
+ * This called first once a session is created by the private impl
+ * @param clientID some unique client process ID, SID for symbian platform
+ * TODO:-How to get the pid for rest of the platforms?
+ * @return true if client is already athorized, else false
+ * 
+ */
+bool SmfServer::isClientAuthorized(SmfClientAuthID clientID)
+	{
+	//TODO:- once CM is complete do it properly
+	Q_UNUSED(clientID);
+	return true;
+	}
+/**
+ * This API is called by the private impl when isClientAuthorized returns false
+ * @param clientID client Id (SID for symbian platform), provided by the private impl
+ * Note:- The session(and in turn the client) will be blocked untill authorization completes.
+ */
+void SmfServer::authorizeClient(SmfClientAuthID clientID)
+	{
+	//TODO:- once CM is complete, do it properly
+	//CMclient->authorizeClient(clientID)
+	//connect(CMClient,SIGNAL(clientAuthorizationFinished(bool,SmfClientAuthID)),this,SLOT(clientAuthorizationFinished(bool,SmfClientAuthID)));
+	Q_UNUSED(clientID);	
+	}
+/**
+ * This API is called by the private impl when client is authorized
+ * @param interfaceID Interface id, provided by the private impl (it gets it from client)
+ * @param pluginIDMap Map of plugins who implement this interface and corresponding provider,
+ * this is returned to the private impl
+ * It calls PM to get the list. Note:- PM may return SmfProviderBase which is superset of SmfProvider.
+ * TODO:- session should store this map for future ref?
+ */
+void SmfServer::getPlugins(SmfInterfaceID interfaceID, QMap<SmfPluginID,SmfProvider>& pluginIDMap)
+	{
+	pluginIDMap.clear();
+	m_pluginManager->getPlugins(interfaceID,pluginIDMap);
+	}
+
+SmfPluginID SmfServer::getPlugin(SmfInterfaceID interfaceID,SmfProvider provider)
+	{
+	//TODO:- do it properly as per PM implementation
+	//return PM->getplugin(interfaceID,provider);
+	//TODO:- PM is not yet ready
+	SmfPluginID id;
+	m_pluginManager->getPluginId(interfaceID,provider, id);
+	return id;
+	//testing purpose only
+	}
+/**
+ * This API is called by the private impl to get a list of authorized plugins from CM
+ * @param list List of plugins to be filtered
+ * @param authList List of authorised plugins filled by CM
+ * this is returned to the private impl
+ * It calls CMclient to get the list synchronously
+ * TODO:- session should store this for future ref?
+ */
+void SmfServer::getAuthorizedPlugins(QList<SmfPluginID>& list,QList<SmfPluginID>& authList)
+	{
+	//TODO:- do it properly as per CMclient implementation
+	//CMclient->getAuthorizedPlugins(list,authList);
+	//testing purpose only
+#ifdef NO_OTHER_MODULES
+	authList = list;
+#endif
+	}
+/**
+ * This API is called by the private impl to request the PM to do the actual request/parsing asynchronously
+ * Note:- the sever private impl (SmfServerSymbian for symbian platform) maintains a map of session ptr and some randomely
+ * generated number.For the time being we are allowing only one outstanding request per session, so no need to store
+ * both session and msg ptr, but in future we may need to.
+ * @param requestID Request id (corresponds to the key of the mapmaintained by SmfServerSymbian).
+ * @param pluginID PluginID, provided by the session
+ * @param interfaceID InterfaceID provided by session
+ * @requestTypeID Request Opcode, provided by session
+ */
+void SmfServer::getRequestedData(int requestID,SmfPluginID pluginID,SmfInterfaceID interfaceID, SmfRequestTypeID requestTypeID,QByteArray dataForPlugin)
+	{
+		//TODO:- cross check the params with PM owner
+		//PM->getData(requestID,pluginID,interfaceID,requestTypeID);
+		m_SmfServerPrivate->writeLog("SmfServer::getRequestedData");
+		m_SmfServerPrivate->writeLog(QString::number(requestID));
+		m_SmfServerPrivate->writeLog(pluginID);
+		m_SmfServerPrivate->writeLog(interfaceID);
+		m_SmfServerPrivate->writeLog(QString::number(requestTypeID));
+		bool defaultCase = false;
+		//serializedInfo contains base provider info+ other data depending on requestTypeID
+		QDataStream reader(&dataForPlugin,QIODevice::ReadOnly);
+		QByteArray dataTobeSent;
+		switch(requestTypeID)
+			{
+			case SmfContactPost:
+				{
+				SmfProvider provider;
+				SmfPost post;
+				SmfLocation loc;
+				reader>>provider;
+				reader>>post;
+				reader>>loc;
+				//now form the serialized bytearray with only SmfPost and SmfPlace
+				QDataStream writer(&dataTobeSent,QIODevice::WriteOnly);
+				writer<<post;
+				writer<<loc;
+				}
+				break;
+			case SmfContactUpdatePost:
+				{
+				SmfProvider provider;
+				SmfPost post;
+				reader>>provider;
+				reader>>post;
+				//now form the serialized bytearray with only SmfPost
+				QDataStream writer(&dataTobeSent,QIODevice::WriteOnly);
+				writer<<post;
+				}
+				break;
+			case SmfContactPostDirected:
+				{
+				SmfProvider provider;
+				SmfPost post;
+				SmfContact contact;
+				SmfLocation place;
+				reader>>provider;
+				reader>>post;
+				reader>>contact;
+				reader>>place;
+				QDataStream writer(&dataTobeSent,QIODevice::WriteOnly);
+				writer<<post;
+				writer<<contact;
+				writer<<place;
+				}
+				break;
+			case SmfContactSharePost:
+				{
+				SmfProvider provider;
+				SmfPost post;
+				SmfContact contact;
+				bool edited;
+				reader>>provider;
+				reader>>post;
+				reader>>contact;
+				reader>>edited;
+				//now form the serialized bytearray with only SmfPost
+				QDataStream writer(&dataTobeSent,QIODevice::WriteOnly);
+				writer<<post;
+				writer<<contact;
+				writer<<edited;
+				}
+				break;
+			case SmfPictureDescription:
+			case SmfPictureUpload:
+				{
+				SmfProvider provider;
+				SmfPicture picture;
+				reader>>provider;
+				reader>>picture;
+				//now form the serialized bytearray with only SmfPicture
+				QDataStream writer(&dataTobeSent,QIODevice::WriteOnly);
+				writer<<picture;
+				}
+				break;
+			case SmfPictureMultiUpload:
+				{
+				SmfProvider provider;
+				SmfPictureList pictureList;
+				reader>>provider;
+				reader>>pictureList;
+				//now form the serialized bytearray with only SmfPicture
+				QDataStream writer(&dataTobeSent,QIODevice::WriteOnly);
+				writer<<pictureList;
+				}
+				break;
+			case SmfPicturePostComment:
+				{
+				SmfProvider provider;
+				SmfPicture picture;
+				SmfComment comment;
+				reader>>provider;
+				reader>>picture;
+				reader>>comment;
+				//now form the serialized bytearray with only SmfPicture
+				QDataStream writer(&dataTobeSent,QIODevice::WriteOnly);
+				writer<<picture;
+				writer<<comment;
+				}
+				break;
+			default:
+				defaultCase = true;
+				break;
+			}
+		//When xtra info to be sent to plugin manager
+		if(!defaultCase)
+			{
+				m_pluginManager->createRequest(requestID,pluginID,requestTypeID,dataTobeSent);
+			}
+		//when plugin manager needs to xtra info
+		else
+			{
+			QByteArray arr;
+			m_pluginManager->createRequest(requestID,pluginID,requestTypeID,arr);
+			}
+	}
+/**
+ * This slot is invoked when CM finishes the authorization of the client.
+ * @param authID As it contains the session ptr, sever directly invokes the session's API to notify success
+ */
+void SmfServer::clientAuthorizationFinished(bool success,SmfClientAuthID authID )
+	{
+	//TODO:- implement this api in session class
+	//note:- in case success is false client completes the request with SmfErrClientAuthFailed
+	//TODO:- define set of smf wide error after consulting with other module owners
+	authID.session->clientathorizationFinished(success);
+	}
+/**
+ * This API is called by PM once its done with request and parsing
+ * @param requestID The request id which is completed
+ * @param parsedData Serialized data(as per request type) filled by PM
+ * @param error Error occured
+ * TODO:- should use smf wide global errors instead
+ */
+void SmfServer::resultsAvailable(int requestID,QByteArray* parsedData,SmfError error)
+	{
+	m_SmfServerPrivate->writeLog("SmfServer::resultsAvailable");
+	m_SmfServerPrivate->writeLog("requestID=");
+	m_SmfServerPrivate->writeLog(QString::number(requestID));
+	m_SmfServerPrivate->writeLog("parsedData->size()=");
+	m_SmfServerPrivate->writeLog(QString::number(parsedData->size()));
+	m_SmfServerPrivate->writeLog("Error=");
+	m_SmfServerPrivate->writeLog(QString::number(error));
+	//Serialize error followed by actual data
+	QByteArray dataWithError;
+	QDataStream writer(&dataWithError,QIODevice::WriteOnly);
+	writer<<error;
+	writer<<*(parsedData);
+	//find out the appropriate session and request id and service that
+	m_SmfServerPrivate->findAndServiceclient(requestID,&dataWithError,error);
+	}
+/**
+ * Seems reduntant in symbian as client is served with RMessage2::Complete()
+ */
+void SmfServer::serviceClient(QByteArray* parsedData)
+	{
+	Q_UNUSED(parsedData);
+	}
+/**
+ * Used by PM to get a list of tokens
+ * TODO:- cross check the params
+ */
+void SmfServer::getAuthenticationKeys(int pluginID,QStringList& keys,QStringList& urls)
+	{
+	//SMF-CM communication will be via CM client
+	//TODO:- do it properly as per CM client impl
+	//CMclient->getKeys(pluginID,keys,urls);
+	Q_UNUSED(pluginID);
+	Q_UNUSED(keys);
+	Q_UNUSED(urls);
+	}
+
+/**
+ * This is called when CMclient notifies client expiry.
+ * @param type notification type, set of enums for future expansion
+ * @param id Plugin Id for which the authentication has expired
+ */
+void SmfServer::authenticationKeysExpired(NotificationType type,SmfPluginID id)
+	{
+	//resend the notify request
+	//CMclient->requestAuthExpiryNotify();
+	Q_UNUSED(type);
+	Q_UNUSED(id);
+	}
+
+void SmfServer::writeLog(QString log) const
+	{
+#ifdef WRITE_LOG
+	QFile file("c:\\data\\SmfServerLogs.txt");
+    if (!file.open(QIODevice::Append | QIODevice::Text))
+	         ;
+    QTextStream out(&file);
+    out << log << "\n";
+    file.close();
+#else
+    Q_UNUSED(log);
+#endif
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/server/smfserver.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,237 @@
+/**
+* Copyright (c) 2010 Sasken Communication Technologies Ltd.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "{License}"
+* which accompanies  this distribution, and is available
+* at the URL "{LicenseUrl}".
+*
+* Initial Contributors:
+* Manasij Roy, Sasken Communication Technologies Ltd - Initial contribution
+*
+* Contributors:
+*
+* Description:
+* SMF Server component which handles the client requests and delegates them propoerly to the appropriate component
+*
+*/
+
+#ifndef SMFSERVER_H
+#define SMFSERVER_H
+#include <QObject>
+#include<QMap>
+//SMF wide global const and macros, to be shared among SMF components as well as SMF aware apps
+#include "smfglobal.h"
+#include "smfprovider.h"
+#include "smftransportmanager.h" // Transport Manager
+/*
+* Forward declarations
+* Other components of the SMF
+*/
+class SmfTransportManager;
+class SmfPluginManager;
+class SmfDataStoreManager;
+class SmfSettingsAuthManager;
+class SmfClient;
+
+//For the time being, need to change later
+typedef QString SmfInterfaceID;
+//For the time being, need to change later
+typedef QString SmfPluginID;
+//TODO:- define proper enums after consulting with CM owner
+typedef int NotificationType;
+//Private implementation for different platforms
+#ifdef Q_OS_SYMBIAN
+class SmfServerSymbian;
+class SmfServerSymbianSession;
+#else
+class SmfServerQt;
+class SmfServerQtSession;
+#endif
+#include "smfcontact.h"
+#ifdef NO_OTHER_MODULES
+#include <QTimer>
+#include <QTextStream>
+#endif
+/**
+ * SmfServer manages the client requests and delegates them to the appropriate SMF component,
+ * service the clients asymchronously
+ *
+ */
+class SmfServer : public QObject
+{
+  Q_OBJECT
+
+public:
+
+  SmfServer(QObject* parent = 0);
+  
+  /**
+   * Does the following,-
+   *First it'll check whether server is already running, if already running it'll
+   *simply return
+   *else
+   *it'll start the server exe and initialize all other SMF components
+   *returns whether server is started successfully or not  
+   */
+  bool startServer();
+  
+  ~SmfServer(){}
+
+public:
+  /*
+   * Request the Credential and Settings manager to check whether client has
+   * been authorized previously.
+   * SmfClientAuthID may be same as SID of the client which can be retrieved
+   * if using Symbian Client-Server private implementation. Not supported for
+   * other platforms
+   */
+  bool isClientAuthorized(SmfClientAuthID clientID);
+  
+  /*
+   * In case the client is yet to be authorized, it starts the authorization
+   * process by triggering Credential Manager.
+   * The SLOT clientAuthorizationFinished is called once its done.
+   * SmfClientAuthID may be same as SID of the client which can be retrieved
+   * if using Symbian Client-Server private implementation. Not supported for
+   * other platforms.
+   */
+  void authorizeClient(SmfClientAuthID clientID);
+  
+  /*
+   * Requests Plugin Manager to get a list of plugin IDs who implement
+   * the interface interfaceID.
+   * This is used got SmfClient::GetServices () where we need a list of plugins
+   */
+  void getPlugins(SmfInterfaceID interfaceID, QMap<SmfPluginID,SmfProvider>& pluginIDMap);
+  /**
+   * Same as above, except this is used for rest of the requests where we need
+   * a particular plugin
+   */
+  SmfPluginID getPlugin(SmfInterfaceID interfaceID,SmfProvider provider);
+  
+  /*
+   * Requests the Credential Manager to filter out non-authorized plugin IDs
+   * from the list and get authorized plugins into authList. 
+   */
+  void getAuthorizedPlugins(QList<SmfPluginID>& list,QList<SmfPluginID>& authList);
+  
+  /*
+   * Prepares the transport.
+   * What it'll do is not yet clear
+   */
+  void prepareTransport();
+  /**
+   * DEbugging purpose only
+   */
+  void writeLog(QString log) const;
+  /*
+   * Delegates the request of the client (to get the data from SN sites)
+   * to the Plugin Manager.
+   * Once the Plugin Manager gets parsed response data it calls the SLOT
+   * resultsAvailable(). 
+   * pluginID is the Plugin to be used.
+   * requestTypeID is the function codes(opcodes) used for message passing 
+   * betn clien-server.
+   * Note:- Should there be an overloaded function which takes
+   * list of SmfPluginID ?
+   * Note:- SmfPluginManager will invoke resultsAvailable on session object once
+   * it receives parsed data.
+   */
+#ifdef Q_OS_SYMBIAN
+  /**
+   * Request the Plugin manager to get the data.
+   * @param requestID Corresponds to a client's session
+   * @param pluginID Plugin for which the request is intended
+   * @param interfaceID Interface name
+   * @param dataForPlugin Data to be sent for this request
+   * 
+   */
+  void getRequestedData(int requestID,SmfPluginID pluginID,SmfInterfaceID interfaceID, SmfRequestTypeID requestTypeID,QByteArray dataForPlugin = QByteArray());
+#else
+  void getRequestedData(SmfServerQtSession* session,SmfPluginID pluginID, SmfRequestTypeID requestTypeID);
+#endif
+  
+public slots:
+
+	/*
+	 * This slot is called when Credential Manager is done with the autherizing
+	 * the client for the first time. See isClientAuthorized() and authorizeClient().
+	 * success specifies the success of the authorization, authID is the authentication
+	 * ID in case its not same as SID of the client.
+	 */
+	void clientAuthorizationFinished(bool success,SmfClientAuthID authID );
+
+	/*
+	 * This slot is called as a result of trigger from Plugin manager when the 
+	 * parsed data is available.
+	 * @param requestID The request ID for which result is available
+	 * @param parsedData Serialized data
+	 */
+	void resultsAvailable(int requestID,QByteArray* parsedData,SmfError error);
+
+	/*
+	 * Services the client request by sending the requested data.
+	 * Note:- This will be handled by private implementation.
+	 */
+	void serviceClient(QByteArray* parsedData);
+	
+	
+	/*
+	 * This slot is called for every cleanup timer expiry, in this slot, we need
+	 * to call SmfDataStoreManager's API to refresh data store
+	 */
+	void timerExpired(){};
+	
+	/*
+	 * This method is called every time timerExpired slot is trigerred
+	 * Fetches the last saved requests through Transport Manager and Plugin Manager
+	 * Who will save the last request (Tranport Manager or Data Store Manager) TBD later
+	 * 
+	 */
+	void runSavedRequest(){};
+	
+	/*
+	 * This slot is called when the data store updates are available as a result of
+	 * "runSavedRequest()".
+	 * Note:- The "10.4.1.11	updateDatastore" can be merged with this 
+	 */
+	void dataStoreUpdateAvailable(QByteArray* respData){Q_UNUSED(respData)};
+	
+	/**
+	 * Request the CM to get the authentication keys for the given pluginID
+	 */
+	void getAuthenticationKeys(int pluginID,QStringList& keys,QStringList& urls);
+	
+	/**
+	 * Server calls this method when it receives message from the CM
+	 * that authentication keys for the pluginID has expired
+	 */
+	void authenticationKeysExpired(NotificationType type,SmfPluginID id);
+signals:
+  //None at the moment
+private:
+/*
+ * Starts the clean-up timer for data store refresh, called from the "startServer()"
+ * timeOutValue should be picked out from SmfSettingsAuthManager's API
+ */
+bool startCleanupTimer(int timeOutValue){Q_UNUSED(timeOutValue) return true;};
+
+
+private:
+	//private impl
+#ifdef Q_OS_SYMBIAN
+	SmfServerSymbian* m_SmfServerPrivate;
+#else
+	SmfServerQt* m_SmfServerPrivate;
+#endif
+	//Handles of other SMF components
+	SmfTransportManager* m_transportManager;
+	SmfPluginManager* m_pluginManager;
+	SmfDataStoreManager* m_dataStoreManager;
+	SmfSettingsAuthManager* m_settingsAuthManager;
+	SmfClient* m_smfClient;
+};
+
+
+#endif // SMFSERVER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/server/smfserverqt_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,63 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+* Description:
+* SMF Server implementation for platforms other than Symbian.
+* Uses  QLocalServer-QLocalSocket classes
+*
+*/
+
+#ifndef SMFSERVERQT_P_H
+#define SMFSERVERQT_P_H
+
+#include <QObject>
+class QLocalServer;
+class QLocalSocket;
+
+class SmfServerQt : public QObject
+{
+    Q_OBJECT
+
+public:
+    SmfServerQt() {}
+#endif
+
+    ~SmfServerQt() {}
+    bool start() {return false;}
+    int sessionListCount() const {return 0;}
+private slots:
+    void newClientConnected() {}
+    void removeFromList() {}
+
+private:
+    QLocalServer *server;
+    QLocalSocket *iClient;
+};
+
+class SmfServerQtSession : public QObject
+{
+    Q_OBJECT
+public:
+    SmfServerQtSession(QLocalSocket *clientConnection, SmfServerQt *server) {Q_UNUSED(server) Q_UNUSED(clientConnection)}
+    ~SmfServerQtSession() {}
+
+public slots:
+    void readDataFromClient() {}
+    
+private:
+    SmfServerQt *iServer;
+    QLocalSocket *iClientConnection;
+
+};
+
+//#endif // SMFSERVERQT_P_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/server/smfserversymbian.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,410 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * 
+ * Description: Private implementation for Symbian OS
+ *
+ */
+#ifdef WRITE_LOG
+#include <QFile>
+#include <QTextStream>
+#endif
+#include <QDataStream>
+#include <QStringList>
+#include <QString>
+
+#include "smfserversymbian_p.h"
+
+
+SmfServerSymbian* SmfServerSymbian::NewL(CActive::TPriority aActiveObjectPriority,SmfServer* aWrapper)
+	{
+	SmfServerSymbian* self = new(ELeave) SmfServerSymbian(aActiveObjectPriority,aWrapper);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); // self
+	return self;
+	}
+
+void SmfServerSymbian::ConstructL()
+	{
+	}
+
+
+SmfServerSymbian::SmfServerSymbian( CActive::TPriority aActiveObjectPriority,SmfServer* aWrapper )
+: CPolicyServer(0,myPolicy, ESharableSessions), iWrapper(aWrapper)
+	{
+	Q_UNUSED(aActiveObjectPriority);
+	}
+
+
+
+TInt SmfServerSymbian::addToSessionMap(SmfServerSymbianSession* aSession,const RMessage2& aMsg)
+	{
+	writeLog("SmfServerSymbian::addToSessionMap");
+	if(iSessionCount)
+		{
+		//The key generation 
+		TInt key = qrand();
+		//in case qrand generates any duplicate key
+		while(iMap.Find(key))
+			{
+			key = qrand();
+			}
+
+		CSessionStruct session;
+		session.iMsg = aMsg;
+		session.iSession = aSession;
+		iMap.Insert(key,session); 
+		
+		return key;
+		}
+	
+	return (-1);
+	}
+
+
+TInt SmfServerSymbian::removeFromSessionMap(SmfServerSymbianSession* aSession,RMessage2& aMsg)
+	{
+	Q_UNUSED(aSession);
+	Q_UNUSED(aMsg);
+	return 0;
+	}
+
+//TODO - change this to a macro using qdebug  to avoid file opening and closing
+void SmfServerSymbian::writeLog(QString log) const
+	{
+#ifdef WRITE_LOG
+	QFile file("c:\\data\\SmfServerLogs.txt");
+	if (!file.open(QIODevice::Append | QIODevice::Text))
+		return;
+	QTextStream out(&file);
+	out << log << "\n";
+	file.close();
+#else
+	Q_UNUSED(log)
+#endif
+	}
+
+
+SmfServerSymbian::~SmfServerSymbian()
+	{
+
+	}
+
+SmfServer* SmfServerSymbian::wrapper()
+	{
+	return iWrapper;
+	}
+
+
+CSession2* SmfServerSymbian::NewSessionL(const TVersion& aVersion, const RMessage2& /*aMessage*/) const
+	{
+
+	// Check that the version is OK
+	//    TVersion v( 0, 1, 0 );
+	//    if (!User::QueryVersionSupported( v, aVersion ))
+	//        User::Leave( KErrNotSupported );  
+	// Create the session.
+	Q_UNUSED(aVersion);
+	QString log("New session created");
+	writeLog(log);
+	return new (ELeave) SmfServerSymbianSession( const_cast<SmfServerSymbian*>(this) );
+	}
+
+SmfServerSymbianSession* SmfServerSymbian::findSession(TInt id)
+	{
+	writeLog("SmfServerSymbian::findSession");
+	CSessionStruct* sessionStruct = iMap.Find(id);	
+	if(sessionStruct)
+		{
+		writeLog("Session id found");
+		return sessionStruct->iSession;
+		}
+	else
+		{
+		writeLog("Session id not found");
+		return NULL;
+		}
+	}
+
+TInt SmfServerSymbian::findAndServiceclient(TInt requestID,QByteArray* parsedData,SmfError error)
+	{
+	writeLog("SmfServerSymbian::findAndServiceclient");
+	SmfServerSymbianSession* sessionToservice = findSession(requestID);
+	if(sessionToservice)
+		{
+		sessionToservice->resultsAvailable(parsedData,error);
+		}
+	return 0;
+	}
+
+SmfServerSymbianSession::SmfServerSymbianSession(SmfServerSymbian* aServer):
+			iServer(aServer),iPtrToBuf(NULL,0) ,iIntfNmaeSymbian(NULL,0), iProviderSymbian(NULL,0),iIntfNameSymbian16(NULL,0)     
+	{
+	iServer->iSessionCount++;
+	}
+
+SmfServerSymbianSession::~SmfServerSymbianSession()
+	{
+	//cleanup of client resources
+	iServer->iSessionCount--;
+	}
+
+
+void SmfServerSymbianSession::clientathorizationFinished(bool success)
+	{
+	//Client authorization failed
+	if(!success)
+		{
+		//TODO:- Should use smf wide error instead
+		iMessage.Complete(KErrPermissionDenied);
+		}
+	else
+		{
+		HandleClientMessageL(iMessage);
+		}
+	}
+
+
+void SmfServerSymbianSession::resultsAvailable(QByteArray* parsedData,SmfError error)
+	{
+
+	//Note:- The order of serialization of parsedData - Error value followed by the data
+	//parsedData is already serialized by PM
+	iServer->writeLog("SmfServerSymbianSession::resultsAvailable");
+	//We should remove the request from the map as soon its no longer outstanding
+	iServer->removeFromSessionMap(this,iMessage);
+	
+	byteArrayToClnt.clear();
+	byteArrayToClnt.append(*(parsedData));
+	iPtrToBuf.Copy(reinterpret_cast<TUint8*>(byteArrayToClnt.data()),byteArrayToClnt.length());
+
+	TInt writeErr = iMessage.Write(2,iPtrToBuf);
+	
+	iServer->writeLog("Write=");
+	QString wrErr = QString::number(writeErr);
+	iServer->writeLog(wrErr);
+	
+	//signal completion for the last request
+	iMessage.Complete(error);
+	}
+
+
+void SmfServerSymbianSession::ServiceL(const RMessage2& aMessage)
+	{    
+
+	iServer->writeLog("SmfServerSymbianSession::ServiceL=");
+	iMessage = aMessage ;
+	
+	QString log;
+	log = QString::number(iMessage.Function());
+	iServer->writeLog(log);
+	
+	SmfClientAuthID clientAuthID;
+	clientAuthID.pid = aMessage.SecureId();
+	clientAuthID.session = this;
+	//check whether the client is authorized
+	if(!iServer->wrapper()->isClientAuthorized(clientAuthID))
+		{
+		//Client is yet to be authorized
+		//It should start authorization or simply return err value is yet TBD, so the following code may change
+		//start authorization of client, session will be blocked untill its authorized
+		//HandleclientMessageL will be called in that fn
+		iServer->wrapper()->authorizeClient(clientAuthID);
+		}
+	else
+		{
+		//client is authorized, so proceed
+		HandleClientMessageL(iMessage);		
+		}
+	}
+
+void SmfServerSymbianSession::HandleClientMessageL(const RMessage2& aMessage)
+	{
+	iServer->writeLog("HandleClientMessageL");
+	iLastRequest = aMessage.Function();
+	
+	
+	/**Note:- Only ESmfGetService needs to be taken care separately as it doesn't involve createrequest for PM
+	 *See SmfRequestTypeID for list of opcodes
+	 *
+	 *Two cases,-
+	 *1.for ESmfGetServices we donno the provider info
+	 *2. for rest of the cases, we know the provider info
+	 *so it seems PM needs to provide two overloaded getPlugins API But for every client intf instanciation
+	 *we would execute the same things twice.
+	 *TODO:- to be changed after GetServices returns SmfProvider+pluginID 
+	 * 
+	 */
+	if(iLastRequest == SmfGetService)
+		{
+		HandleGetService(aMessage);
+		}
+	else
+		{
+		HandleCommonServiceL(aMessage);
+		}
+	}
+
+void SmfServerSymbianSession::HandleGetService(const RMessage2 & aMessage)
+	{
+	iServer->writeLog("SmfServerSymbianSession::HandleGetService");
+	/**
+	 * Note:- client sends message for this opcode in the following format,-
+	 * Slot 0:- Interface Name buffer
+	 * Slot 1:- Ptr to data block to be filled with SmfProvideList* serialized into QByteArray
+	 */
+	iInterfaceNametbuf.Zero();
+
+	TInt readerr = aMessage.Read(0,iInterfaceNametbuf);
+	
+	iServer->writeLog(QString::number(readerr));
+	
+	QByteArray bytearray(reinterpret_cast<const char*>(iInterfaceNametbuf.Ptr()),iInterfaceNametbuf.Length()) ;
+	QDataStream stream3(&bytearray,QIODevice::ReadOnly);
+	stream3>>iInterfaceID;
+	
+	iServer->writeLog("iInterfaceID=");
+	iServer->writeLog(iInterfaceID);
+	
+	iServer->wrapper()->getPlugins(iInterfaceID,iPluginIDMap);
+	//form the plugin id list from the map
+	QMapIterator<SmfPluginID, SmfProvider> iter(iPluginIDMap);
+	iPluginIDList.clear();
+	while (iter.hasNext()) 
+		{
+	iter.next();
+	iPluginIDList<<iter.key();
+		}
+	
+	//iAuthList will be filled by credential manager
+	iServer->wrapper()->getAuthorizedPlugins(iPluginIDList,iAuthList);
+
+	//iPluginIDMap now contains SmfProvider info to return to the client
+	//No need to add this to session map, as we are not requesting PM for this
+	QMap<SmfPluginID, SmfProvider> tempMap;
+	QMapIterator<SmfPluginID, SmfProvider> i(iPluginIDMap);
+	
+	while (i.hasNext()) 
+		{
+		i.next();
+		if(iAuthList.contains(i.key()))
+			{
+			tempMap.insert(i.key(),i.value());
+			}
+		}
+
+	iPluginIDMap.clear();
+	iPluginIDMap = tempMap;
+	
+	//form list of smfprovider from this map,-
+	QList<SmfProvider> providerList;
+	i = iPluginIDMap;
+	while(i.hasNext())
+		{
+		i.next();
+		providerList.append(i.value());
+		}
+
+	byteArrayToClnt.clear();
+	QDataStream stream(&byteArrayToClnt,QIODevice::WriteOnly);
+	stream<<providerList;
+
+	iPtrToBuf.Copy(reinterpret_cast<TUint8*>(byteArrayToClnt.data()),byteArrayToClnt.length());
+	TInt writeErr = aMessage.Write(1,iPtrToBuf);
+	
+	iServer->writeLog("Write=");
+	QString wrErr = QString::number(writeErr);
+	iServer->writeLog(wrErr);
+	//signal completion
+	
+	TInt completion = SmfGetServiceComplete ;
+	aMessage.Complete(completion);
+	}
+
+void SmfServerSymbianSession::HandleCommonServiceL(const RMessage2& aMessage)
+	{
+	/**
+	 * Note:- client sends message in the following format,-
+	 * Slot 0:- SmfProvider* serialized
+	 * Slot 1:- Interface Name buffer
+	 * Slot 2:- Ptr to data block to be filled
+	 */
+	TInt providerSize = aMessage.GetDesLength(0);
+	if(iProviderBuf)
+		{
+	delete iProviderBuf;
+	iProviderBuf = NULL;
+		}
+	iProviderBuf = HBufC8::NewL(providerSize);
+	iProviderSymbian.Set(iProviderBuf->Des());
+
+	TInt intfNameSize = aMessage.GetDesLength(1);
+	if(iIntfNameBuf)
+		{
+	delete iIntfNameBuf;
+	iIntfNameBuf = NULL;
+		}
+	iIntfNameBuf = HBufC8::NewL(intfNameSize*2);//for safeside
+	iIntfNmaeSymbian.Set(iIntfNameBuf->Des());
+
+
+	//read it into iProviderSymbian
+	aMessage.ReadL(0,iProviderSymbian);
+	//read it into iIntfNmaeSymbian
+	aMessage.ReadL(1,iIntfNmaeSymbian);
+
+	//convert SmfProvider info from Symbian into bytearray
+	QByteArray providerBufQt(reinterpret_cast<const char*>(iProviderSymbian.Ptr()),iProviderSymbian.Length());
+	iServer->writeLog("After providerBufQt");
+
+	//now de-serialize it
+	QDataStream stream(&providerBufQt,QIODevice::ReadOnly);
+	SmfProvider provider;
+	stream>>provider ;
+	QByteArray bytearray(reinterpret_cast<const char*>(iIntfNmaeSymbian.Ptr()),iIntfNmaeSymbian.Length()) ;
+	QDataStream intfNameStream(&bytearray,QIODevice::ReadOnly);
+	iInterfaceID.clear();
+	intfNameStream>>iInterfaceID;
+
+	iServer->writeLog("After de-serializing into iInterfaceID=");
+	iServer->writeLog(iInterfaceID);
+	
+	//Get the plugin ID who matches provider info for a given intf name
+	SmfPluginID pluginID = iServer->wrapper()->getPlugin(iInterfaceID,provider);
+	
+	iServer->writeLog("pluginID from PM=");
+	iServer->writeLog(pluginID);
+	
+	iPluginIDList.clear();
+	//we need to check only this pluginID is authorized
+	iPluginIDList<<pluginID;
+	
+	//iAuthList will contain pluginID for a successfull case
+	iAuthList.clear();
+	iServer->wrapper()->getAuthorizedPlugins(iPluginIDList,iAuthList);
+	if(iAuthList.contains(pluginID))
+		{
+		//Plugin ID is authorised, service the request
+		//Gnerate request id only if the plugin ID is authorised
+		TInt id = iServer->addToSessionMap(this,aMessage);
+		//request PM to get the data
+		SmfRequestTypeID opcode = (SmfRequestTypeID)iLastRequest;
+		iServer->wrapper()->getRequestedData(id,pluginID,iInterfaceID,opcode,providerBufQt);
+		}
+	else
+		{
+		//TODO:-Plugin ID is not authorized, throw some error
+		}
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/server/smfserversymbian_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,267 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan*
+ * Description:
+ * SMF Server private implementation for Symbian
+ *
+ **/
+
+#ifndef SMFSERVERSYMBIAN_H
+#define SMFSERVERSYMBIAN_H
+#include <QObject>
+#include <e32hashtab.h>
+#include <e32base.h>
+#include <QByteArray>
+#include <QString>
+//testing -start
+#include "smfprovider.h"
+//end
+//SMF wide global const and macros, to be shared among SMF components as well as SMF aware apps
+//#include <smf/smfGlobal.h>
+
+//#include "clientGlobal.h"
+
+#include "SmfServer.h"
+//Forward declarations
+class SmfServerSymbianSession;
+
+/**
+ * Stores session and request information.
+ * For now storing RMessage2 is reduntant as we are allowing only one outstanding request per session
+ */
+struct CSessionStruct
+	{
+	SmfServerSymbianSession* iSession;
+	RMessage2 iMsg;
+	};
+
+
+
+//Policy table---start
+//note capabilities are yet to be finalized
+//46 services as of 15th apr
+const TUint myRangeCount = 1/*7*/; 
+
+//Passing everything for the time being
+const TInt myRanges[myRangeCount] = 
+        {
+        0/*, //ERequestPass
+        1, //ERequestFail
+        2, //ERequestNotSupported
+        3, //ERequestDrmService
+        4, //ERequestUserEnvironmentService  
+        5, //ERequestCustomCheckPass
+        6  //ERequestCustomCheckFail*/ 
+        };
+        
+        
+/* bis: each element of this array actually indexes to a particular element of
+TPolicyElement. For eg. element 0 of this array maps element 0 of myRanges to 
+a particular element of TpolicyElement array which is in this case element 0
+of TPolicyElement       
+*/
+const TUint8 myElementsIndex[myRangeCount] = 
+        {
+        CPolicyServer::EAlwaysPass, //passing everything for now  
+        };
+
+
+/* bis: Policies used by the server to check messages from the client 
+for each message, the server will carry out security check according 
+to this policy. 
+*/        
+const CPolicyServer::TPolicyElement myElements[] = 
+        {
+        {_INIT_SECURITY_POLICY_PASS, CPolicyServer::EFailClient}     
+        };
+
+/* bis: TPolicy used by the server to check messages from the client 
+for each message. This structure is passed to the server at its creation.
+The Symbian client-server architecture will make sure that each client request
+passes through the security test as indicated by myPolicy before it is handled
+by myPolciyServer */        
+const CPolicyServer::TPolicy myPolicy =
+        {
+        //bis:
+        //the connection policy (CPolicyServer::EAlwaysPass) should be changed if the 
+        //server wants to check for a particular policy before grating any connection
+        //to the client. For eg. DRM manager server should only allow clients having DRM
+        //capability to connect to it. To do so, change CPolicyserver::EAlwaysPass,
+        //to the index no. of myElements which checks for ECapabilityDRM i.e index 2
+        //in this case. For EACM server, the server should allow only clients having
+        //ECapabilityUserEnvironment to connect to it.
+        CPolicyServer::EAlwaysPass, //specifies all connect attempts should pass 
+        myRangeCount,                                   
+        myRanges,
+        myElementsIndex,
+        myElements,
+        };
+//Policy table---end
+/**
+* Our server class - an active object - and therefore derived ultimately from CActive.
+* It accepts requests from client threads and forwards
+* them to the client session to be dealt with. It also handles the creation
+* of the server-side client session.
+**/
+class SmfServerSymbian : public CPolicyServer
+{
+  
+public:
+	/**
+	 * Creates a new session with the server; the function
+	 * implements the pure virtutal function
+	 * defined in class CServer2
+	 */
+	SmfServerSymbian(CActive::TPriority aActiveObjectPriority,SmfServer* aWrapper);
+    static SmfServerSymbian * NewL(CActive::TPriority aActiveObjectPriority,SmfServer* aWrapper);
+    ~SmfServerSymbian();
+    CSession2 * NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+  
+    /**
+     * Returns SmfServer
+     */
+    SmfServer* wrapper();
+    /**
+     * Adds session info to the currently active session map iMap. This map is used to
+     * retreive the corresponding session to be serviced. The keys for this map is sent
+     * alongwith the request to other components
+     * @param aSession Session to be added
+     * @param aMsg Currently redundant
+     */
+    TInt addToSessionMap(SmfServerSymbianSession* aSession,const RMessage2& aMsg);
+    /**
+     * Removes the session from the active list of session map
+     * @param aSession Session to be removed.
+     * @param aMsg Currently redundant
+     */
+    TInt removeFromSessionMap(SmfServerSymbianSession* aSession,RMessage2& aMsg);
+    /**
+     * Returns a symbian session for the given key from the iMap.
+     * @param id Session ID in the SmfServer Session map
+     */
+    SmfServerSymbianSession* findSession(TInt id);
+    /**
+     * Finds the given session and services it with the data.
+     * @param requestID Session ID
+     * @param parsedData Parsed and serialized data to be sent to client.
+     * @param error Error code
+     */
+    TInt findAndServiceclient(TInt requestID,QByteArray* parsedData,SmfError error);
+	/**
+	 * Debugging
+	 */
+	void writeLog(QString log)const;
+//private:
+    void ConstructL();
+    SmfServer* iWrapper;
+    
+	/**
+	 * Keeps track of the requests sent by each session
+	 */
+    RHashMap<TInt,CSessionStruct> iMap;
+    
+    /**
+     * The key in the iMap.
+     * Its sent to the wrapper
+     */
+    TInt iRequestID;
+    
+    TInt iSessionCount;
+};
+
+/**
+This class represents a session with the  Smf server.
+Functions are provided to respond appropriately to client messages.
+*/
+class SmfServerSymbianSession : public CSession2
+{
+public:
+	/**
+	 * Creates a session.
+	 * @param aServer The server handle
+	 */
+	SmfServerSymbianSession(SmfServerSymbian* aServer);
+    ~SmfServerSymbianSession();
+    /**
+     * From CSession2
+     */
+    void ServiceL(const RMessage2 & aMessage);
+    /**
+     * Called by the SmfServerSymbian when results are available
+     * @param parsedData Parsed serialized data
+     * @param error Smf Error code
+     */
+	void resultsAvailable(QByteArray* parsedData,SmfError error);
+	/**
+	 * Called by the SmfServer when client authorization finishes.
+	 * @param success success of the authorization
+	 */
+	void clientathorizationFinished(bool success);
+protected:
+    //TMessageParams ReadMessageAndRetrieveParams (const RMessage2 & aMessage);
+    void PanicClient(const RMessage2 & aMessage, TInt aPanic) const;
+    /**
+     * Called by ServiceL()
+     * It tests the function code and then delegates to
+     * the appropriate function.
+     */
+    void HandleClientMessageL(const RMessage2 & aMessage);
+    
+    //Following are for handling specific client requests
+    /**
+     * ESmfGetService
+     */
+    void HandleGetService(const RMessage2 & aMessage);
+    
+    /**
+     * Handles all the opcodes except ESmfGetService
+     */
+    void HandleCommonServiceL(const RMessage2 & aMessage);
+    
+    
+//private:
+    SmfServerSymbian* iServer;
+    RMessage2 iMessage;
+
+	//this interface id will be provided by Smf client, will map Smf Client 
+	// interface hierarchy
+	SmfInterfaceID iInterfaceID;
+	TPtr8 iIntfNmaeSymbian;
+	TPtr iIntfNameSymbian16;
+	TBuf8<125> iInterfaceNametbuf;
+	TPtr8 iProviderSymbian;
+	HBufC8* iProviderBuf;
+	HBufC8* iIntfNameBuf;
+	QMap<SmfPluginID,SmfProvider> iPluginIDMap;
+	QList<SmfPluginID> iPluginIDList;
+	QList<SmfPluginID> iAuthList;
+	
+	/**
+	 * To keep track of the requests sent by this session,not required for now, as only one
+	 * outstanding request per session is required
+	 */
+	RArray<RMessage2> iRequestList;
+	/**
+	 * Last request opcode
+	 */
+	TInt iLastRequest;
+	//testing
+	TBuf<525> dataToPass;
+	HBufC8* iBuf;
+	HBufC* iBuf16;
+	TPtr8 iPtrToBuf;
+	QByteArray byteArrayToClnt;
+	SmfProvider* providerToClnt;
+	TInt iError;
+};
+#endif // SMFSERVERSYMBIAN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfcontactfetcherplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,136 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for fetching contacts
+ *
+ */
+
+#ifndef SMFCONTACTFETCHERPLUGIN_H_
+#define SMFCONTACTFETCHERPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <smfcontact.h>
+#include <smfgroup.h>
+#include <smflocation.h>
+
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface specification for fetching contacts. This class provides 
+ * basic functionality to allow applications to obtain list of
+ * friends, followers, groups of a user in a social networking service.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfContactFetcherPlugin : public SmfPluginBase
+	{
+public:
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfContactFetcherPlugin( ) {}
+	
+	/**
+	 * Method to get the list of friends
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError friends( SmfPluginRequestData &aRequest,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get the list of followers
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError followers( SmfPluginRequestData &aRequest,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to search for a contact
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aContact contact to be searched
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError search( SmfPluginRequestData &aRequest,
+			const SmfContact &aContact,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to search for contacts (friends) who are near the user.
+	 * Proximity defines accuracy level
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aLocation The location search criteria
+	 * @param aProximity location search boundary
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError searchNear( SmfPluginRequestData &aRequest,
+			const SmfLocation &aLocation,
+			const SmfLocationSearchBoundary &aProximity,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get the list of groups
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError groups( SmfPluginRequestData &aRequest,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to search for a contact in a group
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aGroup the group in which to search
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError searchInGroup( SmfPluginRequestData &aRequest,
+			const SmfGroup &aGroup,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Customised method for SmfContactFetcherPlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+	};
+
+Q_DECLARE_INTERFACE( SmfContactFetcherPlugin, "org.symbian.smf.plugin.contact.fetcher/v1.0" );
+
+#endif /* SMFCONTACTFETCHERPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfgalleryplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for plugins that implement gallery related services
+ *
+ */
+
+#ifndef SMFGALLERYPLUGIN_H_
+#define SMFGALLERYPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <smfpicture.h>
+#include <smfcomment.h>
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface specification for plugins that implement gallery related services
+ * like getting pictures, their description, uploading, posting comments 
+ * on pictures etc
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ *
+ * A sample call flow between SmfPluginMgr and  SmfGalleryPlugin is shown here
+ * 
+ * @msc
+   hscale = "2";  
+  SmfServer,SmfTransportMgr,SmfPluginMgr,SmfGalleryPlugin;
+  ...;
+  SmfPluginMgr=>SmfTransportMgr [ label = "connect(SIGNAL(finished()), SLOT(replyFinished()))" ] ;
+  ...;
+  SmfServer=> SmfPluginMgr[ label = "loadAndCheckPlugin()" ] ;
+  SmfPluginMgr=>SmfPluginMgr [ label = "SmfGalleryPlugin smfglpl= load()" ] ;
+  SmfPluginMgr=>SmfGalleryPlugin [ label = "QNetworkRequest  req = smfglpl.pictures()" ] ;
+  SmfPluginMgr=>SmfTransportMgr [ label = "nwmgr.get( req )" ] ;
+  ...;
+  SmfTransportMgr=>SmfPluginMgr [ label = "replyFinished( reply )" ] ;
+  SmfPluginMgr=>SmfGalleryPlugin [ label = "status = responseAvailable( reply, &data )" ] ;
+  SmfPluginMgr=>SmfServer [ label = "if(status ==complete) dataStream <<  data;" ] ;
+  @endmsc
+ * 
+ */
+class SmfGalleryPlugin : public SmfPluginBase
+	{
+public:
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfGalleryPlugin( ) {}
+	
+	/**
+	 * Method to get a list of pictures
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError pictures( SmfPluginRequestData &aRequest, 
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get a description
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aImage The image abot which the description is required
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError description( SmfPluginRequestData &aRequest,
+			const SmfPicture &aImage ) = 0;
+	
+	/**
+	 * Method to upload a picture
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aImage The image to be uploaded
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError upload( SmfPluginRequestData &aRequest,
+			const SmfPicture &aImage ) = 0;
+	
+	/**
+	 * Method to upload a list of pictures
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aImages The list of images to be uploaded
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError upload( SmfPluginRequestData &aRequest,
+			const QList<SmfPicture> &aImages ) = 0;
+	
+	/**
+	 * Method to post comment on a picture is available
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aImage The image on which comment is to be posted
+	 * @param aComment The comment to be posted
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postComment( SmfPluginRequestData &aRequest,
+			const SmfPicture &aImage, 
+			const SmfComment &aComment ) = 0;
+		
+	/**
+	 * Customised method for SmfGalleryPlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+		
+	};
+
+Q_DECLARE_INTERFACE( SmfGalleryPlugin, "org.symbian.smf.plugin.gallery/v1.0" );
+
+#endif /* SMFGALLERYPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smflyricsserviceplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,90 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for music track lyrics
+ *
+ */
+
+
+#ifndef SMFLYRICSSERVICEPLUGIN_H_
+#define SMFLYRICSSERVICEPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <smftrackinfo.h>
+#include <QString>
+#include <smfsubtitle.h>
+#include <smflyrics.h>
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface specification for music track lyrics
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfLyricsServicePlugin : public SmfPluginBase
+	{
+public:
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfLyricsServicePlugin( ) {}
+	
+	/**
+	 * Method to get the lyrics
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTrack The track whose lyrics need to be fetched
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError lyrics( SmfPluginRequestData &aRequest, 
+			const SmfTrackInfo &aTrack,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get the subtitle
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTrack The track whose subtitle need to be fetched
+	 * @param aFilter The subtitle search filter if any
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError subtitles( SmfPluginRequestData &aRequest, 
+			const SmfTrackInfo &aTrack,
+			const SmfSubtitleSearchFilter &aFilter = SubtitleAll,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Customised method for SmfLyricsServicePlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfLyricsServicePlugin, "org.symbian.smf.plugin.music.lyrics/v1.0" );
+
+#endif /* SMFLYRICSSERVICEPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfmusiceventsplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,114 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for music events
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+
+#ifndef SMFMUSICEVENTSPLUGIN_H_
+#define SMFMUSICEVENTSPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <smfevent.h>
+#include <smflocation.h>
+#include <qgeopositioninfo.h> // Qt mobility class
+
+using namespace QtMobility;
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface specification for music events
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+class SmfMusicEventsPlugin : public SmfPluginBase
+	{
+public:
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfMusicEventsPlugin( ) {}
+	
+	/**
+	 * Method to get the events based on location
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aLocation Location of the event
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError events( SmfPluginRequestData &aRequest,
+			const QGeoPositionInfo &aLocation,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get the venues based on location
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aLocation Location of the venue
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError venues( SmfPluginRequestData &aRequest,
+			const QGeoPositionInfo &aLocation,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get the events based on venues
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aVenue Venue of the event
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError events( SmfPluginRequestData &aRequest,
+			const SmfLocation &aVenue,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to post events
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aEventList The list of events to be posted
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postEvents( SmfPluginRequestData &aRequest,
+			const QList<SmfEvent> &aEventList ) = 0;
+	
+	/**
+	 * Customised method for SmfMusicEventsPlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfMusicEventsPlugin, "org.symbian.smf.plugin.music.events/v1.0" );
+
+#endif /* SMFMUSICEVENTSPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfmusicsearchplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,128 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for music search services
+ *
+ */
+
+
+#ifndef SMFMUSICSEARCHPLUGIN_H_
+#define SMFMUSICSEARCHPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <QList>
+#include <smfmusicfingerprint.h>
+#include <smftrackinfo.h>
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface specification for music search services. This class
+ * provides basic functionality to allow applications to search for 
+ * tracks, get recommented tracks etc
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfMusicSearchPlugin : public SmfPluginBase
+	{
+public:
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfMusicSearchPlugin( ) {}
+	
+	/**
+	 * Method to get recommended tracks
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTrack The track for which similar recommendations 
+	 * need to be fetched.
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError recommendations( SmfPluginRequestData &aRequest,
+			const SmfTrackInfo &aTrack,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get similar tracks
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTrack The track for which similar tracks 
+	 * need to be fetched.
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError tracks( SmfPluginRequestData &aRequest,
+			const SmfTrackInfo &aTrack,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get tracks having a similar finger print
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aSignature The finger print to be searched for need to be 
+	 * fetched.
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError trackInfo( SmfPluginRequestData &aRequest,
+			const SmfMusicFingerPrint &aSignature,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to search information about where to buy this song from
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTrack The track for which stores need to be searched
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError stores( SmfPluginRequestData &aRequest,
+			const SmfTrackInfo &aTrack,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to post the currently playing track
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTrack The current playing track, that should be posted
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postCurrentPlaying( 
+			SmfPluginRequestData &aRequest,
+			const SmfTrackInfo &aTrack ) = 0;
+	
+	/**
+	 * Customised method for SmfMusicSearchPlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfMusicSearchPlugin, "org.symbian.smf.plugin.music.search/v1.0" );
+
+#endif /* SMFMUSICSEARCHPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfmusicserviceplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for music services
+ *
+ */
+
+
+#ifndef SMFMUSICSERVICEPLUGIN_H_
+#define SMFMUSICSERVICEPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <smfmusicprofile.h>
+#include <smflocation.h>
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface specification for music services. This class provides basic 
+ * functionality to allow application to search for a user or check for
+ * user information etc.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfMusicServicePlugin : public SmfPluginBase
+	{
+public:
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfMusicServicePlugin( ) {}
+	
+	/**
+	 * Method to get self profile information
+	 * @param aRequest [out] The request data to be sent to network
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError userInfo( SmfPluginRequestData &aRequest ) = 0;
+	
+	/**
+	 * Method to search information about other service users for a 
+	 * particular place
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPlace The place which is the search criteria
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError searchUser( SmfPluginRequestData &aRequest,
+			const SmfLocation &aPlace,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Customised method for SmfMusicServicePlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfMusicServicePlugin, "org.symbian.smf.plugin.music.service/v1.0" );
+
+#endif /* SMFMUSICSERVICEPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfplaylistserviceplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for playlists service
+ *
+ */
+
+
+#ifndef SMFPLAYLISTSERVICEPLUGIN_H_
+#define SMFPLAYLISTSERVICEPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <smfplaylist.h>
+#include <smfmusicprofile.h>
+#include <smftrackinfo.h>
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface specification for playlists service. This class provides 
+ * basic functionality to allow applications to get playlists of a user, 
+ * add some track to an existing playlist, post the current playing 
+ * playlists etc.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfPlaylistServicePlugin : public SmfPluginBase
+	{
+public:
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfPlaylistServicePlugin( ) {}
+	
+	/**
+	 * Method to get the playlist
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError playlists( SmfPluginRequestData &aRequest,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to get the playlist of a particular user
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aUser The user whose playlists need to be fetched
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError playlistsOf( SmfPluginRequestData &aRequest,
+			const SmfMusicProfile &aUser,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+	
+	/**
+	 * Method to add tracks to a playlist
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPlaylist The playlist where tracks should be added
+	 * @param aTracks The tracks to be added to the playlist
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError addToPlaylist( SmfPluginRequestData &aRequest,
+			const SmfPlaylist &aPlaylist, 
+			const QList<SmfTrackInfo> &aTracks ) = 0;
+	
+	/**
+	 * Method to post the current playing playlist
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPlaylist The current playing playlist which should be posted
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postCurrentPlayingPlaylist(
+			SmfPluginRequestData &aRequest, 
+			const SmfPlaylist &aPlaylist ) = 0;
+	
+	/**
+	 * Customised method for SmfPlaylistServicePlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfPlaylistServicePlugin, "org.symbian.smf.plugin.music.playlist/v1.0" );
+
+#endif /* SMFPLAYLISTSERVICEPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfpluginbase.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The SmfPluginBase class is the base class for all plugins.
+ *
+ */
+
+#ifndef SMFPLUGINBASE_H_
+#define SMFPLUGINBASE_H_
+
+#include <smfproviderbase.h>
+#include <smfglobal.h>
+
+class SmfPluginUtil;
+
+/**
+ * @ingroup smf_plugin_group
+ * The SmfPluginBase class is the base class for all plugins 
+ */
+class SmfPluginBase
+	{
+public:
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfPluginBase( ) {}
+	
+	/**
+	 * The first method to be called in the plugin that implements this interface.
+	 * If this method is not called, plugin may not behave as expected.
+	 * Plugins are expected to save the aUtil handle and use as and when required.
+	 * @param aUtil The instance of SmfPluginUtil
+	 */
+	virtual void initialize( SmfPluginUtil *aUtil ) = 0;
+
+	/**
+	 * Method to get the provider information
+	 * @return Instance of SmfProviderBase
+	 */
+	virtual SmfProviderBase* getProviderInfo( ) = 0;
+	
+	/**
+	 * Method to get the result for a network request.
+	 * @param aTransportResult The result of transport operation
+	 * @param aReply The QByteArray instance containing the network response.
+	 * The plugins should delete this instance once they have read the 
+	 * data from it.
+	 * @param aResult [out] An output parameter to the plugin manager.If the 
+	 * return value is SmfSendRequestAgain, QVariant will be of type 
+	 * SmfPluginRequestData.
+	 * 
+	 * For SmfContactFetcherPlugin: If last operation was friends() or followers() 
+	 * or search() or searchInGroup() or searchNear(), aResult will be of type 
+	 * QList<SmfContact>. If last operation was groups(), aResult will be of 
+	 * type QList<SmfGroup>
+	 * For SmfPostProviderPlugin: If last operation was retrieve(), aResult will be 
+	 * of type QList<SmfPost>. If last operation was post() or updatePost() or 
+	 * postDirected() or commentOnAPost() or postAppearence() or sharePost(), 
+	 * aResult will be of type bool
+	 * For SmfLyricsServicePlugin: If last operation was lyrics(), aResult will 
+	 * be of type QList<SmfLyrics>. If last operation was subtitles(), aResult will 
+	 * be of type QList<SmfSubtitle>.
+	 * For SmfMusicEventsPlugin: If last operation was events(), aResult will 
+	 * be of type QList<SmfEvent>. If last operation was venues(), aResult 
+	 * will be of type QList<SmfLocation>. If last operation was postEvents(), 
+	 * aResult will be of type bool
+	 * For SmfMusicSearchPlugin: If last operation was recommendations() or 
+	 * tracks() or trackInfo(), aResult will be of type QList<SmfTrackInfo>. 
+	 * If last operation was stores(), aResult will be of type 
+	 * QList<SmfProvider>. If last operation was postCurrentPlaying(), 
+	 * aResult will be of type bool.
+	 * For SmfMusicServicePlugin: If last operation was userInfo(), aResult 
+	 * will be of type SmfMusicProfile. If last operation was searchUser(), 
+	 * aResult will be of type QList<SmfMusicProfile>.
+	 * For SmfPlaylistServicePlugin: If last operation was playlists() or 
+	 * playlistsOf(), aResult will be of type QList<SmfPlaylist>. If last 
+	 * operation was addToPlaylist() or postCurrentPlayingPlaylist(), 
+	 * aResult will be of type bool.
+	 * For SmfGalleryPlugin: If last operation was pictures(), aResult will 
+	 * be of type QList<SmfPicture>. If last operation was description(), 
+	 * aResult will be of type QString. If last operation was upload() or 
+	 * postComment(), aResult will be of type bool.
+	 * 
+	 * @param aRetType [out] SmfPluginRetType
+	 * @param aPageResult [out] The SmfResultPage structure variable
+	 */
+	virtual SmfPluginError responseAvailable( 
+			const SmfTransportResult &aTransportResult, 
+			QByteArray *aReply, 
+			QVariant* aResult, 
+			SmfPluginRetType &aRetType,
+			SmfResultPage &aPageResult ) = 0;
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfPluginBase, "org.symbian.smf.plugin.smfpluginbase/v1.0" );
+
+#endif /* SMFPLUGINBASE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfplugins.pri	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,27 @@
+INCLUDEPATH += smfplugins
+
+PUBLIC_HEADERS += \
+	smfplugins/smfpluginbase.h \
+	smfplugins/smfproviderbase.h \
+	smfplugins/smfcontactfetcherplugin.h \
+	smfplugins/smfpostproviderplugin.h \
+	smfplugins/smflyricsserviceplugin.h \
+	smfplugins/smfmusiceventsplugin.h \
+	smfplugins/smfmusicsearchplugin.h \
+	smfplugins/smfmusicserviceplugin.h \
+	smfplugins/smfplaylistserviceplugin.h \
+	smfplugins/smfgalleryplugin.h
+
+
+symbian: {
+    BLD_INF_RULES.prj_exports += smfplugins/smfpluginbase.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfproviderbase.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfcontactfetcherplugin.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfpostproviderplugin.h
+    BLD_INF_RULES.prj_exports += smfplugins/smflyricsserviceplugin.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfmusiceventsplugin.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfmusicsearchplugin.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfmusicserviceplugin.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfplaylistserviceplugin.h
+    BLD_INF_RULES.prj_exports += smfplugins/smfgalleryplugin.h
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfpostproviderplugin.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,197 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * Interface specification for getting/posting updates to a social site
+ *
+ */
+
+
+#ifndef SMFPOSTPROVIDERPLUGIN_H_
+#define SMFPOSTPROVIDERPLUGIN_H_
+
+#include <smfpluginbase.h>
+#include <smfcontact.h>
+#include <smfpost.h>
+#include <smflocation.h>
+
+//TODO:- Moved to SmfPost as it should b common betn client n plugin
+///**
+// * SmfPresenceInfo.
+// * Indicates the presence information of user like Online, Offline, Busy, 
+// * Do no disturb, Appear Offline etc.
+// */
+//enum SmfPresenceInfo
+//	{
+//	  ENotSupported,
+//	  EOnline,
+//	  EOffline,
+//	  EBusy,
+//	  EDoNotDisturb,
+//	  EAppearOffline,
+//	  EOther
+//	};
+
+/**
+ * @ingroup smf_plugin_group
+ * Interface to get/update the posts to a service provider. This class
+ * provides basic functionality to allow applications to obtain list of
+ * posts, updates posts or change the presence information to a social 
+ * networking service.
+ *
+ * All of the functionality described here should be implemented by a service
+ * specific plug-in.
+ */
+class SmfPostProviderPlugin : public SmfPluginBase
+	{
+public:
+	
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfPostProviderPlugin( ) {}
+	
+	/**
+	 * Method that returns maximum no of chars (unicode) that service 
+	 * provider can post without truncation. Negative value means 
+	 * no limit
+	 * @return Max characters that can be posted without truncation
+	 */
+	virtual qint32 maxCharsInPost( ) const = 0;
+	/**
+	 * Method that returns maximum no of items that can be returned 
+	 * in a single query to getPosts. Negative value means feature 
+	 * not supported.
+	 * @return Max items that can be returned in a single query
+	 */
+	virtual qint32 maxItems( ) const = 0;
+
+	/**
+	 * <Method that returns all the formatting of posts that this 
+	 * service provider supports. May return 0 items to mean 
+	 * only QString is supported.
+	 * @return Supported formats of posts
+	 */
+	virtual QVector<QTextFormat> supportedFormats ( ) const = 0;
+	
+	/**
+	 * Method that returns whether this SP supports Appearence
+	 * @return Returns true if Appearance is supported, else false. 
+	 * @see SmfAppearenceInfo
+	 */
+	virtual bool supportsAppearence ( ) const = 0;
+	
+	/**
+	 * Method to get the latest posts
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aUser The user's contact in this SP, omit for self contact
+	 * @param aPageNum The page to be extracted
+	 * @param aItemsPerPage Number of items per page
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError retrieve( SmfPluginRequestData &aRequest,
+			const SmfContact *aUser=0,
+			const int aPageNum = SMF_FIRST_PAGE, 
+			const int aItemsPerPage = SMF_ITEMS_PER_PAGE ) = 0;
+
+	
+	/**
+	 * Method to update a post to own area.
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPostData The post data to be posted
+	 * @param aLocation The location
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError post( SmfPluginRequestData &aRequest,
+			const SmfPost &aPostData, 
+			const SmfLocation &aLocation ) = 0;
+	
+	/**
+	 * Method to update the last post to own area with new data
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPostData The edited/new data to be posted
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError updatePost( SmfPluginRequestData &aRequest,
+			const SmfPost &aPostData ) = 0;
+	
+	/**
+	 * Method to update a post to a particular contact
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPostData The post data to be posted
+	 * @param aContact The contact where the data has to be posted
+	 * @param aLocation The location
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postDirected( SmfPluginRequestData &aRequest,
+			const SmfPost &aPostData, 
+			const SmfContact &aContact, 
+			const SmfLocation *aLocation = NULL ) = 0;
+	
+	
+	/**
+	 * Method to post a comment on a post.
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aTarget Post on which comment has to be posted
+	 * @param aComment comment to be posted
+	 * @param aLocation location data
+	 */
+	virtual SmfPluginError commentOnAPost(SmfPluginRequestData &aRequest,
+			const SmfPost &aTarget,
+			const SmfPost &aComment, 
+			const SmfLocation *aLocation = NULL) = 0;
+	
+	/**
+	 * Method to update the presence information of the user
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aAppearence The appearence information
+	 * @param aStatus The status string
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError postAppearence( SmfPluginRequestData &aRequest,  
+			const SmfPresenceInfo &aAppearence,
+			const QString &aStatus ) = 0;
+	
+	/**
+	 * Share /a contact's post to user's friends and followers
+	 * (e.g. retweet in twitter, share on facebook)
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aPostData data to be posted
+	 * @param aContact contact to which the post belonged
+	 * @param aEdited whether user changed items within the post
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError sharePost( SmfPluginRequestData &aRequest, 
+			const SmfPost &aPostData, 
+			const SmfContact &aContact, 
+			const bool &aEdited) = 0;
+	
+	/**
+	 * Customised method for SmfPostProviderPlugin interface
+	 * @param aRequest [out] The request data to be sent to network
+	 * @param aOperation The operation type (should be known between 
+	 * the client interface and the plugin)
+	 * @param aData The data required to form the request (The type 
+	 * of data should be known between client and the plugin)
+	 * @return SmfPluginError Plugin error if any, else SmfPluginErrNone
+	 */
+	virtual SmfPluginError customRequest( SmfPluginRequestData &aRequest, 
+			const int &aOperation, QByteArray *aData ) = 0;
+
+	
+	};
+
+Q_DECLARE_INTERFACE( SmfPostProviderPlugin, "org.symbian.smf.plugin.contact.posts/v1.0" );
+
+#endif /* SMFPOSTPROVIDERPLUGIN_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfplugins/smfproviderbase.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,111 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Provider Base class is the class that has to be contained as a member 
+ * in all Plug-in Interfaces.
+ *
+ */
+
+#ifndef SMFPROVIDERBASE_H_
+#define SMFPROVIDERBASE_H_
+
+#include <QImage>
+#include <QUrl>
+#include <QBuffer>
+#include <smfglobal.h>
+#include <qdatastream.h>
+#include <QSharedData>
+
+/**
+ * @ingroup smf_plugin_group
+ * The Provider Base class is the class that has to be contained as a member 
+ * in all Plug-in Interfaces.
+ * 
+ * All of plug-ins should contain this class as a member and should also 
+ * contain a public method to get instance of this class. 
+ */
+class SmfProviderBase
+	{
+public:
+	/**
+	 * Destructor
+	 */
+	virtual ~SmfProviderBase( ) {}
+
+	/**
+	 * Method to get the Localisable name of the service.
+	 * @return The Localisable name of the service.
+	 */
+	virtual QString serviceName( ) const = 0;
+	
+	/**
+	 * Method to get the Logo of the service
+	 * @return The Logo of the service
+	 */
+	virtual QImage serviceIcon( ) const = 0;
+	
+	/**
+	 * Method to get the Readable service description
+	 * @return The Readable service description
+	 */
+	virtual QString description( ) const = 0;
+	
+	/**
+	 * Method to get the Website of the service
+	 * @return The Website of the service
+	 */
+	virtual QUrl serviceUrl( ) const = 0;
+	
+	/**
+	 * Method to get the URL of the Application providing this service
+	 * @return The URL of the Application providing this service
+	 */
+	virtual QUrl applicationUrl( ) const = 0;
+	
+	/**
+	 * Method to get the Icon of the application
+	 * @return The Icon of the application
+	 */
+	virtual QImage applicationIcon( ) const = 0;
+	
+	/**
+	 * Method to get the Plugin specific ID
+	 * @return The Plugin specific ID
+	 */
+	virtual QString pluginId( ) const = 0;
+	
+	/**
+	 * Method to get the ID of the authentication application 
+	 * for this service
+	 * @param aProgram The authentication application name
+	 * @param aArguments List of arguments required for authentication app
+	 * @param aMode Strting mode for authentication application
+	 * @return The ID of the authentication application 
+	 */
+	virtual QString authenticationApp( QString &aProgram, QStringList & aArguments, 
+			QIODevice::OpenModeFlag aMode = QIODevice::ReadWrite ) const = 0;
+	
+	/**
+	 * Method to get the unique registration ID provided by the 
+	 * Smf for authorised plugins
+	 * @return The unique registration ID/token provided by the Smf for 
+	 * authorised plugins
+	 */
+	virtual QString smfRegistrationId( ) const = 0;
+	};
+
+Q_DECLARE_INTERFACE( SmfProviderBase, "org.symbian.smf.plugin.smfproviderbase/v1.0" );
+
+#endif /* SMFPROVIDERBASE_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfserver.loc	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,13 @@
+// ============================================================================
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-18T15:52:55
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// ============================================================================
+
+#ifdef LANGUAGE_SC
+#define STRING_r_short_caption "smfserver"
+#define STRING_r_caption "smfserver"
+#else
+#define STRING_r_short_caption "smfserver"
+#define STRING_r_caption "smfserver"
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfserver.pro	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,48 @@
+TEMPLATE = app
+TARGET = smfserver 
+
+DEFINES += NO_OTHER_MODULES
+QT += core \
+    gui \
+    network \
+    sql
+
+ 
+CONFIG += mobility
+
+MOBILITY = contacts \
+    location \
+    bearer \
+    systeminfo
+    
+#include(datastoremgr/datastoremgr.pri)
+include(pluginmgr/pluginmgr.pri)
+include(server/server.pri)
+include(smfplugins/smfplugins.pri)
+include(transportmgr/transportmgr.pri)
+
+PUBLIC_HEADERS += \
+	smfserverglobal.h
+
+HEADERS += \
+    $$PUBLIC_HEADERS \
+    $$PRIVATE_HEADERS
+    
+SOURCES += \
+	main.cpp \
+	smfserver_reg.rss
+
+FORMS	  +=
+RESOURCES +=
+
+symbian: { 
+    TARGET.UID3 = 0xE5027327
+
+    TARGET.CAPABILITY = ReadUserData \
+        WriteUserData \
+        LocalServices \
+        NetworkServices \
+        UserEnvironment
+
+    LIBS += -lsmfclient.dll
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfserver_template.pkg	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,34 @@
+; smfserver_template.pkg generated by qmake at 2010-05-18T15:52:55
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"smfserver"},(0xE5027327),1,0,0
+
+; Localised Vendor name
+%{"Vendor"}
+
+; Unique Vendor name
+:"Vendor"
+
+; Manual PKG pre-rules from PRO files
+; Default HW/platform dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+ 
+; Default dependency to Qt libraries
+(0x2001E61C), 4, 6, 1, {"Qt"}
+; Default dependency to QtMobility libraries
+(0x2002AC89), 0, 2, 0, {"QtMobility"}
+
+; Executable and default resource files
+"/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/release/$(PLATFORM)/$(TARGET)/smfserver.exe"    - "!:\sys\bin\smfserver.exe"
+"/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/data/z/resource/apps/smfserver.rsc"    - "!:\resource\apps\smfserver.rsc"
+"/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/data/z/private/10003a3f/import/apps/smfserver_reg.rsc"    - "!:\private\10003a3f\import\apps\smfserver_reg.rsc"
+
+; Manual PKG post-rules from PRO files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/smfserverglobal.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,102 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * SMF Server wide global const and macros, to be shared among SMF components.
+ *
+ */
+
+#ifndef SMFSERVERGLOBAL_H_
+#define SMFSERVERGLOBAL_H_
+
+#include <QString>
+/**
+ * Enum declaration for Network status information
+ */
+enum SmfNetworkStatus
+	{
+	SmfNetworkConnectedHome = 0,
+	SmfNetworkConnectedRoaming,	// value = 1
+	SmfNetworkStateNotKnown,	// value = 2
+	SmfNetworkConnected,		// value = 3
+	SmfNetworkNotConnected		// value = 4
+	};
+
+/**
+ * Enum declaration for result of transport initialize operation
+ */
+enum SmfTransportInitializeResult
+	{
+	SmfTransportInitNetworkNotAvailable = 0,
+	SmfTransportInitRoamingNetworkUsageNotEnabled,	// value = 1
+	SmfTransportInitNoError							// value = 2
+	};
+
+/**
+ * The enumeration used to indicate result of plugin manager operations
+ */
+enum SmfPluginManagerResult
+	{
+	SmfPluginNoError = 0,
+	SmfPluginNotFound,
+	SmfPluginNotLoaded,
+	SmfPluginLoaded,
+	SmfPluginLoadError,
+	SmfPluginAuthorised,
+	SmfPluginNotAuthorised,
+	SmfPluginRequestCreated,
+	SmfPluginRequestCreationFailed,
+	SmfPluginUnknownService,
+	SmfPluginRequestSendingFailed,
+	SmfPluginSOPCheckFailed,
+	SmfPluginServiceError,
+	SmfPluginResponseParsed,
+	SmfPluginResponseParseFailure,
+	SmfPluginSendRequestAgain,
+	SmfPluginUnknownError
+	};
+
+/**
+ * The structure used to track the data usage of each plugins
+ */
+struct SmfPluginDataUsage
+	{
+	/**
+	 * Application that called the plugin
+	 */
+	QString iAppName;
+	
+	/**
+	 * Interface implemented by the plugin
+	 */
+	QString iInterfaceName;
+	
+	/**
+	 * The service provider
+	 */
+	QString iServiceProviderName;
+	
+	/**
+	 * number of bytes sent for this plugin
+	 */
+	uint iBytesSent;
+	
+	/**
+	 * number of bytes received for this plugin
+	 */
+	uint iBytesReceived;
+	
+	};
+
+#endif /* SMFSERVERGLOBAL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/transportmgr/smftransportmanager.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,202 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Transport Manager class initializes the transport component of Smf 
+ * framework
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+// Include files
+#include "smftransportmanager.h"
+#include "smftransportmanagerutil.h"
+
+// Static data initialisation
+SmfTransportManager* SmfTransportManager::m_myInstance = NULL;
+
+
+/**
+ * Method to get the instance of SmfTransportManager class
+ * @return The instance of SmfTransportManager class
+ */
+SmfTransportManager* SmfTransportManager::getInstance ( )
+	{
+	if(NULL == m_myInstance)
+		m_myInstance = new SmfTransportManager( );
+	return m_myInstance;
+	}
+
+/**
+ * Constructor with default argument
+ * @param aParent The parent object
+ */
+SmfTransportManager::SmfTransportManager ( )
+		: m_netwConfigMngr(this), m_systemInfo(this)
+	{
+	// Register for monitoring changes in IAPs (network configurations)
+	connect(&m_netwConfigMngr, SIGNAL(configurationAdded(const QNetworkConfiguration &)), 
+			this, SLOT(configurationAdded(const QNetworkConfiguration &)));
+	
+	connect(&m_netwConfigMngr, SIGNAL(configurationChanged(const QNetworkConfiguration &)), 
+			this, SLOT(configurationChanged(const QNetworkConfiguration &)));
+	
+	connect(&m_netwConfigMngr, SIGNAL(configurationRemoved(const QNetworkConfiguration &)), 
+			this, SLOT(configurationRemoved(const QNetworkConfiguration &)));
+	}
+
+
+/**
+ * Destructor
+ */
+SmfTransportManager::~SmfTransportManager ( )
+	{
+	if(m_myInstance)
+		delete m_myInstance;
+	}
+
+
+/**
+ * Method to initialize the transport component before 
+ * executing a web query
+ * @return SmfTransportInitializeResult
+ * @see smfglobal.h
+ */
+SmfTransportInitializeResult SmfTransportManager::initializeTransport ( )
+	{
+	SmfTransportInitializeResult retVal = SmfTransportInitNetworkNotAvailable;
+	
+	if(getNetworkAvailabilty())
+		{
+		retVal = SmfTransportInitNoError;
+		
+		SmfNetworkStatus status;
+		getCurrentNetworkStatus(status);
+		
+		switch(status)
+			{
+			// homenetwork
+			case SmfNetworkConnectedHome:
+			case SmfNetworkConnected:
+				break;
+
+			// roaming
+			case SmfNetworkConnectedRoaming:
+///////////// check with CSM for usage while roaming
+//// if enabled do nothing(i.e, retVal will be SmfTransportInitNoError)
+//// else retVal = SmfTransportInitRoamingNetworkUsageNotEnabled;
+/*				if(!iSmfServer->getNetworkUsageWhileRoamingSetting())
+					retVal = SmfTransportInitRoamingNetworkUsageNotEnabled;*/
+				break;
+						
+			// unknown state
+			case SmfNetworkStateNotKnown:
+			// network not available
+			case SmfNetworkNotConnected:
+			default :
+				retVal = SmfTransportInitNetworkNotAvailable;
+			}
+		}
+	return retVal;
+	}
+
+
+/* Method to get network availability.
+ * @return True if online, else false.
+ */
+bool SmfTransportManager::getNetworkAvailabilty ( )
+	{
+	return m_netwConfigMngr.isOnline();
+	}
+
+
+/*
+ * Method that checks if the phone is in home network or in roaming.
+ * @param aStatus [out] An output parameter indicating the current network 
+ * status as SmfNetworkStatus
+ * @see smfglobal.h
+ */
+void SmfTransportManager::getCurrentNetworkStatus ( 
+		SmfNetworkStatus &aStatus )
+	{
+	QSystemNetworkInfo::NetworkStatus status = m_systemInfo.networkStatus ( QSystemNetworkInfo::GsmMode );
+	
+	switch(status)
+		{
+		// homenetwork
+		case QSystemNetworkInfo::HomeNetwork:
+			aStatus = SmfNetworkConnectedHome;
+			break;
+		
+		// connected
+		case QSystemNetworkInfo::Connected:
+			aStatus = SmfNetworkConnected;
+			break;
+		
+		// roaming	
+		case QSystemNetworkInfo::Roaming:
+			aStatus = SmfNetworkConnectedRoaming;
+			break;
+			
+		// unknown state			
+		case QSystemNetworkInfo::Searching:
+		case QSystemNetworkInfo::Busy:
+			aStatus = SmfNetworkStateNotKnown;
+			break;
+
+		// network not available
+		case QSystemNetworkInfo::UndefinedStatus:
+		case QSystemNetworkInfo::NoNetworkAvailable:
+		case QSystemNetworkInfo::EmergencyOnly:
+		case QSystemNetworkInfo::Denied:
+		default :
+			aStatus = SmfNetworkNotConnected;
+		}
+	}
+
+
+
+/**
+ * This slot is called whenever a new network configuration is added to the system.
+ * @param aConfig The new configuration
+ */
+void SmfTransportManager::configurationAdded ( 
+		const QNetworkConfiguration &aConfig )
+	{
+	SmfTransportManagerUtil::getInstance()->configurationAdded(SmfTransportOpIAPChanged);
+	}
+
+/**
+ * This slot is called when the state of the aConfig changes.
+ * @param aConfig The changed configuration
+ */
+void SmfTransportManager::configurationChanged ( 
+		const QNetworkConfiguration &aConfig )
+	{
+	if( aConfig == m_netwConfigMngr.defaultConfiguration() )
+		SmfTransportManagerUtil::getInstance()->configurationChanged(SmfTransportOpIAPChanged);
+	}
+
+/**
+ * This slot is called when a configuration is about to be removed from the system.
+ * The removed configuration is invalid but retains name and identifier.
+ * @param aConfig The to be removed configuration
+ */
+void SmfTransportManager::configurationRemoved ( 
+		const QNetworkConfiguration &aConfig )
+	{
+	if( aConfig == m_netwConfigMngr.defaultConfiguration() )
+		SmfTransportManagerUtil::getInstance()->configurationRemoved(SmfTransportOpIAPChanged);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/transportmgr/smftransportmanager.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,127 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Transport Manager class initializes the transport component of Smf 
+ * framework
+ * Note: This class has dependencies on QtMobility project
+ *
+ */
+
+#ifndef SMFTRANSPORTMANAGER_H_
+#define SMFTRANSPORTMANAGER_H_
+
+// Include files
+#include <smfserverglobal.h>
+
+// Qt mobility classes
+#include <qnetworkconfigmanager.h>
+#include <qsysteminfo.h>
+
+using namespace QtMobility;
+
+/**
+ * The Transport Manager class initializes the transport component of Smf 
+ * framework
+ * 
+ * Note: This class has dependencies on QtMobility project
+ */
+class SmfTransportManager : public QObject
+	{
+	Q_OBJECT
+	
+public:
+	/**
+	 * Method to get the instance of SmfTransportManager class
+	 * @return The instance of SmfTransportManager class
+	 */
+	static SmfTransportManager* getInstance ( );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfTransportManager ( );
+	
+public slots:
+	/**
+	 * Method to initialize the transport component before 
+	 * executing a web query
+	 * @return SmfTransportInitializeResult
+	 * @see smfglobal.h
+	 */
+	SmfTransportInitializeResult initializeTransport ( );
+	
+	/*
+	 * This slot is called whenever a new network configuration is added to the system.
+	 * @param aConfig The new configuration
+	 */
+	void configurationAdded ( const QNetworkConfiguration &aConfig );
+
+	/*
+	 * This slot is called when the state of the aConfig changes.
+	 * @param aConfig The changed configuration
+	 */
+	void configurationChanged ( const QNetworkConfiguration &aConfig );
+
+	/*
+	 * This slot is called when a configuration is about to be removed from the system.
+	 * The removed configuration is invalid but retains name and identifier.
+	 * @param aConfig The to be removed configuration
+	 */
+	void configurationRemoved ( const QNetworkConfiguration &aConfig );
+	
+private:
+	/* Method to get network availability.
+	 * @return True if online, else false.
+	 */
+	bool getNetworkAvailabilty ( );
+	
+	/*
+	 * Method that checks if the phone is in home network or in roaming.
+	 * @param aStatus [out] An output parameter indicating the current network 
+	 * status as SmfNetworkStatus
+	 * @see smfglobal.h
+	 */
+	void getCurrentNetworkStatus ( SmfNetworkStatus &aStatus );
+	
+private:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfTransportManager ( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfTransportManager ( const SmfTransportManager &aOther );
+	
+private:
+	/**
+	 * The single instance of SmfTransportManager
+	 */
+	static SmfTransportManager* m_myInstance;
+	
+	/*
+	 * Member variable - QNetworkConfigurationManager instance
+	 */
+	QNetworkConfigurationManager m_netwConfigMngr;
+	
+	/*
+	 * Member variable - QSystemNetworkInfo instance
+	 */
+	QSystemNetworkInfo m_systemInfo;
+	};
+
+#endif /* SMFTRANSPORTMANAGER_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/transportmgr/smftransportmanagerutil.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,729 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Transport Manager Utility class provides the http/https transaction 
+ * methods for the smf framework
+ *
+ */
+
+// Include files
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
+#include <QSettings>
+#include <zlib.h>
+// For proxy settings on emulator only - REMOVE for device
+#include <QNetworkProxy>
+
+#include "smftransportmanagerutil.h"
+#include "smfpluginmanager.h"
+
+// Static Global constants
+static const char kSmfUserAgent[] = "SmfFrameWork";
+static const char kSmfCacheControl[] = "no-cache";
+static const char kSmfAcceptEncoding[] = "gzip";
+
+// Static data initialisation
+SmfTransportManagerUtil* SmfTransportManagerUtil::m_myInstance = NULL;
+
+/**
+ * Method to get the instance of SmfTransportManagerUtil class
+ * @return The instance of SmfTransportManager class
+ */
+SmfTransportManagerUtil* SmfTransportManagerUtil::getInstance ( )
+	{
+	if(NULL == m_myInstance)
+		m_myInstance = new SmfTransportManagerUtil( );
+	return m_myInstance;
+	}
+
+/**
+ * Constructor with default argument
+ * @param aParent The parent object
+ */
+SmfTransportManagerUtil::SmfTransportManagerUtil ( )
+		: m_networkAccessManager ( this )
+	{
+	// Storage of settings (Only data usage as of now)
+	m_settings = new QSettings("Sasken", "SmfTransportManager");
+
+	// Create the settings if no data is stored
+	if( !m_settings->contains("Sent Data") )
+		m_settings->setValue("Sent Data", 0);
+	if( !m_settings->contains("Received Data") )
+		m_settings->setValue("Received Data", 0);
+	}
+
+
+/**
+ * Destructor
+ */
+SmfTransportManagerUtil::~SmfTransportManagerUtil ( )
+	{
+	m_activeNetwReplyList.clear();
+	
+	if(m_settings)
+		delete m_settings;
+	
+	if(m_myInstance)
+		delete m_myInstance;
+	}
+
+
+/**
+ * Method that does a http GET request. Returns the unique QNetworkReply
+ * instance for this transaction to the plugin manager to trace the 
+ * proper response.
+ * @param aRequest The request formed by the plugin
+ * @param aUrlList The list of accessible Urls for this plugin
+ * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+ * Policy Compliance. Contains true if the request complies to the policy,
+ * else false. If it is false, the network request will not performed
+ * @return The unique QNetworkReply instance for this transaction
+ */
+QNetworkReply* SmfTransportManagerUtil::get ( 
+		QNetworkRequest &aRequest,
+		const QList<QUrl> &aUrlList,
+		bool &aSOPCompliant )
+	{
+	bool found = false;
+	QString hostName = aRequest.url().host();
+	
+	// Same Origin Policy checking
+	// Check if the host name of the url in the request created by the 
+	// plugin is among the authorised url host name list
+	foreach(QUrl url, aUrlList)
+		{
+		if(0 == hostName.compare(url.host()))
+			{
+			found = true;
+			break;
+			}
+		}
+	
+	if(found)
+		{
+		aSOPCompliant = true;
+		
+		// Set header to accept gzip encoded data
+		aRequest.setRawHeader("Accept-encoding", kSmfAcceptEncoding);
+		
+		// Set the cache control
+		aRequest.setRawHeader("Cache-Control", kSmfCacheControl);
+
+		// Put the same user agent for all requests sent by Smf
+		aRequest.setRawHeader("User-Agent", kSmfUserAgent);
+		
+		QNetworkReply* reply = m_networkAccessManager.get(aRequest);
+	
+		connect(&m_networkAccessManager, SIGNAL(finished(QNetworkReply *)), 
+				this, SLOT(networkReplyFinished(QNetworkReply *)));
+		
+		connect(&m_networkAccessManager, SIGNAL(error(QNetworkReply::NetworkError)), 
+				this, SLOT(networkReplyError(QNetworkReply::NetworkError)));
+		
+		m_activeNetwReplyList.append(reply);
+		
+		return reply;
+		}
+	else
+		{
+		// Error :: SAME ORIGIN POLICY violation!!!
+		aSOPCompliant = false;
+		return NULL;
+		}
+	}
+
+
+/**
+ * Method that does a http POST request. Returns the unique QNetworkReply
+ * instance for this transaction to the plugin manager to trace the 
+ * proper response.
+ * @param aRequest The request formed by the plugin
+ * @param aPostData The data to be posted via http POST request
+ * @param aUrlList The list of accessible Urls for this plugin
+ * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+ * Policy Compliance. Contains true if the request complies to the policy,
+ * else false. If it is false, the network request will not performed
+ * @return The unique QNetworkReply instance for this transaction
+ */
+QNetworkReply* SmfTransportManagerUtil::post ( 
+		QNetworkRequest &aRequest, 
+		const QByteArray& aPostData,
+		const QList<QUrl> &aUrlList,
+		bool &aSOPCompliant )
+	{
+	bool found = false;
+	QString hostName = aRequest.url().host();
+	
+	// Same Origin Policy checking
+	// Check if the host name of the url in the request created by the 
+	// plugin is among the authorised url host name list
+	foreach(QUrl url, aUrlList)
+		{
+		if(0 == hostName.compare(url.host()))
+			{
+			found = true;
+			break;
+			}
+		}
+	
+	if(found)
+		{
+		aSOPCompliant = true;
+		
+		// Set the cache control
+		aRequest.setRawHeader("Cache-Control", kSmfCacheControl);
+		
+		// Put the same user agent for all requests sent by Smf
+		aRequest.setRawHeader("User-Agent", kSmfUserAgent);
+		
+		QNetworkReply* reply = m_networkAccessManager.post(aRequest, aPostData);
+	
+		connect(&m_networkAccessManager, SIGNAL(finished(QNetworkReply *)), 
+				this, SLOT(networkReplyFinished(QNetworkReply *)));
+		
+		connect(&m_networkAccessManager, SIGNAL(error(QNetworkReply::NetworkError)), 
+				this, SLOT(networkReplyError(QNetworkReply::NetworkError)));
+		
+		m_activeNetwReplyList.append(reply);
+		
+		return reply;
+		}
+	else
+		{
+		// Error :: SAME ORIGIN POLICY violation!!!
+		aSOPCompliant = false;
+		return NULL;
+		}
+	}
+
+
+/**
+ * Method that does a http HEAD request. Returns the unique QNetworkReply
+ * instance for this transaction to the plugin manager to trace the 
+ * proper response.
+ * @param aRequest The request formed by the plugin
+ * @param aUrlList The list of accessible Urls for this plugin
+ * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+ * Policy Compliance. Contains true if the request complies to the policy,
+ * else false. If it is false, the network request will not performed
+ * @return The unique QNetworkReply instance for this transaction
+ */
+QNetworkReply* SmfTransportManagerUtil::head ( 
+		QNetworkRequest& aRequest,
+		const QList<QUrl> &aUrlList,
+		bool &aSOPCompliant )
+	{
+	bool found = false;
+	QString hostName = aRequest.url().host();
+
+	// Same Origin Policy checking
+	// Check if the host name of the url in the request created by the 
+	// plugin is among the authorised url host name list
+	foreach(QUrl url, aUrlList)
+		{
+		if(0 == hostName.compare(url.host()))
+			{
+			found = true;
+			break;
+			}
+		}
+	
+	if(found)
+		{
+		aSOPCompliant = true;
+		// Set the cache control
+		aRequest.setRawHeader("Cache-Control", kSmfCacheControl);
+		
+		// Put the same user agent for all requests sent by Smf
+		aRequest.setRawHeader("User-Agent", kSmfUserAgent);
+		
+		QNetworkReply* reply = m_networkAccessManager.head(aRequest);
+	
+		connect(&m_networkAccessManager, SIGNAL(finished(QNetworkReply *)), 
+				this, SLOT(networkReplyFinished(QNetworkReply *)));
+		
+		connect(&m_networkAccessManager, SIGNAL(error(QNetworkReply::NetworkError)), 
+				this, SLOT(networkReplyError(QNetworkReply::NetworkError)));
+		
+		m_activeNetwReplyList.append(reply);
+		
+		return reply;
+		}
+	else
+		{
+		// Error :: SAME ORIGIN POLICY violation!!!
+		aSOPCompliant = false;
+		return NULL;
+		}
+	}
+
+
+/**
+ * Method that does a http PUT request. Returns the unique QNetworkReply
+ * instance for this transaction to the plugin manager to trace the 
+ * proper response.
+ * @param aRequest The request formed by the plugin
+ * @param aPostData The data to be posted via http PUT request
+ * @param aUrlList The list of accessible Urls for this plugin
+ * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+ * Policy Compliance. Contains true if the request complies to the policy,
+ * else false. If it is false, the network request will not performed
+ * @return The unique QNetworkReply instance for this transaction
+ */
+QNetworkReply* SmfTransportManagerUtil::put ( 
+		QNetworkRequest &aRequest,
+		const QByteArray& aPostData,
+		const QList<QUrl> &aUrlList,
+		bool &aSOPCompliant )
+	{
+	bool found = false;
+	QString hostName = aRequest.url().host();
+
+	// Same Origin Policy checking
+	// Check if the host name of the url in the request created by the 
+	// plugin is among the authorised url host name list
+	foreach(QUrl url, aUrlList)
+		{
+		if(0 == hostName.compare(url.host()))
+			{
+			found = true;
+			break;
+			}
+		}
+	
+	if(found)
+		{
+		aSOPCompliant = true;
+		// Set the cache control
+		aRequest.setRawHeader("Cache-Control", kSmfCacheControl);
+		
+		// Put the same user agent for all requests sent by Smf
+		aRequest.setRawHeader("User-Agent", kSmfUserAgent);
+		
+		QNetworkReply* reply = m_networkAccessManager.put(aRequest, aPostData);
+	
+		connect(&m_networkAccessManager, SIGNAL(finished(QNetworkReply *)), 
+				this, SLOT(networkReplyFinished(QNetworkReply *)));
+		
+		connect(&m_networkAccessManager, SIGNAL(error(QNetworkReply::NetworkError)), 
+				this, SLOT(networkReplyError(QNetworkReply::NetworkError)));
+		
+		m_activeNetwReplyList.append(reply);
+		
+		return reply;
+		}
+	else
+		{
+		// Error :: SAME ORIGIN POLICY violation!!!
+		aSOPCompliant = false;
+		return NULL;
+		}
+	}
+
+
+/**
+ * Method that does a http DELETE request. Returns the unique QNetworkReply
+ * instance for this transaction to the plugin manager to trace the 
+ * proper response.
+ * @param aRequest The request formed by the plugin
+ * @param aUrlList The list of accessible Urls for this plugin
+ * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+ * Policy Compliance. Contains true if the request complies to the policy,
+ * else false. If it is false, the network request will not performed
+ * @return The unique QNetworkReply instance for this transaction
+ */
+QNetworkReply* SmfTransportManagerUtil::deleteResource ( 
+		QNetworkRequest &aRequest,
+		const QList<QUrl> &aUrlList,
+		bool &aSOPCompliant )
+	{
+	bool found = false;
+	QString hostName = aRequest.url().host();
+
+	// Same Origin Policy checking
+	// Check if the host name of the url in the request created by the 
+	// plugin is among the authorised url host name list
+	foreach(QUrl url, aUrlList)
+		{
+		if(0 == hostName.compare(url.host()))
+			{
+			found = true;
+			break;
+			}
+		}
+	
+	if(found)
+		{
+		aSOPCompliant = true;
+		// Set the cache control
+		aRequest.setRawHeader("Cache-Control", kSmfCacheControl);
+		
+		// Put the same user agent for all requests sent by Smf
+		aRequest.setRawHeader("User-Agent", kSmfUserAgent);
+		
+		QNetworkReply* reply = m_networkAccessManager.deleteResource(aRequest);
+	
+		connect(&m_networkAccessManager, SIGNAL(finished(QNetworkReply *)), 
+				this, SLOT(networkReplyFinished(QNetworkReply *)));
+		
+		connect(&m_networkAccessManager, SIGNAL(error(QNetworkReply::NetworkError)), 
+				this, SLOT(networkReplyError(QNetworkReply::NetworkError)));
+		
+		m_activeNetwReplyList.append(reply);
+		
+		return reply;
+		}
+	else
+		{
+		// Error :: SAME ORIGIN POLICY violation!!!
+		aSOPCompliant = false;
+		return NULL;
+		}
+	}
+
+
+/**
+ * Method that cancels the service request by cancelling the current 
+ * http transaction.
+ * @param aCancelReply The QNetworkReply instance whose transaction 
+ * has to be cancelled
+ * @return Returns true for success, else false 
+ */
+bool SmfTransportManagerUtil::cancelRequest ( 
+		QNetworkReply *aCancelReply )
+	{
+	// Checks if this transaction is running
+	if( aCancelReply->isRunning() )
+		{
+		// Aborts the running transaction
+		aCancelReply->abort();
+		}
+	// Close the connection
+	aCancelReply->close();
+	
+	int index = m_activeNetwReplyList.indexOf(aCancelReply);
+	if( index >= 0 )
+		m_activeNetwReplyList.removeAt(index);
+	
+	return true;
+	}
+
+
+
+/*
+ * Method that is called whenever a new network configuration is added to the system.
+ * @param aResult SmfTransportResult
+ */
+void SmfTransportManagerUtil::configurationAdded ( const SmfTransportResult &aResult )
+	{
+	// Inform PM and plugins that a new IAP ia added, and hence resend the request
+	SmfPluginManager::getInstance()->responseAvailable ( aResult, NULL, NULL );
+	}
+
+/*
+ * Method that is called when the state of the network configuration changes.
+ * @param aResult SmfTransportResult
+ */
+void SmfTransportManagerUtil::configurationChanged ( const SmfTransportResult &aResult )
+	{
+	// Inform PM and plugins that the IAP is changed, and hence resend the request
+	SmfPluginManager::getInstance()->responseAvailable ( aResult, NULL, NULL );
+	}
+
+/*
+ * Method that is called when a configuration is about to be removed from the system.
+ * The removed configuration is invalid but retains name and identifier.
+ * @param aResult SmfTransportResult
+ */
+void SmfTransportManagerUtil::configurationRemoved ( const SmfTransportResult &aResult )
+	{
+	// Inform PM and plugins that the IAP is to be deleted, and 
+	// hence resend the request
+	SmfPluginManager::getInstance()->responseAvailable ( aResult, NULL, NULL );
+
+	}
+
+
+/**
+ * Method to indicate the http transaction has finished.
+ * @param aNetworkReply The QNetworkReply instance for which the http 
+ * transaction was made
+ */
+void SmfTransportManagerUtil::networkReplyFinished ( QNetworkReply *aNetworkReply )
+	{
+	// remove the QNetworkReply instance from the list of outstanding transactions
+	int index = m_activeNetwReplyList.indexOf(aNetworkReply);
+	if( index >= 0 )
+		m_activeNetwReplyList.removeAt(index);
+	
+	// indicate the result of transaction to the plugin manager
+	SmfTransportResult trResult;
+	convertErrorType(aNetworkReply->error(), trResult);
+	
+	// Store the data received
+	bool converted = false;
+	quint64 data = m_settings->value("Received Data").toULongLong(&converted);
+	if(converted)
+		{
+		data += aNetworkReply->readBufferSize();
+		m_settings->setValue("Received Data", data);
+		}
+
+	int error = 0;
+	QByteArray *arr = NULL;
+	
+	// Read the response from the device
+	QByteArray response = aNetworkReply->readAll();
+	
+	// Check if the http response header has the raw header "Content-Encoding:gzip"
+	// If so, inflate the gzip deflated data
+	QByteArray headerKey("Content-Encoding");
+	if(aNetworkReply->hasRawHeader(headerKey))
+		{
+		SmfPluginManager::getInstance()->server()->writeLog("Response is gzip encoded!!!");
+		if( "gzip" == QString(aNetworkReply->rawHeader(headerKey)))
+			arr = inflateResponse(response, error);
+		else
+			SmfPluginManager::getInstance()->server()->writeLog("Unsupported encoding format!!! - error");
+		}
+	else
+		SmfPluginManager::getInstance()->server()->writeLog("Response is not gzip encoded");
+	
+
+	SmfPluginManager::getInstance()->responseAvailable ( trResult, aNetworkReply, arr );
+	}
+
+
+/**
+ * Method to deflate a gzipped network response. Once this method is called, 
+ * QNetworkReply internal buffer for holding network response is emptied.
+ * @param aResponse The QByteArray instance holding the gzip encoded data
+ * @param aError Argument indicating error
+ * @return a QByteArray* containing the deflated data. If deflating fails, 
+ * the encoded data itself without deflation is returned.
+ */
+QByteArray* SmfTransportManagerUtil::inflateResponse ( QByteArray &aResponse, int& aError )
+	{
+	Q_UNUSED(aError)
+	// Read the response from the device
+	SmfPluginManager::getInstance()->server()->writeLog("Encoded response content = "+QString(aResponse.toHex()));
+	SmfPluginManager::getInstance()->server()->writeLog("Encoded response content size = "+QString::number(aResponse.size(), 10));
+	
+	// Get the uncompressed size of the response (last 4 bytes of the compressed data as per GZIP format spec)
+	QByteArray sizeStr;
+	for(int count = 1 ; count <= 4 ; count++)
+		sizeStr.append(aResponse[aResponse.size()-count]);
+	SmfPluginManager::getInstance()->server()->writeLog("Size string as a string = "+QString(sizeStr.toHex()));
+	bool ok = false;
+	int uncomSize = sizeStr.toHex().toInt(&ok, 16);
+	SmfPluginManager::getInstance()->server()->writeLog("Size of uncompressed data = "+QString::number(uncomSize, 10));
+
+	// Initialize the data required for zlib method call
+	z_stream stream;
+	unsigned char *out = new unsigned char[uncomSize];
+	if(out)
+		SmfPluginManager::getInstance()->server()->writeLog("Memory allocated for output buffer");
+	else
+		{
+		//Error
+		SmfPluginManager::getInstance()->server()->writeLog("Memory not allocated for output buffer!!!");
+		return NULL;
+		}
+	stream.zalloc = Z_NULL;
+	stream.zfree = Z_NULL;
+	stream.opaque = Z_NULL;
+	stream.avail_in = 0;
+	stream.next_in = Z_NULL;
+	
+	int ret = inflateInit2(&stream, 16+MAX_WBITS);
+	SmfPluginManager::getInstance()->server()->writeLog("return value of inflateInit2() = "+QString::number(ret, 10));
+	if(Z_OK != ret)
+		{
+		SmfPluginManager::getInstance()->server()->writeLog("Error in inflateInit2, returning...");
+		delete[] out;
+		return NULL;
+		}
+
+	// Initialize the data required for inflate() method call
+	stream.avail_in = aResponse.size();
+	stream.next_in = (unsigned char *)aResponse.data();
+	stream.avail_out = uncomSize;
+	stream.next_out = out;
+	
+	ret = inflate(&stream, Z_NO_FLUSH);
+	SmfPluginManager::getInstance()->server()->writeLog("return value of inflate() = "+QString::number(ret, 10));
+	
+	switch (ret) 
+		{
+		// fall through
+		case Z_NEED_DICT:
+		case Z_DATA_ERROR:
+		case Z_MEM_ERROR:
+			{
+			(void)inflateEnd(&stream);
+			delete[] out;
+			return NULL;
+			}
+		}
+
+	SmfPluginManager::getInstance()->server()->writeLog("total bytes read so far = "+QString::number(stream.total_in, 10));
+	SmfPluginManager::getInstance()->server()->writeLog("total bytes output so far = "+QString::number(stream.total_out, 10));
+
+	// Write the inflated data to a QByteArray
+	QByteArray *uncompressedData = new QByteArray((char *)out);
+	delete[] out;
+	
+	// If there is some unwanted data at the end of uncompressed data, chop them
+	int chopLength = uncompressedData->size() - uncomSize;
+	SmfPluginManager::getInstance()->server()->writeLog("uncompressedData before chopping = "+QString(uncompressedData->toHex()));
+	SmfPluginManager::getInstance()->server()->writeLog("old size of uncompressed data = "+QString::number(uncompressedData->size(), 10));
+	uncompressedData->chop(chopLength);
+	SmfPluginManager::getInstance()->server()->writeLog("new size of uncompressed data = "+QString::number(uncompressedData->size(), 10));
+	SmfPluginManager::getInstance()->server()->writeLog("uncompressedData after chopping = "+QString(uncompressedData->toHex()));
+
+	// Write the uncompressed data to a file
+	QFile file1("c:\\data\\uncompressedflickrresponse.txt");
+	if (!file1.open(QIODevice::WriteOnly))
+		SmfPluginManager::getInstance()->server()->writeLog("File to write the uncompressed response could not be opened");
+	file1.write(uncompressedData->data());
+	file1.close();
+	SmfPluginManager::getInstance()->server()->writeLog("uncompressed data written to c:\\data\\uncompressedflickrresponse.txt");
+	
+	return uncompressedData;
+	}
+
+/**
+ * Method called when the QNetworkReply detects an error in processing.
+ * @param aError The QNetworkReply error code 
+ */
+void SmfTransportManagerUtil::networkReplyError ( QNetworkReply::NetworkError aError )
+	{
+	// indicate the error to the plugin manager
+	SmfTransportResult trResult;
+	convertErrorType(aError, trResult);
+	
+	SmfPluginManager::getInstance()->responseAvailable ( trResult, NULL, NULL );
+	}
+
+
+/**
+ * Method to convert QNetworkReply Error to the type SmfTransportResult 
+ * QNetworkRequest received before executing the web query.
+ * @param aError The QNetworkReply Error
+ * @param aResult [out] The SmfTransportResult error
+ */
+void SmfTransportManagerUtil::convertErrorType( const QNetworkReply::NetworkError &aError, 
+		SmfTransportResult &aResult )
+	{
+	switch(aError)
+		{
+		case QNetworkReply::NoError:
+			aResult = SmfTransportOpNoError;
+			break;
+			
+		case QNetworkReply::ConnectionRefusedError:
+			aResult = SmfTransportOpConnectionRefusedError;
+			break;
+			
+		case QNetworkReply::RemoteHostClosedError:
+			aResult = SmfTransportOpRemoteHostClosedError;
+			break;
+			
+		case QNetworkReply::HostNotFoundError:
+			aResult = SmfTransportOpHostNotFoundError;
+			break;
+			
+		case QNetworkReply::TimeoutError:
+			aResult = SmfTransportOpTimeoutError;
+			break;
+			
+		case QNetworkReply::OperationCanceledError:
+			aResult = SmfTransportOpOperationCanceledError;
+			break;
+			
+		case QNetworkReply::SslHandshakeFailedError:
+			aResult = SmfTransportOpSslHandshakeFailedError;
+			break;
+			
+		case QNetworkReply::ProxyConnectionRefusedError:
+			aResult = SmfTransportOpProxyConnectionRefusedError;
+			break;
+			
+		case QNetworkReply::ProxyConnectionClosedError:
+			aResult = SmfTransportOpProxyConnectionClosedError;
+			break;
+			
+		case QNetworkReply::ProxyNotFoundError:
+			aResult = SmfTransportOpProxyNotFoundError;
+			break;
+			
+		case QNetworkReply::ProxyTimeoutError:
+			aResult = SmfTransportOpProxyTimeoutError;
+			break;
+			
+		case QNetworkReply::ProxyAuthenticationRequiredError:
+			aResult = SmfTransportOpProxyAuthenticationRequiredError;
+			break;
+			
+		case QNetworkReply::ContentAccessDenied:
+			aResult = SmfTransportOpContentAccessDenied;
+			break;
+			
+		case QNetworkReply::ContentOperationNotPermittedError:
+			aResult = SmfTransportOpContentOperationNotPermittedError;
+			break;
+			
+		case QNetworkReply::ContentNotFoundError:
+			aResult = SmfTransportOpContentNotFoundError;
+			break;
+			
+		case QNetworkReply::AuthenticationRequiredError:
+			aResult = SmfTransportOpAuthenticationRequiredError;
+			break;
+			
+		case QNetworkReply::ContentReSendError:
+			aResult = SmfTransportOpContentReSendError;
+			break;
+			
+		case QNetworkReply::ProtocolUnknownError:
+			aResult = SmfTransportOpProtocolUnknownError;
+			break;
+
+		case QNetworkReply::ProtocolInvalidOperationError:
+			aResult = SmfTransportOpProtocolInvalidOperationError;
+			break;
+			
+		case QNetworkReply::UnknownNetworkError:
+			aResult = SmfTransportOpUnknownNetworkError;
+			break;
+			
+		case QNetworkReply::UnknownProxyError:
+			aResult = SmfTransportOpUnknownProxyError;
+			break;
+			
+		case QNetworkReply::UnknownContentError:
+			aResult = SmfTransportOpUnknownContentError;
+			break;
+			
+		case QNetworkReply::ProtocolFailure:
+			aResult = SmfTransportOpProtocolFailure;
+			break;
+			
+		default:
+			;
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/transportmgr/smftransportmanagerutil.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,233 @@
+/**
+ * Copyright (c) 2010 Sasken Communication Technologies Ltd.
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the "Eclipse Public License v1.0" 
+ * which accompanies  this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html"
+ *
+ * Initial Contributors:
+ * Chandradeep Gandhi, Sasken Communication Technologies Ltd - Initial contribution
+ *
+ * Contributors:
+ * Manasij Roy, Nalina Hariharan
+ * 
+ * Description:
+ * The Transport Manager Utility class provides the http/https transaction 
+ * methods for the smf framework
+ *
+ */
+
+#ifndef SMFTRANSPORTMANAGERUTIL_H_
+#define SMFTRANSPORTMANAGERUTIL_H_
+
+#include <QNetworkReply>
+#include <smfglobal.h>
+#include <smfserverglobal.h>
+
+// Forward declaration
+class QNetworkAccessManager;
+class QSettings;
+
+/**
+ * The Transport Manager Utility class provides the http/https transaction 
+ * methods for the smf framework
+ * 
+ */
+class SmfTransportManagerUtil : public QObject
+	{
+	Q_OBJECT
+	
+public:
+	/**
+	 * Method to get the instance of SmfTransportManagerUtil class
+	 * @return The instance of SmfTransportManagerUtil class
+	 */
+	static SmfTransportManagerUtil* getInstance ( );
+	
+	/**
+	 * Destructor
+	 */
+	~SmfTransportManagerUtil ( );
+	
+
+public:
+	/**
+	 * Method that does a http GET request. Returns the unique QNetworkReply
+	 * instance for this transaction to the plugin manager to trace the 
+	 * proper response.
+	 * @param aRequest The request formed by the plugin
+	 * @param aUrlList The list of accessible Urls for this plugin
+	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+	 * Policy Compliance. Contains true if the request complies to the policy,
+	 * else false. If it is false, the network request will not performed
+	 * @return The unique QNetworkReply instance for this transaction
+	 */
+    QNetworkReply* get ( QNetworkRequest &aRequest,
+    		const QList<QUrl> &aUrlList,
+    		bool &aSOPCompliant );
+
+	/**
+	 * Method that does a http POST request. Returns the unique QNetworkReply
+	 * instance for this transaction to the plugin manager to trace the 
+	 * proper response.
+	 * @param aRequest The request formed by the plugin
+	 * @param aPostData The data to be posted via http POST request
+	 * @param aUrlList The list of accessible Urls for this plugin
+	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+	 * Policy Compliance. Contains true if the request complies to the policy,
+	 * else false. If it is false, the network request will not performed
+	 * @return The unique QNetworkReply instance for this transaction
+	 */
+    QNetworkReply* post ( QNetworkRequest &aRequest, 
+    		const QByteArray& aPostData,
+    		const QList<QUrl> &aUrlList,
+    		bool &aSOPCompliant );
+    
+	/**
+	 * Method that does a http HEAD request. Returns the unique QNetworkReply
+	 * instance for this transaction to the plugin manager to trace the 
+	 * proper response.
+	 * @param aRequest The request formed by the plugin
+	 * @param aUrlList The list of accessible Urls for this plugin
+	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+	 * Policy Compliance. Contains true if the request complies to the policy,
+	 * else false. If it is false, the network request will not performed
+	 * @return The unique QNetworkReply instance for this transaction
+	 */
+    QNetworkReply* head ( QNetworkRequest &aRequest,
+    		const QList<QUrl> &aUrlList,
+    		bool &aSOPCompliant );
+    
+	/**
+	 * Method that does a http PUT request. Returns the unique QNetworkReply
+	 * instance for this transaction to the plugin manager to trace the 
+	 * proper response.
+	 * @param aRequest The request formed by the plugin
+	 * @param aPostData The data to be posted via http PUT request
+	 * @param aUrlList The list of accessible Urls for this plugin
+	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+	 * Policy Compliance. Contains true if the request complies to the policy,
+	 * else false. If it is false, the network request will not performed
+	 * @return The unique QNetworkReply instance for this transaction
+	 */
+    QNetworkReply* put ( QNetworkRequest &aRequest,
+    		const QByteArray& aPostData,
+    		const QList<QUrl> &aUrlList,
+    		bool &aSOPCompliant );
+	
+	/**
+	 * Method that does a http DELETE request. Returns the unique QNetworkReply
+	 * instance for this transaction to the plugin manager to trace the 
+	 * proper response.
+	 * @param aRequest The request formed by the plugin
+	 * @param aUrlList The list of accessible Urls for this plugin
+	 * @param aSOPCompliant [out] Output parameter indicating Same Origin 
+	 * Policy Compliance. Contains true if the request complies to the policy,
+	 * else false. If it is false, the network request will not performed
+	 * @return The unique QNetworkReply instance for this transaction
+	 */
+    QNetworkReply* deleteResource ( QNetworkRequest &aRequest,
+    		const QList<QUrl> &aUrlList,
+    		bool &aSOPCompliant );
+    
+	/**
+	 * Method that cancels the service request by cancelling the current 
+	 * http transaction.
+	 * @param aCancelReply The QNetworkReply instance whose transaction 
+	 * has to be cancelled
+	 * @return Returns true for success, else false 
+	 */
+	bool cancelRequest ( QNetworkReply *aCancelReply );
+	
+public slots:
+	/*
+	 * Method that is called whenever a new network configuration is added to the system.
+	 * @param aResult SmfTransportResult
+	 */
+	void configurationAdded ( const SmfTransportResult &aResult );
+
+	/*
+	 * Method that is called when the state of the network configuration changes.
+	 * @param aResult SmfTransportResult
+	 */
+	void configurationChanged ( const SmfTransportResult &aResult );
+
+	/*
+	 * Method that is called when a configuration is about to be removed from the system.
+	 * The removed configuration is invalid but retains name and identifier.
+	 * @param aResult SmfTransportResult
+	 */
+	void configurationRemoved ( const SmfTransportResult &aResult );
+	
+private slots:
+	/**
+	 * Method to indicate http transaction has finished.
+	 * @param aNetworkReply The QNetworkReply instance for which the http 
+	 * transaction was made
+	 */
+	void networkReplyFinished ( QNetworkReply *aNetworkReply );
+	
+	/**
+	 * Method called when the QNetworkReply detects an error in processing.
+	 * @param aError The QNetworkReply error code 
+	 */
+	void networkReplyError ( QNetworkReply::NetworkError aError );
+	
+private:
+	/**
+	 * Method to convert QNetworkReply Error to the type SmfTransportResult 
+	 * QNetworkRequest received before executing the web query.
+	 * @param aError The QNetworkReply Error
+	 * @param aResult [out] The SmfTransportResult error
+	 */
+	void convertErrorType( const QNetworkReply::NetworkError &aError,  
+			SmfTransportResult &aResult );
+	
+	/**
+	 * Method to deflate a gzipped network response. Once this method is called, 
+	 * QNetworkReply internal buffer for holding network response is emptied.
+	 * @param aResponse The QByteArray instance holding the gzip encoded data
+	 * @param aError Argument indicating error
+	 * @return a QByteArray* containing the deflated data. If deflating fails, 
+	 * the encoded data itself without deflation is returned.
+	 */
+	QByteArray* inflateResponse ( QByteArray &aResponse, int& aError );
+	
+private:
+	/**
+	 * Constructor with default argument
+	 */
+	SmfTransportManagerUtil ( );
+	
+	/**
+	 * Copy Constructor
+	 * @param aOther The reference object
+	 */
+	SmfTransportManagerUtil ( const SmfTransportManagerUtil &aOther );
+	
+private:
+	/**
+	 * The single instance of SmfTransportManagerUtil
+	 */
+	static SmfTransportManagerUtil* m_myInstance;
+	
+	/**
+	 * Member variable - QNetworkAccessManager instance
+	 */
+	QNetworkAccessManager m_networkAccessManager;
+	
+	/**
+	 * Member variable - List of QNetworkReply awaiting response
+	 */
+	QList<QNetworkReply *> m_activeNetwReplyList;
+	
+	/**
+	 * Member variable - instance of QSettings that stores network 
+	 * data usage of Smf
+	 */
+	QSettings *m_settings;
+	};
+
+
+#endif /* SMFTRANSPORTMANAGERUTIL_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfserver/transportmgr/transportmgr.pri	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,10 @@
+INCLUDEPATH += transportmgr \
+    ./
+
+PUBLIC_HEADERS += \
+	transportmgr/smftransportmanager.h \
+	transportmgr/smftransportmanagerutil.h
+
+SOURCES += \
+	transportmgr/smftransportmanager.cpp \
+	transportmgr/smftransportmanagerutil.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/smfservermodule.pro	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,4 @@
+TEMPLATE  = 	subdirs
+
+SUBDIRS   =	smfserver \
+		smfclient
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/ABLD.BAT	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\CarbideWorkspace\TestQJson\qjson\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/CMakeLists.txt	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,81 @@
+PROJECT(qjson)
+
+set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII" )
+
+# Stop cmake 2.6 from whining
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+IF(COMMAND cmake_policy)
+  CMAKE_POLICY(SET CMP0003 NEW)
+ENDIF(COMMAND cmake_policy)
+
+# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules")
+
+set(CMAKE_INSTALL_NAME_DIR ${LIB_INSTALL_DIR})
+
+# compile in debug mode
+IF(NOT CMAKE_BUILD_TYPE)
+  SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
+      "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
+      FORCE)
+ENDIF(NOT CMAKE_BUILD_TYPE)
+
+IF("${CMAKE_BUILD_TYPE}" MATCHES "^Rel.*")
+  ADD_DEFINITIONS("-DQT_NO_DEBUG_OUTPUT")
+  ADD_DEFINITIONS("-DQT_NO_DEBUG_OUTPUT")
+ENDIF("${CMAKE_BUILD_TYPE}" MATCHES "^Rel.*")
+
+# Ability to disable verbose debug output
+IF(QJSON_VERBOSE_DEBUG_OUTPUT)
+  ADD_DEFINITIONS("-DQJSON_VERBOSE_DEBUG_OUTPUT")
+endif(QJSON_VERBOSE_DEBUG_OUTPUT)
+
+# Find Qt4
+FIND_PACKAGE( Qt4 REQUIRED )
+
+SET( QT_DONT_USE_QTGUI TRUE )
+
+#add extra search paths for libraries and includes
+SET (LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" )
+SET (LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE STRING "Directory where lib will install")
+SET (INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "The directory the headers are installed in")
+SET (CMAKE_MODULES_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/apps/cmake/modules" CACHE PATH "The directory to install FindQRpc.cmake to")
+
+
+set(QJSON_LIB_MAJOR_VERSION "0")
+set(QJSON_LIB_MINOR_VERSION "7")
+set(QJSON_LIB_PATCH_VERSION "1")
+
+set(QJSON_LIB_VERSION_STRING "${QJSON_LIB_MAJOR_VERSION}.${QJSON_LIB_MINOR_VERSION}.${QJSON_LIB_PATCH_VERSION}")
+
+set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib${LIB_SUFFIX}" )
+
+# pkg-config
+IF (NOT WIN32)
+  CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR}/QJson.pc.in
+                  ${CMAKE_CURRENT_BINARY_DIR}/QJson.pc
+                  @ONLY)
+  INSTALL (FILES ${CMAKE_CURRENT_BINARY_DIR}/QJson.pc
+           DESTINATION lib${LIB_SUFFIX}/pkgconfig)
+ENDIF (NOT WIN32)
+
+# Include the cmake file needed to use qt4
+INCLUDE( ${QT_USE_FILE} )
+
+# Subdirs
+ADD_SUBDIRECTORY(src)
+IF (KDE4_BUILD_TESTS OR QJSON_BUILD_TESTS)
+  enable_testing()
+  ADD_SUBDIRECTORY(tests)
+ENDIF (KDE4_BUILD_TESTS OR QJSON_BUILD_TESTS)
+
+add_subdirectory(cmake/modules)
+
+
+#CONFIGURE_FILE(
+#  "${CMAKE_MODULE_PATH}/cmake_uninstall.cmake.in"
+#  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+#  IMMEDIATE @ONLY)
+
+#ADD_CUSTOM_TARGET(uninstall
+#  "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/COPYING	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,504 @@
+		  GNU LESSER GENERAL PUBLIC LICENSE
+		       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+		  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+			    NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/INSTALL	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,18 @@
+Installing QJson
+--------------
+
+QJson requires:
+- Qt 4.0 or greater
+- cmake 2.6 or greater
+
+For Unix/Linux/Mac:
+
+  mkdir build
+  cd build
+  cmake -DCMAKE_INSTALL_PREFIX=_preferred_path_ ..
+  make
+  make install
+  /sbin/ldconfig, if necessary
+
+Please report problems to:
+  https://lists.sourceforge.net/mailman/listinfo/qjson-devel
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/Makefile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,171 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.1) on: Mon May 17 12:46:26 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+#  Name        : Makefile
+#  Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE          = Makefile
+QMAKE             = d:\Qt\4.6.1\bin\qmake
+DEL_FILE          = del
+DEL_DIR           = rmdir
+MOVE              = move
+XCOPY             = xcopy /d /f /h /r /y /i
+ABLD              = ABLD.BAT
+DEBUG_PLATFORMS   = winscw gcce armv5 armv6
+RELEASE_PLATFORMS = gcce armv5 armv6
+MAKE              = make
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+DEFINES	 = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS -DQT_GUI_LIB -DQT_CORE_LIB
+INCPATH	 =  -I"D:/Qt/4.6.1/include/QtCore" -I"D:/Qt/4.6.1/include/QtCore/tmp" -I"D:/Qt/4.6.1/include/QtGui" -I"D:/Qt/4.6.1/include/QtGui/tmp" -I"D:/Qt/4.6.1/include" -I"D:/Qt/4.6.1/include/tmp" -I"D:/Qt/4.6.1/mkspecs/common/symbian" -I"D:/Qt/4.6.1/mkspecs/common/symbian/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include" -I"D:/CarbideWorkspace/TestQJson/qjson/src" -I"D:/CarbideWorkspace/TestQJson/qjson/src/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/sys" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/stlport" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/middleware" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/middleware" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/domain/middleware/loc" -I"D:/CarbideWorkspace/TestQJson/qjson" -I"D:/CarbideWorkspace/TestQJson/qjson/tmp"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+	$(QMAKE) -spec symbian-abld -o "bld.inf" "D:/CarbideWorkspace/TestQJson/qjson/qjson.pro"
+
+bld.inf:
+	$(QMAKE)
+
+$(ABLD): bld.inf
+	bldmake bldfiles
+
+debug: $(ABLD)
+	$(ABLD) build winscw udeb
+	$(ABLD) build gcce udeb
+	$(ABLD) build armv5 udeb
+	$(ABLD) build armv6 udeb
+
+release: $(ABLD)
+	$(ABLD) build gcce urel
+	$(ABLD) build armv5 urel
+	$(ABLD) build armv6 urel
+
+debug-winscw: $(ABLD)
+	$(ABLD) build winscw udeb
+debug-gcce: $(ABLD)
+	$(ABLD) build gcce udeb
+debug-armv5: $(ABLD)
+	$(ABLD) build armv5 udeb
+debug-armv6: $(ABLD)
+	$(ABLD) build armv6 udeb
+release-gcce: $(ABLD)
+	$(ABLD) build gcce urel
+release-armv5: $(ABLD)
+	$(ABLD) build armv5 urel
+release-armv6: $(ABLD)
+	$(ABLD) build armv6 urel
+
+export: $(ABLD)
+	$(ABLD) export
+
+cleanexport: $(ABLD)
+	$(ABLD) cleanexport
+
+src\$(MAKEFILE): 
+	@$(CHK_DIR_EXISTS) src\ $(MKDIR) src\ 
+	cd src\ && $(QMAKE) src.pro -win32 -o $(MAKEFILE)
+sub-src-qmake_all:  FORCE
+	@$(CHK_DIR_EXISTS) src\ $(MKDIR) src\ 
+	cd src\ && $(QMAKE) src.pro -win32 -o $(MAKEFILE)
+sub-src: src\$(MAKEFILE) FORCE
+	cd src\ && $(MAKE) -f $(MAKEFILE)
+tests\$(MAKEFILE): 
+	@$(CHK_DIR_EXISTS) tests\ $(MKDIR) tests\ 
+	cd tests\ && $(QMAKE) tests.pro -win32 -o $(MAKEFILE)
+sub-tests-qmake_all:  FORCE
+	@$(CHK_DIR_EXISTS) tests\ $(MKDIR) tests\ 
+	cd tests\ && $(QMAKE) tests.pro -win32 -o $(MAKEFILE)
+sub-tests: tests\$(MAKEFILE) sub-src FORCE
+	cd tests\ && $(MAKE) -f $(MAKEFILE)
+
+
+D:\Qt\4.6.1\bin\moc.exe:
+	(cd $(QTDIR)/src/tools/moc && $(MAKE))
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+FORCE:
+
+winscw_deployment:
+
+winscw_deployment_clean:
+
+sis: restore_build
+	$(if $(wildcard qjson_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+	createpackage.bat $(QT_SIS_OPTIONS) qjson_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+	$(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+	$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+restore_build:
+-include .make.cache
+
+store_build:
+	@echo # ============================================================================== > .make.cache
+	@echo # This file is generated by make and should not be modified by the user >> .make.cache
+	@echo #  Name        : .make.cache >> .make.cache
+	@echo #  Part of     : qjson >> .make.cache
+	@echo #  Description : This file is used to cache last build target for >> .make.cache
+	@echo #                make sis target. >> .make.cache
+	@echo #  Version     :  >> .make.cache
+	@echo # >> .make.cache
+	@echo # ============================================================================== >> .make.cache
+	@echo. >> .make.cache
+	@echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> .make.cache
+
+dodistclean:
+	-$(MAKE) -f "d:\CarbideWorkspace\TestQJson\qjson\src\Makefile" dodistclean
+	-$(MAKE) -f "d:\CarbideWorkspace\TestQJson\qjson\tests\Makefile" dodistclean
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\Makefile" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\Makefile"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\.make.cache" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\.make.cache"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\bld.inf" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\bld.inf"
+
+distclean: clean dodistclean
+
+clean: $(ABLD)
+	-$(ABLD) reallyclean
+	-bldmake clean
+
+clean-debug: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+	$(ABLD) reallyclean gcce udeb
+	$(ABLD) reallyclean armv5 udeb
+	$(ABLD) reallyclean armv6 udeb
+
+clean-release: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+	$(ABLD) reallyclean armv5 urel
+	$(ABLD) reallyclean armv6 urel
+
+clean-debug-winscw: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+clean-debug-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce udeb
+clean-debug-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 udeb
+clean-debug-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 udeb
+clean-release-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+clean-release-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 urel
+clean-release-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 urel
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/QJson.pc.in	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,11 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=${prefix}
+libdir=@LIB_INSTALL_DIR@
+includedir=@INCLUDE_INSTALL_DIR@
+
+Name: QJson
+Description: QJson is a qt-based library that maps JSON data to QVariant objects
+Version: @QJSON_LIB_MAJOR_VERSION@.@QJSON_LIB_MINOR_VERSION@.@QJSON_LIB_PATCH_VERSION@
+Requires: QtCore
+Libs: -L${libdir} -lqjson
+Cflags: -I${includedir}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/README	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,28 @@
+QJson version 0.5.0
+-------------------------------------------------
+Date: April 3rd, 2009
+Website: http://qjson.sourceforge.net/
+Mailing List: https://lists.sourceforge.net/mailman/listinfo/qjson-devel
+
+Project Lead/Maintainer (2008-current):
+  Flavio Castelli <flavio@castelli.name>
+
+Install
+-------
+  For installation or compiling instructions, see the INSTALL file.
+
+License
+-------
+  This library is licensed under the Lesser GNU General Public License.  See
+  the COPYING file for more information.
+
+Description
+-----------
+  JSON (JavaScript Object Notation) is a lightweight data-interchange format.
+  It can represents integer, real number, string, an ordered sequence of value, and a collection of name/value pairs.
+
+  QJson is a qt-based library that maps JSON data to QVariant objects.
+  JSON arrays will be mapped to QVariantList instances, while JSON's objects will be mapped to QVariantMap.
+
+Happy hacking
+Flavio
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/bld.inf	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,28 @@
+// ============================================================================
+// * Makefile for building: qjson
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-17T12:46:26
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// * Project:  qjson.pro
+// * Template: subdirs
+// ============================================================================
+
+#define BLD_INF_QJSON_FCB74EBD
+
+#ifndef BLD_INF_SRC_FFD839FE
+	#include "src\bld.inf"
+#endif // BLD_INF_SRC_FFD839FE
+#ifndef BLD_INF_TESTS_02F3D6E9
+	#include "tests\bld.inf"
+#endif // BLD_INF_TESTS_02F3D6E9
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+
+prj_mmpfiles
+
+
+prj_extensions
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/bwins/qjsonu.def	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,46 @@
+EXPORTS
+	??0Parser@QJson@@QAE@XZ @ 1 NONAME ; QJson::Parser::Parser(void)
+	??0ParserRunnable@QJson@@QAE@PAVQObject@@@Z @ 2 NONAME ; QJson::ParserRunnable::ParserRunnable(class QObject *)
+	??0QObjectHelper@QJson@@QAE@XZ @ 3 NONAME ; QJson::QObjectHelper::QObjectHelper(void)
+	??0Serializer@QJson@@QAE@XZ @ 4 NONAME ; QJson::Serializer::Serializer(void)
+	??0SerializerRunnable@QJson@@QAE@PAVQObject@@@Z @ 5 NONAME ; QJson::SerializerRunnable::SerializerRunnable(class QObject *)
+	??1Parser@QJson@@QAE@XZ @ 6 NONAME ; QJson::Parser::~Parser(void)
+	??1ParserRunnable@QJson@@UAE@XZ @ 7 NONAME ; QJson::ParserRunnable::~ParserRunnable(void)
+	??1QObjectHelper@QJson@@QAE@XZ @ 8 NONAME ; QJson::QObjectHelper::~QObjectHelper(void)
+	??1Serializer@QJson@@QAE@XZ @ 9 NONAME ; QJson::Serializer::~Serializer(void)
+	??1SerializerRunnable@QJson@@UAE@XZ @ 10 NONAME ; QJson::SerializerRunnable::~SerializerRunnable(void)
+	??_EParserRunnable@QJson@@UAE@I@Z @ 11 NONAME ; QJson::ParserRunnable::~ParserRunnable(unsigned int)
+	??_ESerializerRunnable@QJson@@UAE@I@Z @ 12 NONAME ; QJson::SerializerRunnable::~SerializerRunnable(unsigned int)
+	?errorLine@Parser@QJson@@QBEHXZ @ 13 NONAME ; int QJson::Parser::errorLine(void) const
+	?errorString@Parser@QJson@@QBE?AVQString@@XZ @ 14 NONAME ; class QString QJson::Parser::errorString(void) const
+	?getStaticMetaObject@ParserRunnable@QJson@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & QJson::ParserRunnable::getStaticMetaObject(void)
+	?getStaticMetaObject@SerializerRunnable@QJson@@SAABUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const & QJson::SerializerRunnable::getStaticMetaObject(void)
+	?metaObject@ParserRunnable@QJson@@UBEPBUQMetaObject@@XZ @ 17 NONAME ; struct QMetaObject const * QJson::ParserRunnable::metaObject(void) const
+	?metaObject@SerializerRunnable@QJson@@UBEPBUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const * QJson::SerializerRunnable::metaObject(void) const
+	?parse@Parser@QJson@@QAE?AVQVariant@@ABVQByteArray@@PA_N@Z @ 19 NONAME ; class QVariant QJson::Parser::parse(class QByteArray const &, bool *)
+	?parse@Parser@QJson@@QAE?AVQVariant@@PAVQIODevice@@PA_N@Z @ 20 NONAME ; class QVariant QJson::Parser::parse(class QIODevice *, bool *)
+	?parsingFinished@ParserRunnable@QJson@@IAEXABVQVariant@@_NABVQString@@@Z @ 21 NONAME ; void QJson::ParserRunnable::parsingFinished(class QVariant const &, bool, class QString const &)
+	?parsingFinished@SerializerRunnable@QJson@@IAEXABVQByteArray@@_NABVQString@@@Z @ 22 NONAME ; void QJson::SerializerRunnable::parsingFinished(class QByteArray const &, bool, class QString const &)
+	?qobject2qvariant@QObjectHelper@QJson@@SA?AV?$QMap@VQString@@VQVariant@@@@PBVQObject@@ABVQStringList@@@Z @ 23 NONAME ; class QMap<class QString, class QVariant> QJson::QObjectHelper::qobject2qvariant(class QObject const *, class QStringList const &)
+	?qt_metacall@ParserRunnable@QJson@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 24 NONAME ; int QJson::ParserRunnable::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@SerializerRunnable@QJson@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 25 NONAME ; int QJson::SerializerRunnable::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacast@ParserRunnable@QJson@@UAEPAXPBD@Z @ 26 NONAME ; void * QJson::ParserRunnable::qt_metacast(char const *)
+	?qt_metacast@SerializerRunnable@QJson@@UAEPAXPBD@Z @ 27 NONAME ; void * QJson::SerializerRunnable::qt_metacast(char const *)
+	?qvariant2qobject@QObjectHelper@QJson@@SAXABV?$QMap@VQString@@VQVariant@@@@PAVQObject@@@Z @ 28 NONAME ; void QJson::QObjectHelper::qvariant2qobject(class QMap<class QString, class QVariant> const &, class QObject *)
+	?run@ParserRunnable@QJson@@UAEXXZ @ 29 NONAME ; void QJson::ParserRunnable::run(void)
+	?run@SerializerRunnable@QJson@@UAEXXZ @ 30 NONAME ; void QJson::SerializerRunnable::run(void)
+	?serialize@Serializer@QJson@@QAE?AVQByteArray@@ABVQVariant@@@Z @ 31 NONAME ; class QByteArray QJson::Serializer::serialize(class QVariant const &)
+	?serialize@Serializer@QJson@@QAEXABVQVariant@@PAVQIODevice@@PA_N@Z @ 32 NONAME ; void QJson::Serializer::serialize(class QVariant const &, class QIODevice *, bool *)
+	?setData@ParserRunnable@QJson@@QAEXABVQByteArray@@@Z @ 33 NONAME ; void QJson::ParserRunnable::setData(class QByteArray const &)
+	?setJsonObject@SerializerRunnable@QJson@@QAEXABVQVariant@@@Z @ 34 NONAME ; void QJson::SerializerRunnable::setJsonObject(class QVariant const &)
+	?tr@ParserRunnable@QJson@@SA?AVQString@@PBD0@Z @ 35 NONAME ; class QString QJson::ParserRunnable::tr(char const *, char const *)
+	?tr@ParserRunnable@QJson@@SA?AVQString@@PBD0H@Z @ 36 NONAME ; class QString QJson::ParserRunnable::tr(char const *, char const *, int)
+	?tr@SerializerRunnable@QJson@@SA?AVQString@@PBD0@Z @ 37 NONAME ; class QString QJson::SerializerRunnable::tr(char const *, char const *)
+	?tr@SerializerRunnable@QJson@@SA?AVQString@@PBD0H@Z @ 38 NONAME ; class QString QJson::SerializerRunnable::tr(char const *, char const *, int)
+	?trUtf8@ParserRunnable@QJson@@SA?AVQString@@PBD0@Z @ 39 NONAME ; class QString QJson::ParserRunnable::trUtf8(char const *, char const *)
+	?trUtf8@ParserRunnable@QJson@@SA?AVQString@@PBD0H@Z @ 40 NONAME ; class QString QJson::ParserRunnable::trUtf8(char const *, char const *, int)
+	?trUtf8@SerializerRunnable@QJson@@SA?AVQString@@PBD0@Z @ 41 NONAME ; class QString QJson::SerializerRunnable::trUtf8(char const *, char const *)
+	?trUtf8@SerializerRunnable@QJson@@SA?AVQString@@PBD0H@Z @ 42 NONAME ; class QString QJson::SerializerRunnable::trUtf8(char const *, char const *, int)
+	?staticMetaObject@SerializerRunnable@QJson@@2UQMetaObject@@B @ 43 NONAME ; struct QMetaObject const QJson::SerializerRunnable::staticMetaObject
+	?staticMetaObject@ParserRunnable@QJson@@2UQMetaObject@@B @ 44 NONAME ; struct QMetaObject const QJson::ParserRunnable::staticMetaObject
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/cmake/modules/CMakeLists.txt	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,2 @@
+set(cmakeFiles FindQJSON.cmake)
+install(FILES ${cmakeFiles} DESTINATION ${CMAKE_MODULES_INSTALL_DIR})
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/cmake/modules/FindQJSON.cmake	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,46 @@
+# Find QJSON - JSON handling library for Qt
+#
+# This module defines
+#  QJSON_FOUND - whether the qsjon library was found
+#  QJSON_LIBRARIES - the qjson library
+#  QJSON_INCLUDE_DIR - the include path of the qjson library
+#
+
+if (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
+
+  # Already in cache
+  set (QJSON_FOUND TRUE)
+
+else (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
+
+  if (NOT WIN32)
+    # use pkg-config to get the values of QJSON_INCLUDE_DIRS
+    # and QJSON_LIBRARY_DIRS to add as hints to the find commands.
+    include (FindPkgConfig)
+    pkg_check_modules (QJSON REQUIRED QJson>=0.5)
+  endif (NOT WIN32)
+
+  find_library (QJSON_LIBRARIES
+    NAMES
+    qjson
+    PATHS
+    ${QJSON_LIBRARY_DIRS}
+    ${LIB_INSTALL_DIR}
+    ${KDE4_LIB_DIR}
+  )
+
+  find_path (QJSON_INCLUDE_DIR
+    NAMES
+    parser.h
+    PATH_SUFFIXES
+    qjson
+    PATHS
+    ${QJSON_INCLUDE_DIRS}
+    ${INCLUDE_INSTALL_DIR}
+    ${KDE4_INCLUDE_DIR}
+  )
+
+  include(FindPackageHandleStandardArgs)
+  find_package_handle_standard_args(QJSON DEFAULT_MSG QJSON_LIBRARIES QJSON_INCLUDE_DIR)
+
+endif (QJSON_INCLUDE_DIR AND QJSON_LIBRARIES)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/doc/Doxyfile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,305 @@
+# Doxyfile 1.5.6
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = QJson
+PROJECT_NUMBER         = 0.7.0
+OUTPUT_DIRECTORY       = ./
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+OPTIMIZE_OUTPUT_VHDL   = NO
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+TYPEDEF_HIDES_STRUCT   = NO
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = YES
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_GROUP_NAMES       = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+SHOW_FILES             = YES
+SHOW_NAMESPACES        = YES
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = ./qjson.dox \
+                         ../src
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.d \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.idl \
+                         *.odl \
+                         *.cs \
+                         *.php \
+                         *.php3 \
+                         *.inc \
+                         *.m \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.f90 \
+                         *.f \
+                         *.vhd \
+                         *.vhdl \
+                         *.C \
+                         *.CC \
+                         *.C++ \
+                         *.II \
+                         *.I++ \
+                         *.H \
+                         *.HH \
+                         *.H++ \
+                         *.CS \
+                         *.PHP \
+                         *.PHP3 \
+                         *.M \
+                         *.MM \
+                         *.PY \
+                         *.F90 \
+                         *.F \
+                         *.VHD \
+                         *.VHDL
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXCLUDE_SYMBOLS        = 
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = ./header.html
+HTML_FOOTER            = ./footer.html
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+HTML_DYNAMIC_SECTIONS  = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     = 
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+FORMULA_FONTSIZE       = 10
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+MSCGEN_PATH            = 
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+DOT_FONTNAME           = FreeSans
+DOT_FONTPATH           = 
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = YES
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/doc/footer.html	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,32 @@
+<hr>
+<table width="100%">
+  <tr>
+    <td width="10%" align="left" valign="center">
+      <a href="http://sourceforge.net"> 
+      <img
+      src="http://sourceforge.net/sflogo.php?group_id=144446"
+      width="88" height="31" border="0" alt="SourceForge Logo"></a>
+    </td>
+    <td width="20%" align="left" valign="center">
+      hosts this site.
+    </td>
+    <td>
+    </td>
+    <td align="right" valign="center">
+      Send comments to:<br>
+      <a href="mailto:qjson-devel@lists.sourceforge.net">QJson Developers</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+var pageTracker = _gat._getTracker("UA-3214988-2");
+pageTracker._trackPageview();
+</script>
+
+</body> 
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/doc/header.html	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,24 @@
+<html>
+<head>
+<title>
+QJson - a Qt based library for mapping JSON data to QVariant objects
+</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head>
+
+<body bgcolor="#ffffff"> 
+<table width="100%">
+  <tr>
+    <td width="40%" align="left" valign="center">
+      <a href="http://sourceforge.net/projects/qjson">
+      QJson project page
+      </a>
+    </td>
+    <td width="40%" align="right" valign="center">
+      <a href="http://qjson.sourceforge.net">QJson home page</a>
+    </td>
+  </tr>
+</table>
+
+<hr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/doc/qjson.dox	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,95 @@
+/**
+\mainpage
+\section _intro Introduction
+
+<a HREF="http://www.json.org/">JSON (JavaScript Object Notation)</a>
+ is a lightweight data-interchange format. 
+It can represents integer, real number, string, an ordered sequence of value, and
+a collection of name/value pairs.
+
+QJson is a qt-based library that maps JSON data to QVariant objects.
+
+JSON arrays will be mapped to QVariantList instances, while JSON's objects will
+be mapped to QVariantMap.
+
+\section _usage Usage
+Converting JSON's data to QVariant instance is really simple:
+\code
+// create a JSonDriver instance
+QJson::Parser parser;
+
+bool ok;
+
+// json is a QString containing the data to convert
+QVariant result = parser.parse (json, &ok);
+\endcode
+
+Suppose you're going to convert this JSON data:
+\verbatim
+{
+    "encoding" : "UTF-8",
+    "plug-ins" : [
+        "python",
+        "c++",
+        "ruby"
+        ],
+    "indent" : { "length" : 3, "use_space" : true }
+}
+\endverbatim
+
+The following code would convert the JSON data and parse it:
+\code
+QJson::Parser parser;
+bool ok;
+
+QVariantMap result = parser.parse (json, &ok).toMap();
+if (!ok) {
+  qFatal("An error occured during parsing");
+  exit (1);
+}
+
+qDebug() << "encoding:" << result["encoding"].toString();
+qDebug() << "plugins:";
+
+foreach (QVariant plugin, result["plug-ins"].toList()) {
+  qDebug() << "\t-" << plugin.toString();
+}
+
+QVariantMap nestedMap = result["indent"].toMap();
+qDebug() << "length:" << nestedMap["length"].toInt();
+qDebug() << "use_space:" << nestedMap["use_space"].toBool();
+\endcode
+The output would be:
+\verbatim
+encoding: "UTF-8"
+plugins:
+  - "python"
+  - "c++"
+  - "ruby"
+length: 3
+use_space: true
+\endverbatim
+
+The QJson::QObjectHelper class permits to serialize QObject instances into JSON. QJson::QObjectHelper also allows to 
+initialize a QObject using the values stored inside of a JSON object. 
+
+\section _build Build instructions
+QJson build system is based on cmake. Download QJson sources, extract them, move inside the sources directory and then:
+\code
+mkdir build
+cd build
+cmake ..
+make
+sudo make install
+\endcode
+
+\section _download Get the code
+Actually QJson code is hosted on KDE subversion repository. You can download it using a svn client:
+\code
+svn co svn://anonsvn.kde.org/home/kde/trunk/playground/libs/qjson 
+\endcode
+
+Otherwise you can download source tarballs <a HREF="https://sourceforge.net/project/showfiles.php?group_id=244195">here</a>.
+
+\author Flavio Castelli <flavio@castelli.name>
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/eabi/qjsonu.def	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,60 @@
+EXPORTS
+	_ZN5QJson10Serializer9serializeERK8QVariant @ 1 NONAME
+	_ZN5QJson10Serializer9serializeERK8QVariantP9QIODevicePb @ 2 NONAME
+	_ZN5QJson10SerializerC1Ev @ 3 NONAME
+	_ZN5QJson10SerializerC2Ev @ 4 NONAME
+	_ZN5QJson10SerializerD1Ev @ 5 NONAME
+	_ZN5QJson10SerializerD2Ev @ 6 NONAME
+	_ZN5QJson13QObjectHelper16qobject2qvariantEPK7QObjectRK11QStringList @ 7 NONAME
+	_ZN5QJson13QObjectHelper16qvariant2qobjectERK4QMapI7QString8QVariantEP7QObject @ 8 NONAME
+	_ZN5QJson13QObjectHelperC1Ev @ 9 NONAME
+	_ZN5QJson13QObjectHelperC2Ev @ 10 NONAME
+	_ZN5QJson13QObjectHelperD1Ev @ 11 NONAME
+	_ZN5QJson13QObjectHelperD2Ev @ 12 NONAME
+	_ZN5QJson14ParserRunnable11qt_metacallEN11QMetaObject4CallEiPPv @ 13 NONAME
+	_ZN5QJson14ParserRunnable11qt_metacastEPKc @ 14 NONAME
+	_ZN5QJson14ParserRunnable15parsingFinishedERK8QVariantbRK7QString @ 15 NONAME
+	_ZN5QJson14ParserRunnable16staticMetaObjectE @ 16 NONAME DATA 16
+	_ZN5QJson14ParserRunnable19getStaticMetaObjectEv @ 17 NONAME
+	_ZN5QJson14ParserRunnable3runEv @ 18 NONAME
+	_ZN5QJson14ParserRunnable7setDataERK10QByteArray @ 19 NONAME
+	_ZN5QJson14ParserRunnableC1EP7QObject @ 20 NONAME
+	_ZN5QJson14ParserRunnableC2EP7QObject @ 21 NONAME
+	_ZN5QJson14ParserRunnableD0Ev @ 22 NONAME
+	_ZN5QJson14ParserRunnableD1Ev @ 23 NONAME
+	_ZN5QJson14ParserRunnableD2Ev @ 24 NONAME
+	_ZN5QJson18SerializerRunnable11qt_metacallEN11QMetaObject4CallEiPPv @ 25 NONAME
+	_ZN5QJson18SerializerRunnable11qt_metacastEPKc @ 26 NONAME
+	_ZN5QJson18SerializerRunnable13setJsonObjectERK8QVariant @ 27 NONAME
+	_ZN5QJson18SerializerRunnable15parsingFinishedERK10QByteArraybRK7QString @ 28 NONAME
+	_ZN5QJson18SerializerRunnable16staticMetaObjectE @ 29 NONAME DATA 16
+	_ZN5QJson18SerializerRunnable19getStaticMetaObjectEv @ 30 NONAME
+	_ZN5QJson18SerializerRunnable3runEv @ 31 NONAME
+	_ZN5QJson18SerializerRunnableC1EP7QObject @ 32 NONAME
+	_ZN5QJson18SerializerRunnableC2EP7QObject @ 33 NONAME
+	_ZN5QJson18SerializerRunnableD0Ev @ 34 NONAME
+	_ZN5QJson18SerializerRunnableD1Ev @ 35 NONAME
+	_ZN5QJson18SerializerRunnableD2Ev @ 36 NONAME
+	_ZN5QJson6Parser5parseEP9QIODevicePb @ 37 NONAME
+	_ZN5QJson6Parser5parseERK10QByteArrayPb @ 38 NONAME
+	_ZN5QJson6ParserC1Ev @ 39 NONAME
+	_ZN5QJson6ParserC2Ev @ 40 NONAME
+	_ZN5QJson6ParserD1Ev @ 41 NONAME
+	_ZN5QJson6ParserD2Ev @ 42 NONAME
+	_ZNK5QJson14ParserRunnable10metaObjectEv @ 43 NONAME
+	_ZNK5QJson18SerializerRunnable10metaObjectEv @ 44 NONAME
+	_ZNK5QJson6Parser11errorStringEv @ 45 NONAME
+	_ZNK5QJson6Parser9errorLineEv @ 46 NONAME
+	_ZTIN2yy11json_parserE @ 47 NONAME
+	_ZTIN5QJson14ParserRunnableE @ 48 NONAME
+	_ZTIN5QJson18SerializerRunnableE @ 49 NONAME
+	_ZTVN2yy11json_parserE @ 50 NONAME
+	_ZTVN5QJson14ParserRunnableE @ 51 NONAME
+	_ZTVN5QJson18SerializerRunnableE @ 52 NONAME
+	_ZThn8_N5QJson14ParserRunnable3runEv @ 53 NONAME
+	_ZThn8_N5QJson14ParserRunnableD0Ev @ 54 NONAME
+	_ZThn8_N5QJson14ParserRunnableD1Ev @ 55 NONAME
+	_ZThn8_N5QJson18SerializerRunnable3runEv @ 56 NONAME
+	_ZThn8_N5QJson18SerializerRunnableD0Ev @ 57 NONAME
+	_ZThn8_N5QJson18SerializerRunnableD1Ev @ 58 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/lib/qjson.prl	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,5 @@
+QMAKE_PRL_BUILD_DIR = D:/CarbideWorkspace/TestQJson/qjson/src/
+QMAKE_PRO_INPUT = src.pro
+QMAKE_PRL_TARGET = qjson
+QMAKE_PRL_CONFIG = include_source_dir lex yacc warn_on debug uic resources qt warn_on incremental debug shared stl exceptions rtti create_prl dll shared qtmain moc thread
+QMAKE_PRL_VERSION = 0.7.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/qjson.pro	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,6 @@
+TEMPLATE = subdirs
+SUBDIRS = sub_src sub_unittest
+
+sub_src.subdir = src
+sub_unittest.subdir = tests
+sub_unittest.depends = sub_src
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/ABLD.BAT	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\CarbideWorkspace\TestQJson\qjson\src\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/CMakeLists.txt	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,42 @@
+include_directories (./)
+
+# add_custom_command (OUTPUT ${qjson_SOURCE_DIR}/lib/json_parser.cc
+#                    PRE_BUILD
+#                    COMMAND bison -t -o json_parser.cc -d json_parser.yy
+#                    DEPENDS json_parser.yy
+#                    WORKING_DIRECTORY ${qjson_SOURCE_DIR}/lib/
+#                    )
+
+install(FILES
+        parser.h
+        parserrunnable.h
+				qobjecthelper.h
+        serializer.h
+        serializerrunnable.h
+        qjson_export.h
+        DESTINATION ${INCLUDE_INSTALL_DIR}/qjson COMPONENT Devel
+)
+
+set(qjson_MOC_HDRS
+  parserrunnable.h
+  serializerrunnable.h
+)
+
+qt4_wrap_cpp(qjson_MOC_SRCS ${qjson_MOC_HDRS})
+
+set (qjson_SRCS parser.cpp qobjecthelper.cpp json_scanner.cpp json_parser.cc parserrunnable.cpp serializer.cpp serializerrunnable.cpp)
+
+add_library (qjson SHARED ${qjson_SRCS} ${qjson_MOC_SRCS})
+target_link_libraries( qjson ${QT_LIBRARIES})
+
+set_target_properties(qjson PROPERTIES
+                      VERSION ${QJSON_LIB_MAJOR_VERSION}.${QJSON_LIB_MINOR_VERSION}.${QJSON_LIB_PATCH_VERSION}
+                      SOVERSION ${QJSON_LIB_MAJOR_VERSION}
+                      DEFINE_SYMBOL QJSON_MAKEDLL
+                      )
+
+INSTALL(TARGETS qjson
+   LIBRARY DESTINATION ${LIB_INSTALL_DIR}
+   RUNTIME DESTINATION bin
+   ARCHIVE DESTINATION  ${LIB_INSTALL_DIR}
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/Makefile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,221 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.1) on: Mon May 17 16:06:46 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+#  Name        : Makefile
+#  Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE          = Makefile
+QMAKE             = d:\Qt\4.6.1\bin\qmake
+DEL_FILE          = del
+DEL_DIR           = rmdir
+MOVE              = move
+XCOPY             = xcopy /d /f /h /r /y /i
+ABLD              = ABLD.BAT
+DEBUG_PLATFORMS   = winscw gcce armv5 armv6
+RELEASE_PLATFORMS = gcce armv5 armv6
+MAKE              = make
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+DEFINES	 = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS -DQJSON_MAKEDLL -DQT_CORE_LIB
+INCPATH	 =  -I"D:/Qt/4.6.1/include/QtCore" -I"D:/Qt/4.6.1/include/QtCore/tmp" -I"D:/Qt/4.6.1/include" -I"D:/Qt/4.6.1/include/tmp" -I"D:/Qt/4.6.1/mkspecs/common/symbian" -I"D:/Qt/4.6.1/mkspecs/common/symbian/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include" -I"D:/CarbideWorkspace/TestQJson/qjson/src" -I"D:/CarbideWorkspace/TestQJson/qjson/src/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/sys" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/stlport"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+	$(QMAKE) -spec symbian-abld -o "bld.inf" "D:/CarbideWorkspace/TestQJson/qjson/src/src.pro"
+
+bld.inf:
+	$(QMAKE)
+
+$(ABLD): bld.inf
+	bldmake bldfiles
+
+debug: $(ABLD)
+	$(ABLD) build winscw udeb
+	$(ABLD) build gcce udeb
+	$(ABLD) build armv5 udeb
+	$(ABLD) build armv6 udeb
+
+release: $(ABLD)
+	$(ABLD) build gcce urel
+	$(ABLD) build armv5 urel
+	$(ABLD) build armv6 urel
+
+debug-winscw: $(ABLD)
+	$(ABLD) build winscw udeb
+debug-gcce: $(ABLD)
+	$(ABLD) build gcce udeb
+debug-armv5: $(ABLD)
+	$(ABLD) build armv5 udeb
+debug-armv6: $(ABLD)
+	$(ABLD) build armv6 udeb
+release-gcce: $(ABLD)
+	$(ABLD) build gcce urel
+release-armv5: $(ABLD)
+	$(ABLD) build armv5 urel
+release-armv6: $(ABLD)
+	$(ABLD) build armv6 urel
+
+export: $(ABLD)
+	$(ABLD) export
+
+cleanexport: $(ABLD)
+	$(ABLD) cleanexport
+
+D:\Qt\4.6.1\bin\moc.exe:
+	(cd $(QTDIR)/src/tools/moc && $(MAKE))
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all: moc_parserrunnable.cpp moc_serializerrunnable.cpp
+compiler_moc_header_clean:
+	-$(DEL_FILE) moc_parserrunnable.cpp moc_serializerrunnable.cpp 2> NUL
+moc_parserrunnable.cpp: qjson_export.h \
+		parserrunnable.h \
+		..\..\..\..\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN parserrunnable.h -o moc_parserrunnable.cpp
+
+moc_serializerrunnable.cpp: qjson_export.h \
+		serializerrunnable.h \
+		..\..\..\..\Qt\4.6.1\bin\moc.exe
+	D:\Qt\4.6.1\bin\moc.exe $(DEFINES) $(INCPATH) -DSYMBIAN serializerrunnable.h -o moc_serializerrunnable.cpp
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+	-$(DEL_FILE) qmake_image_collection.cpp 2> NUL
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all:
+compiler_uic_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean 
+
+create_temps:
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\QtCore\tmp" mkdir "D:\Qt\4.6.1\include\QtCore\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\tmp" mkdir "D:\Qt\4.6.1\include\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" mkdir "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\TestQJson\qjson\src\tmp" mkdir "D:\CarbideWorkspace\TestQJson\qjson\src\tmp"
+
+extension_clean: compiler_clean
+	-@ if EXIST "D:\Qt\4.6.1\include\QtCore\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\QtCore\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\TestQJson\qjson\src\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\TestQJson\qjson\src\tmp"
+
+pre_targetdeps: \
+	generated_sources \
+	all_source_deps
+
+generated_sources: \
+	moc_parserrunnable.cpp \
+	moc_serializerrunnable.cpp
+
+all_source_deps: \
+	json_parser.hh \
+	stack.hh \
+	parser_p.h \
+	parser.h \
+	qjson_export.h \
+	json_scanner.h \
+	qjson_debug.h \
+	location.hh \
+	position.hh \
+	parserrunnable.h \
+	qobjecthelper.h \
+	serializer.h \
+	serializerrunnable.h
+
+finalize:
+
+winscw_deployment:
+
+winscw_deployment_clean:
+
+sis: restore_build
+	$(if $(wildcard qjson_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+	createpackage.bat $(QT_SIS_OPTIONS) qjson_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+	$(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+	$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+restore_build:
+-include .make.cache
+
+store_build:
+	@echo # ============================================================================== > .make.cache
+	@echo # This file is generated by make and should not be modified by the user >> .make.cache
+	@echo #  Name        : .make.cache >> .make.cache
+	@echo #  Part of     : qjson >> .make.cache
+	@echo #  Description : This file is used to cache last build target for >> .make.cache
+	@echo #                make sis target. >> .make.cache
+	@echo #  Version     :  >> .make.cache
+	@echo # >> .make.cache
+	@echo # ============================================================================== >> .make.cache
+	@echo. >> .make.cache
+	@echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> .make.cache
+
+dodistclean:
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\src\qjson_template.pkg" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\src\qjson_template.pkg"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\src\Makefile" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\src\Makefile"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\src\Makefile_0xEe29a5ee.mk" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\src\Makefile_0xEe29a5ee.mk"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\src\src_0xEe29a5ee.mmp" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\src\src_0xEe29a5ee.mmp"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\src\.make.cache" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\src\.make.cache"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\src\bld.inf" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\src\bld.inf"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\lib\qjson.prl" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\lib\qjson.prl"
+
+distclean: clean dodistclean
+
+clean: $(ABLD)
+	-$(ABLD) reallyclean
+	-bldmake clean
+
+clean-debug: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+	$(ABLD) reallyclean gcce udeb
+	$(ABLD) reallyclean armv5 udeb
+	$(ABLD) reallyclean armv6 udeb
+
+clean-release: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+	$(ABLD) reallyclean armv5 urel
+	$(ABLD) reallyclean armv6 urel
+
+clean-debug-winscw: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+clean-debug-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce udeb
+clean-debug-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 udeb
+clean-debug-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 udeb
+clean-release-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+clean-release-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 urel
+clean-release-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 urel
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/bld.inf	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,34 @@
+// ============================================================================
+// * Makefile for building: qjson
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-17T16:06:46
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// * Project:  src.pro
+// * Template: lib
+// ============================================================================
+
+#define BLD_INF_SRC_FFD839FE
+
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+
+prj_mmpfiles
+
+gnumakefile Makefile_0xEe29a5ee.mk
+src_0xEe29a5ee.mmp
+
+prj_extensions
+
+
+
+prj_exports
+
+parser.h
+parserrunnable.h
+qobjecthelper.h
+serializer.h
+serializerrunnable.h
+qjson_export.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/json_parser.cc	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,1096 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton implementation for Bison LALR(1) parsers in C++
+
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+
+#include "json_parser.hh"
+
+/* User implementation prologue.  */
+
+
+/* Line 317 of lalr1.cc.  */
+#line 43 "json_parser.cc"
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* FIXME: INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#define YYUSE(e) ((void) (e))
+
+/* A pseudo ostream that takes yydebug_ into account.  */
+# define YYCDEBUG							\
+  for (bool yydebugcond_ = yydebug_; yydebugcond_; yydebugcond_ = false)	\
+    (*yycdebug_)
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)	\
+do {							\
+  if (yydebug_)						\
+    {							\
+      *yycdebug_ << Title << ' ';			\
+      yy_symbol_print_ ((Type), (Value), (Location));	\
+      *yycdebug_ << std::endl;				\
+    }							\
+} while (false)
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug_)				\
+    yy_reduce_print_ (Rule);		\
+} while (false)
+
+# define YY_STACK_PRINT()		\
+do {					\
+  if (yydebug_)				\
+    yystack_print_ ();			\
+} while (false)
+
+#else /* !YYDEBUG */
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_REDUCE_PRINT(Rule)
+# define YY_STACK_PRINT()
+
+#endif /* !YYDEBUG */
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+namespace yy
+{
+#if YYERROR_VERBOSE
+
+  /* Return YYSTR after stripping away unnecessary quotes and
+     backslashes, so that it's suitable for yyerror.  The heuristic is
+     that double-quoting is unnecessary unless the string contains an
+     apostrophe, a comma, or backslash (other than backslash-backslash).
+     YYSTR is taken from yytname.  */
+  std::string
+  json_parser::yytnamerr_ (const char *yystr)
+  {
+    if (*yystr == '"')
+      {
+        std::string yyr = "";
+        char const *yyp = yystr;
+
+        for (;;)
+          switch (*++yyp)
+            {
+            case '\'':
+            case ',':
+              goto do_not_strip_quotes;
+
+            case '\\':
+              if (*++yyp != '\\')
+                goto do_not_strip_quotes;
+              /* Fall through.  */
+            default:
+              yyr += *yyp;
+              break;
+
+            case '"':
+              return yyr;
+            }
+      do_not_strip_quotes: ;
+      }
+
+    return yystr;
+  }
+
+#endif
+
+  /// Build a parser object.
+  json_parser::json_parser (QJson::ParserPrivate* driver_yyarg)
+    : yydebug_ (false),
+      yycdebug_ (&std::cerr),
+      driver (driver_yyarg)
+  {
+  }
+
+  json_parser::~json_parser ()
+  {
+  }
+
+#if YYDEBUG
+  /*--------------------------------.
+  | Print this symbol on YYOUTPUT.  |
+  `--------------------------------*/
+
+  inline void
+  json_parser::yy_symbol_value_print_ (int yytype,
+			   const semantic_type* yyvaluep, const location_type* yylocationp)
+  {
+    YYUSE (yylocationp);
+    YYUSE (yyvaluep);
+    switch (yytype)
+      {
+         default:
+	  break;
+      }
+  }
+
+
+  void
+  json_parser::yy_symbol_print_ (int yytype,
+			   const semantic_type* yyvaluep, const location_type* yylocationp)
+  {
+    *yycdebug_ << (yytype < yyntokens_ ? "token" : "nterm")
+	       << ' ' << yytname_[yytype] << " ("
+	       << *yylocationp << ": ";
+    yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
+    *yycdebug_ << ')';
+  }
+#endif /* ! YYDEBUG */
+
+  void
+  json_parser::yydestruct_ (const char* yymsg,
+			   int yytype, semantic_type* yyvaluep, location_type* yylocationp)
+  {
+    YYUSE (yylocationp);
+    YYUSE (yymsg);
+    YYUSE (yyvaluep);
+
+    YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+    switch (yytype)
+      {
+  
+	default:
+	  break;
+      }
+  }
+
+  void
+  json_parser::yypop_ (unsigned int n)
+  {
+    yystate_stack_.pop (n);
+    yysemantic_stack_.pop (n);
+    yylocation_stack_.pop (n);
+  }
+
+  std::ostream&
+  json_parser::debug_stream () const
+  {
+    return *yycdebug_;
+  }
+
+  void
+  json_parser::set_debug_stream (std::ostream& o)
+  {
+    yycdebug_ = &o;
+  }
+
+
+  json_parser::debug_level_type
+  json_parser::debug_level () const
+  {
+    return yydebug_;
+  }
+
+  void
+  json_parser::set_debug_level (debug_level_type l)
+  {
+    yydebug_ = l;
+  }
+
+
+  int
+  json_parser::parse ()
+  {
+    /// Look-ahead and look-ahead in internal form.
+    int yychar = yyempty_;
+    int yytoken = 0;
+
+    /* State.  */
+    int yyn;
+    int yylen = 0;
+    int yystate = 0;
+
+    /* Error handling.  */
+    int yynerrs_ = 0;
+    int yyerrstatus_ = 0;
+
+    /// Semantic value of the look-ahead.
+    semantic_type yylval;
+    /// Location of the look-ahead.
+    location_type yylloc;
+    /// The locations where the error started and ended.
+    location yyerror_range[2];
+
+    /// $$.
+    semantic_type yyval;
+    /// @$.
+    location_type yyloc;
+
+    int yyresult;
+
+    YYCDEBUG << "Starting parse" << std::endl;
+
+
+    /* Initialize the stacks.  The initial state will be pushed in
+       yynewstate, since the latter expects the semantical and the
+       location values to have been already stored, initialize these
+       stacks with a primary value.  */
+    yystate_stack_ = state_stack_type (0);
+    yysemantic_stack_ = semantic_stack_type (0);
+    yylocation_stack_ = location_stack_type (0);
+    yysemantic_stack_.push (yylval);
+    yylocation_stack_.push (yylloc);
+
+    /* New state.  */
+  yynewstate:
+    yystate_stack_.push (yystate);
+    YYCDEBUG << "Entering state " << yystate << std::endl;
+    goto yybackup;
+
+    /* Backup.  */
+  yybackup:
+
+    /* Try to take a decision without look-ahead.  */
+    yyn = yypact_[yystate];
+    if (yyn == yypact_ninf_)
+      goto yydefault;
+
+    /* Read a look-ahead token.  */
+    if (yychar == yyempty_)
+      {
+	YYCDEBUG << "Reading a token: ";
+	yychar = yylex (&yylval, &yylloc, driver);
+      }
+
+
+    /* Convert token to internal form.  */
+    if (yychar <= yyeof_)
+      {
+	yychar = yytoken = yyeof_;
+	YYCDEBUG << "Now at end of input." << std::endl;
+      }
+    else
+      {
+	yytoken = yytranslate_ (yychar);
+	YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+      }
+
+    /* If the proper action on seeing token YYTOKEN is to reduce or to
+       detect an error, take that action.  */
+    yyn += yytoken;
+    if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yytoken)
+      goto yydefault;
+
+    /* Reduce or error.  */
+    yyn = yytable_[yyn];
+    if (yyn <= 0)
+      {
+	if (yyn == 0 || yyn == yytable_ninf_)
+	goto yyerrlab;
+	yyn = -yyn;
+	goto yyreduce;
+      }
+
+    /* Accept?  */
+    if (yyn == yyfinal_)
+      goto yyacceptlab;
+
+    /* Shift the look-ahead token.  */
+    YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+    /* Discard the token being shifted unless it is eof.  */
+    if (yychar != yyeof_)
+      yychar = yyempty_;
+
+    yysemantic_stack_.push (yylval);
+    yylocation_stack_.push (yylloc);
+
+    /* Count tokens shifted since error; after three, turn off error
+       status.  */
+    if (yyerrstatus_)
+      --yyerrstatus_;
+
+    yystate = yyn;
+    goto yynewstate;
+
+  /*-----------------------------------------------------------.
+  | yydefault -- do the default action for the current state.  |
+  `-----------------------------------------------------------*/
+  yydefault:
+    yyn = yydefact_[yystate];
+    if (yyn == 0)
+      goto yyerrlab;
+    goto yyreduce;
+
+  /*-----------------------------.
+  | yyreduce -- Do a reduction.  |
+  `-----------------------------*/
+  yyreduce:
+    yylen = yyr2_[yyn];
+    /* If YYLEN is nonzero, implement the default value of the action:
+       `$$ = $1'.  Otherwise, use the top of the stack.
+
+       Otherwise, the following line sets YYVAL to garbage.
+       This behavior is undocumented and Bison
+       users should not rely upon it.  */
+    if (yylen)
+      yyval = yysemantic_stack_[yylen - 1];
+    else
+      yyval = yysemantic_stack_[0];
+
+    {
+      slice<location_type, location_stack_type> slice (yylocation_stack_, yylen);
+      YYLLOC_DEFAULT (yyloc, slice, yylen);
+    }
+    YY_REDUCE_PRINT (yyn);
+    switch (yyn)
+      {
+	  case 2:
+#line 80 "json_parser.yy"
+    {
+              driver->m_result = (yysemantic_stack_[(1) - (1)]);
+              qjsonDebug() << "json_parser - parsing finished";
+            ;}
+    break;
+
+  case 3:
+#line 85 "json_parser.yy"
+    {(yyval) = (yysemantic_stack_[(1) - (1)]); ;}
+    break;
+
+  case 4:
+#line 86 "json_parser.yy"
+    {(yyval) = (yysemantic_stack_[(1) - (1)]); ;}
+    break;
+
+  case 5:
+#line 88 "json_parser.yy"
+    {
+            qCritical()<< "json_parser - syntax error found, "
+                    << "forcing abort";
+            YYABORT;
+          ;}
+    break;
+
+  case 7:
+#line 95 "json_parser.yy"
+    { (yyval) = (yysemantic_stack_[(3) - (2)]); ;}
+    break;
+
+  case 8:
+#line 97 "json_parser.yy"
+    { (yyval) = QVariant (QVariantMap()); ;}
+    break;
+
+  case 9:
+#line 98 "json_parser.yy"
+    {
+            QVariantMap members = (yysemantic_stack_[(2) - (2)]).toMap();
+            (yysemantic_stack_[(2) - (2)]) = QVariant(); // Allow reuse of map
+            (yyval) = QVariant(members.unite ((yysemantic_stack_[(2) - (1)]).toMap()));
+          ;}
+    break;
+
+  case 10:
+#line 104 "json_parser.yy"
+    { (yyval) = QVariant (QVariantMap()); ;}
+    break;
+
+  case 11:
+#line 105 "json_parser.yy"
+    {
+          QVariantMap members = (yysemantic_stack_[(3) - (3)]).toMap();
+          (yysemantic_stack_[(3) - (3)]) = QVariant(); // Allow reuse of map
+          (yyval) = QVariant(members.unite ((yysemantic_stack_[(3) - (2)]).toMap()));
+          ;}
+    break;
+
+  case 12:
+#line 111 "json_parser.yy"
+    {
+            QVariantMap pair;
+            pair.insert ((yysemantic_stack_[(3) - (1)]).toString(), QVariant((yysemantic_stack_[(3) - (3)])));
+            (yyval) = QVariant (pair);
+          ;}
+    break;
+
+  case 13:
+#line 117 "json_parser.yy"
+    { (yyval) = (yysemantic_stack_[(3) - (2)]); ;}
+    break;
+
+  case 14:
+#line 119 "json_parser.yy"
+    { (yyval) = QVariant (QVariantList()); ;}
+    break;
+
+  case 15:
+#line 120 "json_parser.yy"
+    {
+          QVariantList members = (yysemantic_stack_[(2) - (2)]).toList();
+          (yysemantic_stack_[(2) - (2)]) = QVariant(); // Allow reuse of list
+          members.prepend ((yysemantic_stack_[(2) - (1)]));
+          (yyval) = QVariant(members);
+        ;}
+    break;
+
+  case 16:
+#line 127 "json_parser.yy"
+    { (yyval) = QVariant (QVariantList()); ;}
+    break;
+
+  case 17:
+#line 128 "json_parser.yy"
+    {
+            QVariantList members = (yysemantic_stack_[(3) - (3)]).toList();
+            (yysemantic_stack_[(3) - (3)]) = QVariant(); // Allow reuse of list
+            members.prepend ((yysemantic_stack_[(3) - (2)]));
+            (yyval) = QVariant(members);
+          ;}
+    break;
+
+  case 18:
+#line 135 "json_parser.yy"
+    { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
+    break;
+
+  case 19:
+#line 136 "json_parser.yy"
+    { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
+    break;
+
+  case 20:
+#line 137 "json_parser.yy"
+    { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
+    break;
+
+  case 21:
+#line 138 "json_parser.yy"
+    { (yyval) = (yysemantic_stack_[(1) - (1)]); ;}
+    break;
+
+  case 22:
+#line 139 "json_parser.yy"
+    { (yyval) = QVariant (true); ;}
+    break;
+
+  case 23:
+#line 140 "json_parser.yy"
+    { (yyval) = QVariant (false); ;}
+    break;
+
+  case 24:
+#line 141 "json_parser.yy"
+    {
+          QVariant null_variant;
+          (yyval) = null_variant;
+        ;}
+    break;
+
+  case 25:
+#line 146 "json_parser.yy"
+    {
+            if ((yysemantic_stack_[(1) - (1)]).toByteArray().startsWith('-')) {
+              (yyval) = QVariant (QVariant::LongLong);
+              (yyval).setValue((yysemantic_stack_[(1) - (1)]).toLongLong());
+            }
+            else {
+              (yyval) = QVariant (QVariant::ULongLong);
+              (yyval).setValue((yysemantic_stack_[(1) - (1)]).toULongLong());
+            }
+          ;}
+    break;
+
+  case 26:
+#line 156 "json_parser.yy"
+    {
+            const QByteArray value = (yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray();
+            (yyval) = QVariant(QVariant::Double);
+            (yyval).setValue(value.toDouble());
+          ;}
+    break;
+
+  case 27:
+#line 161 "json_parser.yy"
+    { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray()); ;}
+    break;
+
+  case 28:
+#line 162 "json_parser.yy"
+    {
+            const QByteArray value = (yysemantic_stack_[(3) - (1)]).toByteArray() + (yysemantic_stack_[(3) - (2)]).toByteArray() + (yysemantic_stack_[(3) - (3)]).toByteArray();
+            (yyval) = QVariant (value);
+          ;}
+    break;
+
+  case 29:
+#line 167 "json_parser.yy"
+    { (yyval) = QVariant ((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray()); ;}
+    break;
+
+  case 30:
+#line 168 "json_parser.yy"
+    { (yyval) = QVariant (QByteArray("-") + (yysemantic_stack_[(3) - (2)]).toByteArray() + (yysemantic_stack_[(3) - (3)]).toByteArray()); ;}
+    break;
+
+  case 31:
+#line 170 "json_parser.yy"
+    { (yyval) = QVariant (QByteArray("")); ;}
+    break;
+
+  case 32:
+#line 171 "json_parser.yy"
+    {
+          (yyval) = QVariant((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray());
+        ;}
+    break;
+
+  case 33:
+#line 175 "json_parser.yy"
+    {
+          (yyval) = QVariant(QByteArray(".") + (yysemantic_stack_[(2) - (2)]).toByteArray());
+        ;}
+    break;
+
+  case 34:
+#line 179 "json_parser.yy"
+    { (yyval) = QVariant((yysemantic_stack_[(2) - (1)]).toByteArray() + (yysemantic_stack_[(2) - (2)]).toByteArray()); ;}
+    break;
+
+  case 35:
+#line 181 "json_parser.yy"
+    { (yyval) = (yysemantic_stack_[(3) - (2)]); ;}
+    break;
+
+  case 36:
+#line 183 "json_parser.yy"
+    { (yyval) = QVariant (QString(QLatin1String(""))); ;}
+    break;
+
+  case 37:
+#line 184 "json_parser.yy"
+    {
+                (yyval) = (yysemantic_stack_[(1) - (1)]);
+              ;}
+    break;
+
+
+    /* Line 675 of lalr1.cc.  */
+#line 618 "json_parser.cc"
+	default: break;
+      }
+    YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
+
+    yypop_ (yylen);
+    yylen = 0;
+    YY_STACK_PRINT ();
+
+    yysemantic_stack_.push (yyval);
+    yylocation_stack_.push (yyloc);
+
+    /* Shift the result of the reduction.  */
+    yyn = yyr1_[yyn];
+    yystate = yypgoto_[yyn - yyntokens_] + yystate_stack_[0];
+    if (0 <= yystate && yystate <= yylast_
+	&& yycheck_[yystate] == yystate_stack_[0])
+      yystate = yytable_[yystate];
+    else
+      yystate = yydefgoto_[yyn - yyntokens_];
+    goto yynewstate;
+
+  /*------------------------------------.
+  | yyerrlab -- here on detecting error |
+  `------------------------------------*/
+  yyerrlab:
+    /* If not already recovering from an error, report this error.  */
+    if (!yyerrstatus_)
+      {
+	++yynerrs_;
+	error (yylloc, yysyntax_error_ (yystate, yytoken));
+      }
+
+    yyerror_range[0] = yylloc;
+    if (yyerrstatus_ == 3)
+      {
+	/* If just tried and failed to reuse look-ahead token after an
+	 error, discard it.  */
+
+	if (yychar <= yyeof_)
+	  {
+	  /* Return failure if at end of input.  */
+	  if (yychar == yyeof_)
+	    YYABORT;
+	  }
+	else
+	  {
+	    yydestruct_ ("Error: discarding", yytoken, &yylval, &yylloc);
+	    yychar = yyempty_;
+	  }
+      }
+
+    /* Else will try to reuse look-ahead token after shifting the error
+       token.  */
+    goto yyerrlab1;
+
+
+  /*---------------------------------------------------.
+  | yyerrorlab -- error raised explicitly by YYERROR.  |
+  `---------------------------------------------------*/
+  yyerrorlab:
+
+    /* Pacify compilers like GCC when the user code never invokes
+       YYERROR and the label yyerrorlab therefore never appears in user
+       code.  */
+    if (false)
+      goto yyerrorlab;
+
+    yyerror_range[0] = yylocation_stack_[yylen - 1];
+    /* Do not reclaim the symbols of the rule which action triggered
+       this YYERROR.  */
+    yypop_ (yylen);
+    yylen = 0;
+    yystate = yystate_stack_[0];
+    goto yyerrlab1;
+
+  /*-------------------------------------------------------------.
+  | yyerrlab1 -- common code for both syntax error and YYERROR.  |
+  `-------------------------------------------------------------*/
+  yyerrlab1:
+    yyerrstatus_ = 3;	/* Each real token shifted decrements this.  */
+
+    for (;;)
+      {
+	yyn = yypact_[yystate];
+	if (yyn != yypact_ninf_)
+	{
+	  yyn += yyterror_;
+	  if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_)
+	    {
+	      yyn = yytable_[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+	/* Pop the current state because it cannot handle the error token.  */
+	if (yystate_stack_.height () == 1)
+	YYABORT;
+
+	yyerror_range[0] = yylocation_stack_[0];
+	yydestruct_ ("Error: popping",
+		     yystos_[yystate],
+		     &yysemantic_stack_[0], &yylocation_stack_[0]);
+	yypop_ ();
+	yystate = yystate_stack_[0];
+	YY_STACK_PRINT ();
+      }
+
+    if (yyn == yyfinal_)
+      goto yyacceptlab;
+
+    yyerror_range[1] = yylloc;
+    // Using YYLLOC is tempting, but would change the location of
+    // the look-ahead.  YYLOC is available though.
+    YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+    yysemantic_stack_.push (yylval);
+    yylocation_stack_.push (yyloc);
+
+    /* Shift the error token.  */
+    YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
+		   &yysemantic_stack_[0], &yylocation_stack_[0]);
+
+    yystate = yyn;
+    goto yynewstate;
+
+    /* Accept.  */
+  yyacceptlab:
+    yyresult = 0;
+    goto yyreturn;
+
+    /* Abort.  */
+  yyabortlab:
+    yyresult = 1;
+    goto yyreturn;
+
+  yyreturn:
+    if (yychar != yyeof_ && yychar != yyempty_)
+      yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
+
+    /* Do not reclaim the symbols of the rule which action triggered
+       this YYABORT or YYACCEPT.  */
+    yypop_ (yylen);
+    while (yystate_stack_.height () != 1)
+      {
+	yydestruct_ ("Cleanup: popping",
+		   yystos_[yystate_stack_[0]],
+		   &yysemantic_stack_[0],
+		   &yylocation_stack_[0]);
+	yypop_ ();
+      }
+
+    return yyresult;
+  }
+
+  // Generate an error message.
+  std::string
+  json_parser::yysyntax_error_ (int yystate, int tok)
+  {
+    std::string res;
+    YYUSE (yystate);
+#if YYERROR_VERBOSE
+    int yyn = yypact_[yystate];
+    if (yypact_ninf_ < yyn && yyn <= yylast_)
+      {
+	/* Start YYX at -YYN if negative to avoid negative indexes in
+	   YYCHECK.  */
+	int yyxbegin = yyn < 0 ? -yyn : 0;
+
+	/* Stay within bounds of both yycheck and yytname.  */
+	int yychecklim = yylast_ - yyn + 1;
+	int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_;
+	int count = 0;
+	for (int x = yyxbegin; x < yyxend; ++x)
+	  if (yycheck_[x + yyn] == x && x != yyterror_)
+	    ++count;
+
+	// FIXME: This method of building the message is not compatible
+	// with internationalization.  It should work like yacc.c does it.
+	// That is, first build a string that looks like this:
+	// "syntax error, unexpected %s or %s or %s"
+	// Then, invoke YY_ on this string.
+	// Finally, use the string as a format to output
+	// yytname_[tok], etc.
+	// Until this gets fixed, this message appears in English only.
+	res = "syntax error, unexpected ";
+	res += yytnamerr_ (yytname_[tok]);
+	if (count < 5)
+	  {
+	    count = 0;
+	    for (int x = yyxbegin; x < yyxend; ++x)
+	      if (yycheck_[x + yyn] == x && x != yyterror_)
+		{
+		  res += (!count++) ? ", expecting " : " or ";
+		  res += yytnamerr_ (yytname_[x]);
+		}
+	  }
+      }
+    else
+#endif
+      res = YY_("syntax error");
+    return res;
+  }
+
+
+  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+     STATE-NUM.  */
+  const signed char json_parser::yypact_ninf_ = -18;
+  const signed char
+  json_parser::yypact_[] =
+  {
+         5,   -18,   -18,     1,    -2,    19,   -18,   -18,   -18,     2,
+      20,    17,    21,    16,    18,   -18,   -18,   -18,   -18,   -18,
+      24,    23,   -18,    -8,   -18,   -18,   -18,    15,   -18,     1,
+     -18,    -2,    18,    18,   -18,   -18,    -2,   -18,    18,    18,
+      22,   -18,   -18,    17,   -18,   -18,   -18,    23,   -18,   -18,
+     -18,   -18,   -18
+  };
+
+  /* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+     doesn't specify something else to do.  Zero means the default is an
+     error.  */
+  const unsigned char
+  json_parser::yydefact_[] =
+  {
+         0,     6,     5,     8,    14,     0,     2,     3,     4,    36,
+       0,    10,     0,     0,    31,    22,    23,    24,    20,    21,
+       0,    16,    19,    25,    18,     1,    37,     0,     7,     0,
+       9,     0,    31,    31,    29,    13,     0,    15,    31,    31,
+      26,    27,    35,    10,    12,    30,    32,    16,    33,    34,
+      28,    11,    17
+  };
+
+  /* YYPGOTO[NTERM-NUM].  */
+  const signed char
+  json_parser::yypgoto_[] =
+  {
+       -18,   -18,   -18,    33,   -18,    -7,     6,    37,   -18,    -9,
+     -13,   -18,   -18,   -17,   -18,    -1,    -3,   -18
+  };
+
+  /* YYDEFGOTO[NTERM-NUM].  */
+  const signed char
+  json_parser::yydefgoto_[] =
+  {
+        -1,     5,     6,    18,    10,    30,    11,    19,    20,    37,
+      21,    22,    23,    34,    40,    41,    24,    27
+  };
+
+  /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+     positive, shift that token.  If negative, reduce the rule which
+     number is the opposite.  If zero, do what YYDEFACT says.  */
+  const signed char json_parser::yytable_ninf_ = -1;
+  const unsigned char
+  json_parser::yytable_[] =
+  {
+        12,     3,    38,     4,    39,     1,     2,    13,     3,    14,
+       4,    15,    16,    17,     9,    45,    46,     9,    44,    25,
+      26,    48,    49,    47,    28,    29,    12,    32,    31,    33,
+      35,    36,    42,     7,    39,    43,    51,     8,    52,    50
+  };
+
+  /* YYCHECK.  */
+  const unsigned char
+  json_parser::yycheck_[] =
+  {
+         3,     3,    10,     5,    12,     0,     1,     9,     3,    11,
+       5,    13,    14,    15,    16,    32,    33,    16,    31,     0,
+      18,    38,    39,    36,     4,     8,    29,    11,     7,    11,
+       6,     8,    17,     0,    12,    29,    43,     0,    47,    40
+  };
+
+  /* STOS_[STATE-NUM] -- The (internal number of the) accessing
+     symbol of state STATE-NUM.  */
+  const unsigned char
+  json_parser::yystos_[] =
+  {
+         0,     0,     1,     3,     5,    20,    21,    22,    26,    16,
+      23,    25,    35,     9,    11,    13,    14,    15,    22,    26,
+      27,    29,    30,    31,    35,     0,    18,    36,     4,     8,
+      24,     7,    11,    11,    32,     6,     8,    28,    10,    12,
+      33,    34,    17,    25,    29,    32,    32,    29,    32,    32,
+      34,    24,    28
+  };
+
+#if YYDEBUG
+  /* TOKEN_NUMBER_[YYLEX-NUM] -- Internal symbol number corresponding
+     to YYLEX-NUM.  */
+  const unsigned short int
+  json_parser::yytoken_number_[] =
+  {
+         0,   256,   257,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16
+  };
+#endif
+
+  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+  const unsigned char
+  json_parser::yyr1_[] =
+  {
+         0,    19,    20,    21,    21,    21,    21,    22,    23,    23,
+      24,    24,    25,    26,    27,    27,    28,    28,    29,    29,
+      29,    29,    29,    29,    29,    30,    30,    30,    30,    31,
+      31,    32,    32,    33,    34,    35,    36,    36
+  };
+
+  /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+  const unsigned char
+  json_parser::yyr2_[] =
+  {
+         0,     2,     1,     1,     1,     1,     1,     3,     0,     2,
+       0,     3,     3,     3,     0,     2,     0,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     2,     3,     2,
+       3,     0,     2,     2,     2,     3,     0,     1
+  };
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+  /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+     First, the terminals, then, starting at \a yyntokens_, nonterminals.  */
+  const char*
+  const json_parser::yytname_[] =
+  {
+    "\"end of file\"", "error", "$undefined", "\"{\"", "\"}\"", "\"[\"",
+  "\"]\"", "\":\"", "\",\"", "\"-\"", "\".\"", "\"digit\"",
+  "\"exponential\"", "\"true\"", "\"false\"", "\"null\"",
+  "\"open quotation mark\"", "\"close quotation mark\"", "\"string\"",
+  "$accept", "start", "data", "object", "members", "r_members", "pair",
+  "array", "values", "r_values", "value", "number", "int", "digits",
+  "fract", "exp", "string", "string_arg", 0
+  };
+#endif
+
+#if YYDEBUG
+  /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+  const json_parser::rhs_number_type
+  json_parser::yyrhs_[] =
+  {
+        20,     0,    -1,    21,    -1,    22,    -1,    26,    -1,     1,
+      -1,     0,    -1,     3,    23,     4,    -1,    -1,    25,    24,
+      -1,    -1,     8,    25,    24,    -1,    35,     7,    29,    -1,
+       5,    27,     6,    -1,    -1,    29,    28,    -1,    -1,     8,
+      29,    28,    -1,    35,    -1,    30,    -1,    22,    -1,    26,
+      -1,    13,    -1,    14,    -1,    15,    -1,    31,    -1,    31,
+      33,    -1,    31,    34,    -1,    31,    33,    34,    -1,    11,
+      32,    -1,     9,    11,    32,    -1,    -1,    11,    32,    -1,
+      10,    32,    -1,    12,    32,    -1,    16,    36,    17,    -1,
+      -1,    18,    -1
+  };
+
+  /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+     YYRHS.  */
+  const unsigned char
+  json_parser::yyprhs_[] =
+  {
+         0,     0,     3,     5,     7,     9,    11,    13,    17,    18,
+      21,    22,    26,    30,    34,    35,    38,    39,    43,    45,
+      47,    49,    51,    53,    55,    57,    59,    62,    65,    69,
+      72,    76,    77,    80,    83,    86,    90,    91
+  };
+
+  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+  const unsigned char
+  json_parser::yyrline_[] =
+  {
+         0,    80,    80,    85,    86,    87,    93,    95,    97,    98,
+     104,   105,   111,   117,   119,   120,   127,   128,   135,   136,
+     137,   138,   139,   140,   141,   146,   156,   161,   162,   167,
+     168,   170,   171,   175,   179,   181,   183,   184
+  };
+
+  // Print the state stack on the debug stream.
+  void
+  json_parser::yystack_print_ ()
+  {
+    *yycdebug_ << "Stack now";
+    for (state_stack_type::const_iterator i = yystate_stack_.begin ();
+	 i != yystate_stack_.end (); ++i)
+      *yycdebug_ << ' ' << *i;
+    *yycdebug_ << std::endl;
+  }
+
+  // Report on the debug stream that the rule \a yyrule is going to be reduced.
+  void
+  json_parser::yy_reduce_print_ (int yyrule)
+  {
+    unsigned int yylno = yyrline_[yyrule];
+    int yynrhs = yyr2_[yyrule];
+    /* Print the symbols being reduced, and their result.  */
+    *yycdebug_ << "Reducing stack by rule " << yyrule - 1
+	       << " (line " << yylno << "), ";
+    /* The symbols being reduced.  */
+    for (int yyi = 0; yyi < yynrhs; yyi++)
+      YY_SYMBOL_PRINT ("   $" << yyi + 1 << " =",
+		       yyrhs_[yyprhs_[yyrule] + yyi],
+		       &(yysemantic_stack_[(yynrhs) - (yyi + 1)]),
+		       &(yylocation_stack_[(yynrhs) - (yyi + 1)]));
+  }
+#endif // YYDEBUG
+
+  /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+  json_parser::token_number_type
+  json_parser::yytranslate_ (int t)
+  {
+    static
+    const token_number_type
+    translate_table[] =
+    {
+           0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2
+    };
+    if ((unsigned int) t <= yyuser_token_number_max_)
+      return translate_table[t];
+    else
+      return yyundef_token_;
+  }
+
+  const int json_parser::yyeof_ = 0;
+  const int json_parser::yylast_ = 39;
+  const int json_parser::yynnts_ = 18;
+  const int json_parser::yyempty_ = -2;
+  const int json_parser::yyfinal_ = 25;
+  const int json_parser::yyterror_ = 1;
+  const int json_parser::yyerrcode_ = 256;
+  const int json_parser::yyntokens_ = 19;
+
+  const unsigned int json_parser::yyuser_token_number_max_ = 257;
+  const json_parser::token_number_type json_parser::yyundef_token_ = 2;
+
+} // namespace yy
+
+#line 188 "json_parser.yy"
+
+
+int yy::yylex(YYSTYPE *yylval, yy::location *yylloc, QJson::ParserPrivate* driver)
+{
+  JSonScanner* scanner = driver->m_scanner;
+  yylval->clear();
+  int ret = scanner->yylex(yylval, yylloc);
+
+  qjsonDebug() << "json_parser::yylex - calling scanner yylval==|"
+           << yylval->toByteArray() << "|, ret==|" << QString::number(ret) << "|";
+  
+  return ret;
+}
+
+void yy::json_parser::error (const yy::location& yyloc,
+                                 const std::string& error)
+{
+  /*qjsonDebug() << yyloc.begin.line;
+  qjsonDebug() << yyloc.begin.column;
+  qjsonDebug() << yyloc.end.line;
+  qjsonDebug() << yyloc.end.column;*/
+  qjsonDebug() << "json_parser::error [line" << yyloc.end.line << "] -" << error.c_str() ;
+  driver->setError(QString::fromLatin1(error.c_str()), yyloc.end.line);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/json_parser.hh	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,321 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Skeleton interface for Bison LALR(1) parsers in C++
+
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C++ LALR(1) parser skeleton written by Akim Demaille.  */
+
+#ifndef PARSER_HEADER_H
+# define PARSER_HEADER_H
+
+#include <string>
+#include <iostream>
+#include "stack.hh"
+
+namespace yy
+{
+  class position;
+  class location;
+}
+
+/* First part of user declarations.  */
+#line 25 "json_parser.yy"
+
+  #include "parser_p.h"
+  #include "json_scanner.h"
+  #include "qjson_debug.h"
+
+  #include <QtCore/QByteArray>
+  #include <QtCore/QMap>
+  #include <QtCore/QString>
+  #include <QtCore/QVariant>
+
+  class JSonScanner;
+
+  namespace QJson {
+    class Parser;
+  }
+
+  #define YYERROR_VERBOSE 1
+
+
+/* Line 303 of lalr1.cc.  */
+#line 73 "json_parser.hh"
+
+#include "location.hh"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 1
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 1
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)		\
+do {							\
+  if (N)						\
+    {							\
+      (Current).begin = (Rhs)[1].begin;			\
+      (Current).end   = (Rhs)[N].end;			\
+    }							\
+  else							\
+    {							\
+      (Current).begin = (Current).end = (Rhs)[0].end;	\
+    }							\
+} while (false)
+#endif
+
+namespace yy
+{
+
+  /// A Bison parser.
+  class json_parser
+  {
+  public:
+    /// Symbol semantic values.
+#ifndef YYSTYPE
+    typedef int semantic_type;
+#else
+    typedef YYSTYPE semantic_type;
+#endif
+    /// Symbol locations.
+    typedef location location_type;
+    /// Tokens.
+    struct token
+    {
+      /* Tokens.  */
+   enum yytokentype {
+     END = 0,
+     CURLY_BRACKET_OPEN = 1,
+     CURLY_BRACKET_CLOSE = 2,
+     SQUARE_BRACKET_OPEN = 3,
+     SQUARE_BRACKET_CLOSE = 4,
+     COLON = 5,
+     COMMA = 6,
+     MINUS = 7,
+     DOT = 8,
+     DIGIT = 9,
+     E = 10,
+     TRUE_VAL = 11,
+     FALSE_VAL = 12,
+     NULL_VAL = 13,
+     QUOTMARKOPEN = 14,
+     QUOTMARKCLOSE = 15,
+     STRING = 16
+   };
+
+    };
+    /// Token type.
+    typedef token::yytokentype token_type;
+
+    /// Build a parser object.
+    json_parser (QJson::ParserPrivate* driver_yyarg);
+    virtual ~json_parser ();
+
+    /// Parse.
+    /// \returns  0 iff parsing succeeded.
+    virtual int parse ();
+
+    /// The current debugging stream.
+    std::ostream& debug_stream () const;
+    /// Set the current debugging stream.
+    void set_debug_stream (std::ostream &);
+
+    /// Type for debugging levels.
+    typedef int debug_level_type;
+    /// The current debugging level.
+    debug_level_type debug_level () const;
+    /// Set the current debugging level.
+    void set_debug_level (debug_level_type l);
+
+  private:
+    /// Report a syntax error.
+    /// \param loc    where the syntax error is found.
+    /// \param msg    a description of the syntax error.
+    virtual void error (const location_type& loc, const std::string& msg);
+
+    /// Generate an error message.
+    /// \param state   the state where the error occurred.
+    /// \param tok     the look-ahead token.
+    virtual std::string yysyntax_error_ (int yystate, int tok);
+
+#if YYDEBUG
+    /// \brief Report a symbol value on the debug stream.
+    /// \param yytype       The token type.
+    /// \param yyvaluep     Its semantic value.
+    /// \param yylocationp  Its location.
+    virtual void yy_symbol_value_print_ (int yytype,
+					 const semantic_type* yyvaluep,
+					 const location_type* yylocationp);
+    /// \brief Report a symbol on the debug stream.
+    /// \param yytype       The token type.
+    /// \param yyvaluep     Its semantic value.
+    /// \param yylocationp  Its location.
+    virtual void yy_symbol_print_ (int yytype,
+				   const semantic_type* yyvaluep,
+				   const location_type* yylocationp);
+#endif /* ! YYDEBUG */
+
+
+    /// State numbers.
+    typedef int state_type;
+    /// State stack type.
+    typedef stack<state_type>    state_stack_type;
+    /// Semantic value stack type.
+    typedef stack<semantic_type> semantic_stack_type;
+    /// location stack type.
+    typedef stack<location_type> location_stack_type;
+
+    /// The state stack.
+    state_stack_type yystate_stack_;
+    /// The semantic value stack.
+    semantic_stack_type yysemantic_stack_;
+    /// The location stack.
+    location_stack_type yylocation_stack_;
+
+    /// Internal symbol numbers.
+    typedef unsigned char token_number_type;
+    /* Tables.  */
+    /// For a state, the index in \a yytable_ of its portion.
+    static const signed char yypact_[];
+    static const signed char yypact_ninf_;
+
+    /// For a state, default rule to reduce.
+    /// Unless\a  yytable_ specifies something else to do.
+    /// Zero means the default is an error.
+    static const unsigned char yydefact_[];
+
+    static const signed char yypgoto_[];
+    static const signed char yydefgoto_[];
+
+    /// What to do in a state.
+    /// \a yytable_[yypact_[s]]: what to do in state \a s.
+    /// - if positive, shift that token.
+    /// - if negative, reduce the rule which number is the opposite.
+    /// - if zero, do what YYDEFACT says.
+    static const unsigned char yytable_[];
+    static const signed char yytable_ninf_;
+
+    static const unsigned char yycheck_[];
+
+    /// For a state, its accessing symbol.
+    static const unsigned char yystos_[];
+
+    /// For a rule, its LHS.
+    static const unsigned char yyr1_[];
+    /// For a rule, its RHS length.
+    static const unsigned char yyr2_[];
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+    /// For a symbol, its name in clear.
+    static const char* const yytname_[];
+#endif
+
+#if YYERROR_VERBOSE
+    /// Convert the symbol name \a n to a form suitable for a diagnostic.
+    virtual std::string yytnamerr_ (const char *n);
+#endif
+
+#if YYDEBUG
+    /// A type to store symbol numbers and -1.
+    typedef signed char rhs_number_type;
+    /// A `-1'-separated list of the rules' RHS.
+    static const rhs_number_type yyrhs_[];
+    /// For each rule, the index of the first RHS symbol in \a yyrhs_.
+    static const unsigned char yyprhs_[];
+    /// For each rule, its source line number.
+    static const unsigned char yyrline_[];
+    /// For each scanner token number, its symbol number.
+    static const unsigned short int yytoken_number_[];
+    /// Report on the debug stream that the rule \a r is going to be reduced.
+    virtual void yy_reduce_print_ (int r);
+    /// Print the state stack on the debug stream.
+    virtual void yystack_print_ ();
+#endif
+
+    /// Convert a scanner token number \a t to a symbol number.
+    token_number_type yytranslate_ (int t);
+
+    /// \brief Reclaim the memory associated to a symbol.
+    /// \param yymsg        Why this token is reclaimed.
+    /// \param yytype       The symbol type.
+    /// \param yyvaluep     Its semantic value.
+    /// \param yylocationp  Its location.
+    inline void yydestruct_ (const char* yymsg,
+			     int yytype,
+			     semantic_type* yyvaluep,
+			     location_type* yylocationp);
+
+    /// Pop \a n symbols the three stacks.
+    inline void yypop_ (unsigned int n = 1);
+
+    /* Constants.  */
+    static const int yyeof_;
+    /* LAST_ -- Last index in TABLE_.  */
+    static const int yylast_;
+    static const int yynnts_;
+    static const int yyempty_;
+    static const int yyfinal_;
+    static const int yyterror_;
+    static const int yyerrcode_;
+    static const int yyntokens_;
+    static const unsigned int yyuser_token_number_max_;
+    static const token_number_type yyundef_token_;
+
+    /* Debugging.  */
+    int yydebug_;
+    std::ostream* yycdebug_;
+
+
+    /* User arguments.  */
+    QJson::ParserPrivate* driver;
+  };
+}
+
+
+#endif /* ! defined PARSER_HEADER_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/json_parser.yy	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,211 @@
+/* This file is part of QJSon
+  *
+  * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+%skeleton "lalr1.cc"
+%defines
+%define "parser_class_name" "json_parser"
+
+%{
+  #include "parser_p.h"
+  #include "json_scanner.h"
+  #include "qjson_debug.h"
+
+  #include <QtCore/QByteArray>
+  #include <QtCore/QMap>
+  #include <QtCore/QString>
+  #include <QtCore/QVariant>
+
+  class JSonScanner;
+
+  namespace QJson {
+    class Parser;
+  }
+
+  #define YYERROR_VERBOSE 1
+%}
+
+%parse-param { QJson::ParserPrivate* driver }
+%lex-param { QJson::ParserPrivate* driver }
+
+%locations
+
+%debug
+%error-verbose
+
+%token END 0 "end of file"
+
+%token CURLY_BRACKET_OPEN 1 "{"
+%token CURLY_BRACKET_CLOSE 2 "}"
+%token SQUARE_BRACKET_OPEN 3 "["
+%token SQUARE_BRACKET_CLOSE 4 "]"
+
+%token COLON 5 ":"
+%token COMMA 6 ","
+%token MINUS 7 "-"
+%token DOT 8 "."
+%token DIGIT 9 "digit"
+%token E 10 "exponential"
+%token TRUE_VAL 11 "true"
+%token FALSE_VAL 12 "false"
+%token NULL_VAL 13 "null"
+%token QUOTMARKOPEN 14 "open quotation mark"
+%token QUOTMARKCLOSE 15 "close quotation mark"
+
+%token STRING 16 "string"
+
+// define the initial token
+%start start
+
+%%
+
+// grammar rules
+
+start: data {
+              driver->m_result = $1;
+              qjsonDebug() << "json_parser - parsing finished";
+            };
+
+data: object {$$ = $1; }
+      | array {$$ = $1; }
+      | error
+          {
+            qCritical()<< "json_parser - syntax error found, "
+                    << "forcing abort";
+            YYABORT;
+          }
+      | END;
+
+object: CURLY_BRACKET_OPEN members CURLY_BRACKET_CLOSE { $$ = $2; };
+
+members: /* empty */ { $$ = QVariant (QVariantMap()); }
+        | pair r_members {
+            QVariantMap members = $2.toMap();
+            $2 = QVariant(); // Allow reuse of map
+            $$ = QVariant(members.unite ($1.toMap()));
+          };
+
+r_members: /* empty */ { $$ = QVariant (QVariantMap()); }
+        | COMMA pair r_members {
+          QVariantMap members = $3.toMap();
+          $3 = QVariant(); // Allow reuse of map
+          $$ = QVariant(members.unite ($2.toMap()));
+          };
+
+pair:   string COLON value {
+            QVariantMap pair;
+            pair.insert ($1.toString(), QVariant($3));
+            $$ = QVariant (pair);
+          };
+
+array: SQUARE_BRACKET_OPEN values SQUARE_BRACKET_CLOSE { $$ = $2; };
+
+values: /* empty */ { $$ = QVariant (QVariantList()); }
+        | value r_values {
+          QVariantList members = $2.toList();
+          $2 = QVariant(); // Allow reuse of list
+          members.prepend ($1);
+          $$ = QVariant(members);
+        };
+
+r_values: /* empty */ { $$ = QVariant (QVariantList()); }
+          | COMMA value r_values {
+            QVariantList members = $3.toList();
+            $3 = QVariant(); // Allow reuse of list
+            members.prepend ($2);
+            $$ = QVariant(members);
+          };
+
+value: string { $$ = $1; }
+        | number { $$ = $1; }
+        | object { $$ = $1; }
+        | array { $$ = $1; }
+        | TRUE_VAL { $$ = QVariant (true); }
+        | FALSE_VAL { $$ = QVariant (false); }
+        | NULL_VAL {
+          QVariant null_variant;
+          $$ = null_variant;
+        };
+
+number: int {
+            if ($1.toByteArray().startsWith('-')) {
+              $$ = QVariant (QVariant::LongLong);
+              $$.setValue($1.toLongLong());
+            }
+            else {
+              $$ = QVariant (QVariant::ULongLong);
+              $$.setValue($1.toULongLong());
+            }
+          }
+        | int fract {
+            const QByteArray value = $1.toByteArray() + $2.toByteArray();
+            $$ = QVariant(QVariant::Double);
+            $$.setValue(value.toDouble());
+          }
+        | int exp { $$ = QVariant ($1.toByteArray() + $2.toByteArray()); }
+        | int fract exp {
+            const QByteArray value = $1.toByteArray() + $2.toByteArray() + $3.toByteArray();
+            $$ = QVariant (value);
+          };
+
+int:  DIGIT digits { $$ = QVariant ($1.toByteArray() + $2.toByteArray()); }
+      | MINUS DIGIT digits { $$ = QVariant (QByteArray("-") + $2.toByteArray() + $3.toByteArray()); };
+
+digits: /* empty */ { $$ = QVariant (QByteArray("")); }
+        | DIGIT digits {
+          $$ = QVariant($1.toByteArray() + $2.toByteArray());
+        };
+
+fract: DOT digits {
+          $$ = QVariant(QByteArray(".") + $2.toByteArray());
+        };
+
+exp: E digits { $$ = QVariant($1.toByteArray() + $2.toByteArray()); };
+
+string: QUOTMARKOPEN string_arg QUOTMARKCLOSE { $$ = $2; };
+
+string_arg: /*empty */ { $$ = QVariant (QString(QLatin1String(""))); }
+            | STRING {
+                $$ = $1;
+              };
+
+%%
+
+int yy::yylex(YYSTYPE *yylval, yy::location *yylloc, QJson::ParserPrivate* driver)
+{
+  JSonScanner* scanner = driver->m_scanner;
+  yylval->clear();
+  int ret = scanner->yylex(yylval, yylloc);
+
+  qjsonDebug() << "json_parser::yylex - calling scanner yylval==|"
+           << yylval->toByteArray() << "|, ret==|" << QString::number(ret) << "|";
+  
+  return ret;
+}
+
+void yy::json_parser::error (const yy::location& yyloc,
+                                 const std::string& error)
+{
+  /*qjsonDebug() << yyloc.begin.line;
+  qjsonDebug() << yyloc.begin.column;
+  qjsonDebug() << yyloc.end.line;
+  qjsonDebug() << yyloc.end.column;*/
+  qjsonDebug() << "json_parser::error [line" << yyloc.end.line << "] -" << error.c_str() ;
+  driver->setError(QString::fromLatin1(error.c_str()), yyloc.end.line);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/json_scanner.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,329 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "qjson_debug.h"
+#include "json_scanner.h"
+#include "json_parser.hh"
+
+#include <ctype.h>
+
+#include <QtCore/QDebug>
+#include <QtCore/QRegExp>
+
+#include <cassert>
+
+bool ishexnstring(const QString& string) {
+  for (int i = 0; i < string.length(); i++) {
+    if (isxdigit(string[i] == 0))
+      return false;
+  }
+  return true;
+}
+
+JSonScanner::JSonScanner(QIODevice* io)
+  : m_io (io)
+{
+  m_quotmarkClosed = true;
+  m_quotmarkCount = 0;
+}
+
+static QString unescape( const QByteArray& ba, bool* ok ) {
+  assert( ok );
+  *ok = false;
+  QString res;
+  QByteArray seg;
+  bool bs = false;
+  for ( int i = 0, size = ba.size(); i < size; ++i ) {
+    const char ch = ba[i];
+    if ( !bs ) {
+      if ( ch == '\\' )
+        bs = true;
+      else
+        seg += ch;
+    } else {
+      bs = false;
+      switch ( ch ) {
+        case 'b':
+          seg += '\b';
+          break;
+        case 'f':
+          seg += '\f';
+          break;
+        case 'n':
+          seg += '\n';
+          break;
+        case 'r':
+          seg += '\r';
+          break;
+        case 't':
+          seg += '\t';
+          break;
+        case 'u':
+        {
+          res += QString::fromUtf8( seg );
+          seg.clear();
+
+          if ( i > size - 5 ) {
+            //error
+            return QString();
+          }
+
+          const QString hex_digit1 = QString::fromUtf8( ba.mid( i + 1, 2 ) );
+          const QString hex_digit2 = QString::fromUtf8( ba.mid( i + 3, 2 ) );
+          i += 4;
+
+          if ( !ishexnstring( hex_digit1 ) || !ishexnstring( hex_digit2 ) ) {
+            qCritical() << "Not an hex string:" << hex_digit1 << hex_digit2;
+            return QString();
+          }
+          bool hexOk;
+          const ushort hex_code1 = hex_digit1.toShort( &hexOk, 16 );
+          if (!hexOk) {
+            qCritical() << "error converting hex value to short:" << hex_digit1;
+            return QString();
+          }
+          const ushort hex_code2 = hex_digit2.toShort( &hexOk, 16 );
+          if (!hexOk) {
+            qCritical() << "error converting hex value to short:" << hex_digit2;
+            return QString();
+          }
+
+          res += QChar(hex_code2, hex_code1);
+          break;
+        }
+        case '\\':
+          seg  += '\\';
+          break;
+        default:
+          seg += ch;
+          break;
+      }
+    }
+  }
+  res += QString::fromUtf8( seg );
+  *ok = true;
+  return res;
+}
+
+int JSonScanner::yylex(YYSTYPE* yylval, yy::location *yylloc)
+{
+  char ch;
+  
+  if (!m_io->isOpen()) {
+    qCritical() << "JSonScanner::yylex - io device is not open";
+    return -1;
+  }
+
+  yylloc->step();
+
+  do {
+    bool ret;
+    if (m_io->atEnd()) {
+      qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::END";
+      return yy::json_parser::token::END;
+    }
+    else
+      ret = m_io->getChar(&ch);
+
+    if (!ret) {
+      qCritical() << "JSonScanner::yylex - error reading from io device";
+      return -1;
+    }
+
+    qjsonDebug() << "JSonScanner::yylex - got |" << ch << "|";
+    
+    yylloc->columns();
+    
+    if (ch == '\n' || ch == '\r')
+      yylloc->lines();
+      
+  } while (m_quotmarkClosed && (isspace(ch) != 0));
+
+  if (m_quotmarkClosed && ((ch == 't') || (ch == 'T')
+      || (ch == 'n') || (ch == 'N'))) {
+    // check true & null value
+    const QByteArray buf = m_io->peek(3).toLower();
+
+    if (buf.length() == 3) {
+      if (buf == "rue") {
+        m_io->read (3);
+        yylloc->columns(3);
+        qjsonDebug() << "JSonScanner::yylex - TRUE_VAL";
+        return yy::json_parser::token::TRUE_VAL;
+      }
+      else if (buf == "ull") {
+        m_io->read (3);
+        yylloc->columns(3);
+        qjsonDebug() << "JSonScanner::yylex - NULL_VAL";
+        return yy::json_parser::token::NULL_VAL;
+      }
+    }
+  }
+  else if (m_quotmarkClosed && ((ch == 'f') || (ch == 'F'))) {
+    // check false value
+    const QByteArray buf = m_io->peek(4).toLower();
+    if (buf.length() == 4) {
+      if (buf == "alse") {
+        m_io->read (4);
+        yylloc->columns(4);
+        qjsonDebug() << "JSonScanner::yylex - FALSE_VAL";
+        return yy::json_parser::token::FALSE_VAL;
+      }
+    }
+  }
+  else if (m_quotmarkClosed && ((ch == 'e') || (ch == 'E'))) {
+    QByteArray ret(1, ch);
+    const QByteArray buf = m_io->peek(1);
+    if (!buf.isEmpty()) {
+      if ((buf[0] == '+' ) || (buf[0] == '-' )) {
+        ret += m_io->read (1);  
+        yylloc->columns();
+      }
+    }
+    *yylval = QVariant(QString::fromUtf8(ret));
+    return yy::json_parser::token::E;
+  }
+  
+  if (ch != '"' && !m_quotmarkClosed) {
+    // we're inside a " " block
+    QByteArray raw;
+    raw += ch;
+    char prevCh = ch;
+    bool escape_on = (ch == '\\') ? true : false;
+
+    while ( true ) {
+      char nextCh;
+      qint64 ret = m_io->peek(&nextCh, 1);
+      if (ret != 1) {
+        if (m_io->atEnd())
+          return yy::json_parser::token::END;
+        else
+          return -1;
+      } else if ( !escape_on && nextCh == '\"' ) {
+        bool ok;
+        const QString str = unescape( raw, &ok );
+        *yylval = ok ? str : QString();
+        return ok ? yy::json_parser::token::STRING : -1;
+      }
+#if 0
+      if ( prevCh == '\\' && nextCh != '"' && nextCh != '\\' && nextCh != '/' &&
+           nextCh != 'b' && nextCh != 'f' && nextCh != 'n' &&
+           nextCh != 'r' && nextCh != 't' && nextCh != 'u') {
+        qjsonDebug() << "Just read" << nextCh;
+        qjsonDebug() << "JSonScanner::yylex - error decoding escaped sequence";
+        return -1;
+       }
+#endif
+      m_io->read(1); // consume
+      raw += nextCh;
+      prevCh = nextCh;
+      if (escape_on)
+        escape_on = false;
+      else
+        escape_on = (prevCh == '\\') ? true : false;
+#if 0
+      if (nextCh == '\\') {
+        char buf;
+        if (m_io->getChar (&buf)) {
+          yylloc->columns();
+          if (((buf != '"') && (buf != '\\') && (buf != '/') &&
+              (buf != 'b') && (buf != 'f') && (buf != 'n') &&
+              (buf != 'r') && (buf != 't') && (buf != 'u'))) {
+                qjsonDebug() << "Just read" << buf;
+                qjsonDebug() << "JSonScanner::yylex - error decoding escaped sequence";
+                return -1;
+          }
+        } else {
+          qCritical() << "JSonScanner::yylex - error decoding escaped sequence : io error";
+          return -1;
+        }
+      }
+#endif
+    }
+  }
+  else if (isdigit(ch) != 0 && m_quotmarkClosed) {
+    *yylval = QVariant(QString::fromLatin1(QByteArray(&ch,1)));
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::DIGIT";
+    return yy::json_parser::token::DIGIT;
+  }
+  else if (isalnum(ch) != 0) {
+    *yylval = QVariant(QString(QChar::fromLatin1(ch)));
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::WORD ("
+             << ch << ")";
+    return yy::json_parser::token::STRING;
+  }
+  else if (ch == ':') {
+    // set yylval
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::COLON";
+    return yy::json_parser::token::COLON;
+  }
+  else if (ch == '"') {
+    // yy::json_parser::token::QUOTMARK (")
+
+    // set yylval
+    m_quotmarkCount++;
+    if (m_quotmarkCount %2 == 0) {
+      m_quotmarkClosed = true;
+      m_quotmarkCount = 0;
+      qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::QUOTMARKCLOSE";
+      return yy::json_parser::token::QUOTMARKCLOSE;
+    }
+    else {
+      m_quotmarkClosed = false;
+      qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::QUOTMARKOPEN";
+      return yy::json_parser::token::QUOTMARKOPEN;
+    }
+  }
+  else if (ch == ',') {
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::COMMA";
+    return yy::json_parser::token::COMMA;
+  }
+  else if (ch == '.') {
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::DOT";
+    return yy::json_parser::token::DOT;
+  }
+  else if (ch == '-') {
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::MINUS";
+    return yy::json_parser::token::MINUS;
+  }
+  else if (ch == '[') {
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::SQUARE_BRACKET_OPEN";
+    return yy::json_parser::token::SQUARE_BRACKET_OPEN;
+  }
+  else if (ch == ']') {
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::SQUARE_BRACKET_CLOSE";
+    return yy::json_parser::token::SQUARE_BRACKET_CLOSE;
+  }
+  else if (ch == '{') {
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::CURLY_BRACKET_OPEN";
+    return yy::json_parser::token::CURLY_BRACKET_OPEN;
+  }
+  else if (ch == '}') {
+    qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::CURLY_BRACKET_CLOSE";
+    return yy::json_parser::token::CURLY_BRACKET_CLOSE;
+  }
+
+  //unknown char!
+  //TODO yyerror?
+  qCritical() << "JSonScanner::yylex - unknown char, returning -1";
+  return -1;
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/json_scanner.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,52 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _JSON_SCANNER
+#define _JSON_SCANNER
+
+#include <fstream>
+#include <string>
+
+#include <QtCore/QIODevice>
+#include <QtCore/QVariant>
+
+#define YYSTYPE QVariant
+
+#include "parser_p.h"
+
+namespace yy {
+  class location;
+  int yylex(YYSTYPE *yylval, yy::location *yylloc, QJson::ParserPrivate* driver);
+}
+
+class JSonScanner
+{
+    public:
+        explicit JSonScanner(QIODevice* io);
+        int yylex(YYSTYPE* yylval, yy::location *yylloc);
+        
+    protected:
+        bool m_quotmarkClosed;
+        unsigned int m_quotmarkCount;
+        QIODevice* m_io;
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/location.hh	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,145 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Locations for Bison parsers in C++
+
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/**
+ ** \file location.hh
+ ** Define the yy::location class.
+ */
+
+#ifndef BISON_LOCATION_HH
+# define BISON_LOCATION_HH
+
+# include <iostream>
+# include <string>
+# include "position.hh"
+
+namespace yy
+{
+
+  /// Abstract a location.
+  class location
+  {
+  public:
+
+    /// Construct a location.
+    location ()
+      : begin (), end ()
+    {
+    }
+
+
+    /// Initialization.
+    inline void initialize (std::string* fn)
+    {
+      begin.initialize (fn);
+      end = begin;
+    }
+
+    /** \name Line and Column related manipulators
+     ** \{ */
+  public:
+    /// Reset initial location to final location.
+    inline void step ()
+    {
+      begin = end;
+    }
+
+    /// Extend the current location to the COUNT next columns.
+    inline void columns (unsigned int count = 1)
+    {
+      end += count;
+    }
+
+    /// Extend the current location to the COUNT next lines.
+    inline void lines (unsigned int count = 1)
+    {
+      end.lines (count);
+    }
+    /** \} */
+
+
+  public:
+    /// Beginning of the located region.
+    position begin;
+    /// End of the located region.
+    position end;
+  };
+
+  /// Join two location objects to create a location.
+  inline const location operator+ (const location& begin, const location& end)
+  {
+    location res = begin;
+    res.end = end.end;
+    return res;
+  }
+
+  /// Add two location objects.
+  inline const location operator+ (const location& begin, unsigned int width)
+  {
+    location res = begin;
+    res.columns (width);
+    return res;
+  }
+
+  /// Add and assign a location.
+  inline location& operator+= (location& res, unsigned int width)
+  {
+    res.columns (width);
+    return res;
+  }
+
+  /** \brief Intercept output stream redirection.
+   ** \param ostr the destination output stream
+   ** \param loc a reference to the location to redirect
+   **
+   ** Avoid duplicate information.
+   */
+  inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
+  {
+    position last = loc.end - 1;
+    ostr << loc.begin;
+    if (last.filename
+	&& (!loc.begin.filename
+	    || *loc.begin.filename != *last.filename))
+      ostr << '-' << last;
+    else if (loc.begin.line != last.line)
+      ostr << '-' << last.line  << '.' << last.column;
+    else if (loc.begin.column != last.column)
+      ostr << '-' << last.column;
+    return ostr;
+  }
+
+}
+
+#endif // not BISON_LOCATION_HH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/parser.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,114 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "parser.h"
+#include "parser_p.h"
+#include "json_parser.hh"
+#include "json_scanner.h"
+
+#include <QtCore/QBuffer>
+#include <QtCore/QStringList>
+#include <QtCore/QTextStream>
+#include <QtCore/QDebug>
+
+using namespace QJson;
+
+ParserPrivate::ParserPrivate() :
+    m_scanner(0)
+  , m_negate(false)
+  , m_error(false)
+{
+}
+
+ParserPrivate::~ParserPrivate()
+{
+  delete m_scanner;
+}
+
+void ParserPrivate::setError(QString errorMsg, int errorLine) {
+  m_error = true;
+  m_errorMsg = errorMsg;
+  m_errorLine = errorLine;
+}
+
+Parser::Parser() :
+    d(new ParserPrivate)
+{
+}
+
+Parser::~Parser()
+{
+  delete d;
+}
+
+QVariant Parser::parse (QIODevice* io, bool* ok)
+{
+  d->m_errorMsg.clear();
+  delete d->m_scanner;
+  d->m_scanner = 0;
+
+  if (!io->isOpen()) {
+    if (!io->open(QIODevice::ReadOnly)) {
+      if (ok != 0)
+        *ok = false;
+      qCritical ("Error opening device");
+      return QVariant();
+    }
+  }
+
+  if (!io->isReadable()) {
+    if (ok != 0)
+      *ok = false;
+    qCritical ("Device is not readable");
+    io->close();
+    return QVariant();
+  }
+
+  d->m_scanner = new JSonScanner (io);
+  yy::json_parser parser(d);
+  parser.parse();
+
+  delete d->m_scanner;
+  d->m_scanner = 0;
+
+  if (ok != 0)
+    *ok = !d->m_error;
+
+  io->close();
+  return d->m_result;
+}
+
+QVariant Parser::parse(const QByteArray& jsonString, bool* ok) {
+  QBuffer buffer;
+  buffer.open(QBuffer::ReadWrite);
+  buffer.write(jsonString);
+  buffer.seek(0);
+  return parse (&buffer, ok);
+}
+
+QString Parser::errorString() const
+{
+  return d->m_errorMsg;
+}
+
+int Parser::errorLine() const
+{
+  return d->m_errorLine;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/parser.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,80 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef QJSON_PARSER_H
+#define QJSON_PARSER_H
+
+#include "qjson_export.h"
+
+class QIODevice;
+class QVariant;
+
+namespace QJson {
+
+  class ParserPrivate;
+
+  /**
+  * @brief Main class used to convert JSON data to QVariant objects
+  */
+  class QJSON_EXPORT Parser
+  {
+    public:
+      Parser();
+      ~Parser();
+
+      /**
+      * Read JSON string from the I/O Device and converts it to a QVariant object
+      * @param io Input output device
+      * @param ok if a conversion error occurs, *ok is set to false; otherwise *ok is set to true.
+      * @returns a QVariant object generated from the JSON string
+      */
+      QVariant parse(QIODevice* io, bool* ok = 0);
+
+      /**
+      * This is a method provided for convenience.
+      * @param jsonData data containing the JSON object representation
+      * @param ok if a conversion error occurs, *ok is set to false; otherwise *ok is set to true.
+      * @returns a QVariant object generated from the JSON string
+      * @sa errorString
+      * @sa errorLine
+      */
+      QVariant parse(const QByteArray& jsonData, bool* ok = 0);
+
+      /**
+      * This method returns the error message
+      * @returns a QString object containing the error message of the last parse operation
+      * @sa errorLine
+      */
+      QString errorString() const;
+
+      /**
+      * This method returns line number where the error occurred
+      * @returns the line number where the error occurred
+      * @sa errorString
+      */
+      int errorLine() const;
+
+    private:
+      Q_DISABLE_COPY(Parser)
+      ParserPrivate* const d;
+  };
+}
+
+#endif // QJSON_PARSER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/parser_p.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,55 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
+ * Copyright (C) 2009 Michael Leupold <lemma@confuego.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef QJSON_PARSER_P_H
+#define QJSON_PARSER_P_H
+
+#include "parser.h"
+
+#include <QtCore/QString>
+#include <QtCore/QVariant>
+
+class JSonScanner;
+
+namespace yy {
+  class json_parser;
+}
+
+namespace QJson {
+
+  class ParserPrivate
+  {
+    public:
+      ParserPrivate();
+      ~ParserPrivate();
+
+      void setError(QString errorMsg, int line);
+
+      JSonScanner* m_scanner;
+      bool m_negate;
+      bool m_error;
+      int m_errorLine;
+      QString m_errorMsg;
+      QVariant m_result;
+  };
+}
+
+#endif // QJSON_PARSER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/parserrunnable.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,68 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+#include "parserrunnable.h"
+
+#include "parser.h"
+
+#include <QtCore/QDebug>
+#include <QtCore/QVariant>
+
+using namespace QJson;
+
+class QJson::ParserRunnable::Private
+{
+  public:
+    QByteArray m_data;
+};
+
+ParserRunnable::ParserRunnable(QObject* parent)
+    : QObject(parent),
+      QRunnable(),
+      d(new Private)
+{
+  qRegisterMetaType<QVariant>("QVariant");
+}
+
+ParserRunnable::~ParserRunnable()
+{
+  delete d;
+}
+
+void ParserRunnable::setData( const QByteArray& data ) {
+  d->m_data = data;
+}
+
+void ParserRunnable::run()
+{
+  qDebug() << Q_FUNC_INFO;
+
+  bool ok;
+  Parser parser;
+  QVariant result = parser.parse (d->m_data, &ok);
+  if (ok) {
+    qDebug() << "successfully converted json item to QVariant object";
+    emit parsingFinished(result, true, QString());
+  } else {
+    const QString errorText = tr("An error occured while parsing json: %1").arg(parser.errorString());
+    qCritical() << errorText;
+    emit parsingFinished(QVariant(), false, errorText);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/parserrunnable.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,67 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+#ifndef PARSERRUNNABLE_H
+#define PARSERRUNNABLE_H
+
+#include "qjson_export.h"
+
+#include <QtCore/QObject>
+#include <QtCore/QRunnable>
+
+class QVariant;
+
+namespace QJson {
+  /**
+  * @brief Convenience class for converting JSON data to QVariant objects using a dedicated thread
+  */
+  class QJSON_EXPORT ParserRunnable  : public QObject, public QRunnable
+  {
+    Q_OBJECT
+    public:
+      /**
+      * This signal is emitted when the conversion process has been completed
+      * @param data contains the JSON data that has to be converted
+      * @param parent parent of the object
+      **/
+      explicit ParserRunnable(QObject* parent = 0);
+      ~ParserRunnable();
+
+      void setData( const QByteArray& data );
+
+      void run();
+
+    Q_SIGNALS:
+      /**
+      * This signal is emitted when the parsing process has been completed
+      * @param json contains the result of the parsing
+      * @param ok if a parsing error occurs ok is set to false, otherwise it's set to true.
+      * @param error_msg contains a string explaining the failure reason
+      **/
+      void parsingFinished(const QVariant& json, bool ok, const QString& error_msg);
+
+    private:
+      Q_DISABLE_COPY(ParserRunnable)
+      class Private;
+      Private* const d;
+  };
+}
+
+#endif // PARSERRUNNABLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/position.hh	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,142 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Positions for Bison parsers in C++
+
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/**
+ ** \file position.hh
+ ** Define the yy::position class.
+ */
+
+#ifndef BISON_POSITION_HH
+# define BISON_POSITION_HH
+
+# include <iostream>
+# include <string>
+
+namespace yy
+{
+  /// Abstract a position.
+  class position
+  {
+  public:
+
+    /// Construct a position.
+    position ()
+      : filename (0), line (1), column (0)
+    {
+    }
+
+
+    /// Initialization.
+    inline void initialize (std::string* fn)
+    {
+      filename = fn;
+      line = 1;
+      column = 0;
+    }
+
+    /** \name Line and Column related manipulators
+     ** \{ */
+  public:
+    /// (line related) Advance to the COUNT next lines.
+    inline void lines (int count = 1)
+    {
+      column = 0;
+      line += count;
+    }
+
+    /// (column related) Advance to the COUNT next columns.
+    inline void columns (int count = 1)
+    {
+      int leftmost = 0;
+      int current  = column;
+      if (leftmost <= current + count)
+	column += count;
+      else
+	column = 0;
+    }
+    /** \} */
+
+  public:
+    /// File name to which this position refers.
+    std::string* filename;
+    /// Current line number.
+    unsigned int line;
+    /// Current column number.
+    unsigned int column;
+  };
+
+  /// Add and assign a position.
+  inline const position&
+  operator+= (position& res, const int width)
+  {
+    res.columns (width);
+    return res;
+  }
+
+  /// Add two position objects.
+  inline const position
+  operator+ (const position& begin, const int width)
+  {
+    position res = begin;
+    return res += width;
+  }
+
+  /// Add and assign a position.
+  inline const position&
+  operator-= (position& res, const int width)
+  {
+    return res += -width;
+  }
+
+  /// Add two position objects.
+  inline const position
+  operator- (const position& begin, const int width)
+  {
+    return begin + -width;
+  }
+
+  /** \brief Intercept output stream redirection.
+   ** \param ostr the destination output stream
+   ** \param pos a reference to the position to redirect
+   */
+  inline std::ostream&
+  operator<< (std::ostream& ostr, const position& pos)
+  {
+    if (pos.filename)
+      ostr << *pos.filename << ':';
+    return ostr << pos.line << '.' << pos.column;
+  }
+
+}
+#endif // not BISON_POSITION_HH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/qjson_debug.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,33 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Michael Leupold <lemma@confuego.org>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+#ifndef QJSON_DEBUG_H
+#define QJSON_DEBUG_H
+
+#include <QtCore/QDebug>
+
+// define qjsonDebug()
+#ifdef QJSON_VERBOSE_DEBUG_OUTPUT
+  inline QDebug qjsonDebug() { return QDebug(QtDebugMsg); }
+#else
+  inline QNoDebug qjsonDebug() { return QNoDebug(); }
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/qjson_export.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,35 @@
+/*  This file is part of the KDE project
+    Copyright (C) 2009 Pino Toscano <pino@kde.org>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#ifndef QJSON_EXPORT_H
+#define QJSON_EXPORT_H
+
+#include <QtCore/qglobal.h>
+
+#ifndef QJSON_EXPORT
+# if defined(QJSON_MAKEDLL)
+   /* We are building this library */
+#  define QJSON_EXPORT Q_DECL_EXPORT
+# else
+   /* We are using this library */
+#  define QJSON_EXPORT Q_DECL_IMPORT
+# endif
+#endif
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/qjson_template.pkg	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,30 @@
+; qjson_template.pkg generated by qmake at 2010-05-17T16:06:46
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"qjson"},(0xEe29a5ee),0,7,1
+
+; Localised Vendor name
+%{"Vendor"}
+
+; Unique Vendor name
+:"Vendor"
+
+; Manual PKG pre-rules from PRO files
+; Default HW/platform dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+ 
+; Default dependency to Qt libraries
+(0x2001E61C), 4, 6, 1, {"Qt"}
+
+; DEPLOYMENT
+"d:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/release/$(PLATFORM)/$(TARGET)/qjson.dll"    - "!:\sys\bin\qjson.dll"
+
+; Manual PKG post-rules from PRO files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/qobjecthelper.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,81 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Till Adam <adam@kde.org>
+  * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+
+#include "qobjecthelper.h"
+
+#include <QtCore/QMetaObject>
+#include <QtCore/QMetaProperty>
+#include <QtCore/QObject>
+
+using namespace QJson;
+
+class QObjectHelper::QObjectHelperPrivate {
+};
+
+QObjectHelper::QObjectHelper()
+  : d (new QObjectHelperPrivate)
+{
+}
+
+QObjectHelper::~QObjectHelper()
+{
+  delete d;
+}
+
+QVariantMap QObjectHelper::qobject2qvariant( const QObject* object,
+                              const QStringList& ignoredProperties)
+{
+  QVariantMap result;
+  const QMetaObject *metaobject = object->metaObject();
+  int count = metaobject->propertyCount();
+  for (int i=0; i<count; ++i) {
+    QMetaProperty metaproperty = metaobject->property(i);
+    const char *name = metaproperty.name();
+
+    if (ignoredProperties.contains(QLatin1String(name)) || (!metaproperty.isReadable()))
+      continue;
+
+    QVariant value = object->property(name);
+    result[QLatin1String(name)] = value;
+ }
+  return result;
+}
+
+void QObjectHelper::qvariant2qobject(const QVariantMap& variant, QObject* object)
+{
+  QStringList properies;
+  const QMetaObject *metaobject = object->metaObject();
+  int count = metaobject->propertyCount();
+  for (int i=0; i<count; ++i) {
+    QMetaProperty metaproperty = metaobject->property(i);
+    if (metaproperty.isWritable()) {
+      properies << QLatin1String( metaproperty.name());
+    }
+  }
+
+  QVariantMap::const_iterator iter;
+  for (iter = variant.constBegin(); iter != variant.end(); iter++) {
+    if (properies.contains(iter.key())) {
+      object->setProperty(iter.key().toAscii(), iter.value());
+    }
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/qobjecthelper.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,143 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+#ifndef QOBJECTHELPER_H
+#define QOBJECTHELPER_H
+
+#include "qjson_export.h"
+
+#include <QtCore/QLatin1String>
+#include <QtCore/QStringList>
+#include <QtCore/QVariantMap>
+
+class QObject;
+
+namespace QJson {
+  /**
+  * @brief Class used to convert QObject into QVariant and vivce-versa.
+  * During these operations only the class attributes defined as properties will
+  * be considered.
+  *
+  * Suppose the declaration of the Person class looks like this:
+  * \code
+  * class Person : public QObject
+    {
+      Q_OBJECT
+
+      Q_PROPERTY(QString name READ name WRITE setName)
+      Q_PROPERTY(int phoneNumber READ phoneNumber WRITE setPhoneNumber)
+      Q_PROPERTY(Gender gender READ gender WRITE setGender)
+      Q_PROPERTY(QDate dob READ dob WRITE setDob)
+      Q_ENUMS(Gender)
+
+     public:
+        Person(QObject* parent = 0);
+        ~Person();
+
+        QString name() const;
+        void setName(const QString& name);
+
+        int phoneNumber() const;
+        void setPhoneNumber(const int  phoneNumber);
+
+        enum Gender {Male, Female};
+        void setGender(Gender gender);
+        Gender gender() const;
+
+        QDate dob() const;
+        void setDob(const QDate& dob);
+
+      private:
+        QString m_name;
+        int m_phoneNumber;
+        Gender m_gender;
+        QDate m_dob;
+    };
+    \endcode
+
+    The following code will serialize an instance of Person to JSON :
+
+    \code
+    Person person;
+    person.setName("Flavio");
+    person.setPhoneNumber(123456);
+    person.setGender(Person::Male);
+    person.setDob(QDate(1982, 7, 12));
+
+    QVariantMap variant = QObjectHelper::qobject2qvariant(&person);
+    Serializer serializer;
+    qDebug() << serializer.serialize( variant);
+    \endcode
+
+    The generated output will be:
+    \code
+    { "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
+    \endcode
+
+    It's also possible to initialize a QObject using the values stored inside of
+    a QVariantMap.
+
+    Suppose you have the following JSON data stored into a QString:
+    \code
+    { "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
+    \endcode
+
+    The following code will initialize an already allocated instance of Person
+    using the JSON values:
+    \code
+    Parser parser;
+    QVariant variant = parser.parse(json);
+
+    Person person;
+    QObjectHelper::qvariant2qobject(variant.toMap(), &person);
+    \endcode
+
+    \sa Parser
+    \sa Serializer
+  */
+  class QJSON_EXPORT QObjectHelper {
+    public:
+      QObjectHelper();
+      ~QObjectHelper();
+      
+    /**
+    * This method converts a QObject instance into a QVariantMap.
+    *
+    * @param object The QObject instance to be converted.
+    * @param ignoredProperties Properties that won't be converted.
+    */
+    static QVariantMap qobject2qvariant( const QObject* object,
+                                  const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName"))));
+
+    /**
+    * This method converts a QVariantMap instance into a QObject
+    *
+    * @param object The QObject instance to be converted.
+    */
+    static void qvariant2qobject(const QVariantMap& variant, QObject* object);
+
+    private:
+      Q_DISABLE_COPY(QObjectHelper)
+      class QObjectHelperPrivate;
+      QObjectHelperPrivate* const d;
+  };
+}
+
+#endif // QOBJECTHELPER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/serializer.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,152 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Till Adam <adam@kde.org>
+  * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+#include "serializer.h"
+
+#include <QtCore/QDataStream>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+using namespace QJson;
+
+class Serializer::SerializerPrivate {
+};
+
+Serializer::Serializer() : d( new SerializerPrivate ) {
+}
+
+Serializer::~Serializer() {
+  delete d;
+}
+
+void Serializer::serialize( const QVariant& v, QIODevice* io, bool* ok )
+{
+  Q_ASSERT( io );
+  if (!io->isOpen()) {
+    if (!io->open(QIODevice::WriteOnly)) {
+      if ( ok != 0 )
+        *ok = false;
+      qCritical ("Error opening device");
+      return;
+    }
+  }
+
+  if (!io->isWritable()) {
+    if (ok != 0)
+      *ok = false;
+    qCritical ("Device is not readable");
+    io->close();
+    return;
+  }
+
+  const QByteArray str = serialize( v );
+  if ( !str.isNull() ) {
+    QDataStream stream( io );
+    stream << str;
+  } else {
+    if ( ok )
+      *ok = false;
+  }
+}
+
+static QString sanitizeString( QString str )
+{
+  str.replace( QLatin1String( "\\" ), QLatin1String( "\\\\" ) );
+  str.replace( QLatin1String( "\"" ), QLatin1String( "\\\"" ) );
+  str.replace( QLatin1String( "\b" ), QLatin1String( "\\b" ) );
+  str.replace( QLatin1String( "\f" ), QLatin1String( "\\f" ) );
+  str.replace( QLatin1String( "\n" ), QLatin1String( "\\n" ) );
+  str.replace( QLatin1String( "\r" ), QLatin1String( "\\r" ) );
+  str.replace( QLatin1String( "\t" ), QLatin1String( "\\t" ) );
+  return QString( QLatin1String( "\"%1\"" ) ).arg( str );
+}
+
+static QByteArray join( const QList<QByteArray>& list, const QByteArray& sep ) {
+  QByteArray res;
+  Q_FOREACH( const QByteArray& i, list ) {
+    if ( !res.isEmpty() )
+      res += sep;
+    res += i;
+  }
+  return res;
+}
+
+QByteArray Serializer::serialize( const QVariant &v )
+{
+  QByteArray str;
+  bool error = false;
+
+  if ( ! v.isValid() ) { // invalid or null?
+    str = "null";
+  } else if ( v.type() == QVariant::List ) { // variant is a list?
+    const QVariantList list = v.toList();
+    QList<QByteArray> values;
+    Q_FOREACH( const QVariant& v, list )
+    {
+      QByteArray serializedValue = serialize( v );
+      if ( serializedValue.isNull() ) {
+        error = true;
+        break;
+      }
+      values << serializedValue;
+    }
+    str = "[ " + join( values, ", " ) + " ]";
+  } else if ( v.type() == QVariant::Map ) { // variant is a map?
+    const QVariantMap vmap = v.toMap();
+    QMapIterator<QString, QVariant> it( vmap );
+    str = "{ ";
+    QList<QByteArray> pairs;
+    while ( it.hasNext() ) {
+      it.next();
+      QByteArray serializedValue = serialize( it.value() );
+      if ( serializedValue.isNull() ) {
+        error = true;
+        break;
+      }
+      pairs << sanitizeString( it.key() ).toUtf8() + " : " + serializedValue;
+    }
+    str += join( pairs, ", " );
+    str += " }";
+  } else if (( v.type() == QVariant::String ) ||  ( v.type() == QVariant::ByteArray )) { // a string or a byte array?
+    str = sanitizeString( v.toString() ).toUtf8();
+  } else if ( v.type() == QVariant::Double ) { // a double?
+    str = QByteArray::number( v.toDouble() );
+    if( ! str.contains( "." ) && ! str.contains( "e" ) ) {
+      str += ".0";
+    }
+  } else if ( v.type() == QVariant::Bool ) { // boolean value?
+    str = ( v.toBool() ? "true" : "false" );
+  } else if ( v.type() == QVariant::ULongLong ) { // large unsigned number?
+    str = QByteArray::number( v.value<qulonglong>() );
+  } else if ( v.canConvert<qlonglong>() ) { // any signed number?
+    str = QByteArray::number( v.value<qlonglong>() );
+  } else if ( v.canConvert<QString>() ){ // can value be converted to string?
+    // this will catch QDate, QDateTime, QUrl, ...
+    str = sanitizeString( v.toString() ).toUtf8();
+    //TODO: catch other values like QImage, QRect, ...
+  } else {
+    error = true;
+  }
+  if ( !error )
+    return str;
+  else
+    return QByteArray();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/serializer.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,71 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Till Adam <adam@kde.org>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+#ifndef QJSON_SERIALIZER_H
+#define QJSON_SERIALIZER_H
+
+#include "qjson_export.h"
+
+class QIODevice;
+class QString;
+class QVariant;
+
+namespace QJson {
+  /**
+  * @brief Main class used to convert QVariant objects to JSON data.
+  *
+  * QVariant objects are converted to a string containing the JSON data.
+  * If QVariant object is empty or not valid a <em>null</em> json object is returned.
+  */
+  class QJSON_EXPORT Serializer {
+  public:
+    Serializer();
+    ~Serializer();
+
+     /**
+      * This method generates a textual JSON representation and outputs it to the
+      * passed in I/O Device.
+      * @param variant The JSON document in its in-memory representation as generated by the
+      * parser.
+      * @param out Input output device
+      * @param ok if a conversion error occurs, *ok is set to false; otherwise *ok is set to true
+      */
+    void serialize( const QVariant& variant, QIODevice* out, bool* ok = 0 );
+
+    /**
+      * This is a method provided for convenience. It turns the passed in in-memory
+      * representation of the JSON document into a textual one, which is returned.
+      * If the returned string is empty, the document was empty. If it was null, there
+      * was a parsing error.
+      *
+      * @param variant The JSON document in its in-memory representation as generated by the
+      * parser.
+      */
+
+    QByteArray serialize( const QVariant& variant );
+
+  private:
+    Q_DISABLE_COPY(Serializer)
+    class SerializerPrivate;
+    SerializerPrivate* const d;
+  };
+}
+
+#endif // QJSON_SERIALIZER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/serializerrunnable.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,60 @@
+#include "serializerrunnable.h"
+
+/* This file is part of qjson
+ *
+ * Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
+ *               2009 Frank Osterfeld <osterfeld@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "parserrunnable.h"
+#include "serializer.h"
+
+#include <QtCore/QDebug>
+#include <QtCore/QVariant>
+
+using namespace QJson;
+
+class SerializerRunnable::Private
+{
+public:
+  QVariant json;
+};
+
+SerializerRunnable::SerializerRunnable(QObject* parent)
+    : QObject(parent),
+      QRunnable(),
+      d(new Private)
+{
+  qRegisterMetaType<QVariant>("QVariant");
+}
+
+SerializerRunnable::~SerializerRunnable()
+{
+  delete d;
+}
+
+void SerializerRunnable::setJsonObject( const QVariant& json )
+{
+  d->json = json;
+}
+
+void SerializerRunnable::run()
+{
+  Serializer serializer;
+  emit parsingFinished( Serializer().serialize( d->json ), true, QString() );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/serializerrunnable.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,74 @@
+/* This file is part of qjson
+ *
+ * Copyright (C) 2009 Frank Osterfeld <osterfeld@kde.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef SERIALIZERRUNNABLE_H
+#define SERIALIZERRUNNABLE_H
+
+#include "qjson_export.h"
+
+#include <QtCore/QObject>
+#include <QtCore/QRunnable>
+
+class QByteArray;
+class QString;
+class QVariant;
+
+namespace QJson {
+  /**
+  * @brief Convenience class for converting JSON data to QVariant objects using a dedicated thread
+  */
+  class QJSON_EXPORT SerializerRunnable  : public QObject, public QRunnable
+  {
+    Q_OBJECT
+    public:
+      /**
+      * This signal is emitted when the conversion process has been completed
+      * @param data contains the JSON data that has to be converted
+      * @param parent parent of the object
+      **/
+      explicit SerializerRunnable(QObject* parent = 0);
+      ~SerializerRunnable();
+
+      /**
+       * Sets the json object to serialize.
+       *
+       * @param json QVariant containing the json representation to be serialized
+       */
+      void setJsonObject( const QVariant& json );
+
+      /* reimp */ void run();
+
+    Q_SIGNALS:
+      /**
+      * This signal is emitted when the serialization process has been completed
+      * @param serialized contains the result of the serialization
+      * @param ok if a serialization error occurs ok is set to false, otherwise it's set to true.
+      * @param error_msg contains a string explaining the failure reason
+      **/
+      void parsingFinished(const QByteArray& serialized, bool ok, const QString& error_msg);
+
+    private:
+      Q_DISABLE_COPY(SerializerRunnable)
+      class Private;
+      Private* const d;
+  };
+}
+
+#endif // SERIALIZERRUNNABLE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/src.pro	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,72 @@
+QJSON_BASE = ..
+QJSON_SRCBASE = .
+
+TEMPLATE = lib
+QT      -= gui
+TARGET   = qjson
+DESTDIR  = $$QJSON_BASE/lib
+CONFIG += create_prl
+
+VERSION = 0.7.1
+
+windows: {
+  DEFINES += QJSON_MAKEDLL
+}
+
+QJSON_CPP = $$QJSON_SRCBASE
+INCLUDEPATH += $$QJSON_CPP
+
+PRIVATE_HEADERS += \
+  json_parser.hh \
+  json_scanner.h \
+  location.hh \
+  parser_p.h  \
+  position.hh \
+  qjson_debug.h  \
+  stack.hh
+
+PUBLIC_HEADERS += \
+  parser.h \
+  parserrunnable.h \
+  qobjecthelper.h \
+  serializer.h \
+  serializerrunnable.h \
+  qjson_export.h
+
+HEADERS += $$PRIVATE_HEADERS $$PUBLIC_HEADERS
+
+SOURCES += \
+  json_parser.cc \
+  json_scanner.cpp \
+  parser.cpp \
+  parserrunnable.cpp \
+  qobjecthelper.cpp \
+  serializer.cpp \
+  serializerrunnable.cpp
+
+symbian: {
+  DEFINES += QJSON_MAKEDLL
+  #export public header to \epocroot\epoc32\include to be able to use them
+  headers.files = $$PUBLIC_HEADERS
+  headers.path = $$PWD
+  for(header, headers.files) {
+    {BLD_INF_RULES.prj_exports += "$$header"}
+  }
+
+  TARGET.EPOCALLOWDLLDATA = 1
+
+  # uid for the dll
+  TARGET.UID3=0xEe29a5ee
+  TARGET.CAPABILITY = ReadDeviceData WriteDeviceData
+
+  # do not freeze api-> no libs produced. Comment when freezing!
+  # run "abld freeze winscw" to create def files
+  symbian:MMP_RULES += "EXPORTUNFROZEN"
+
+
+  # add dll to the sis
+  QjsonDeployment.sources = $${TARGET}.dll
+  QjsonDeployment.path = /sys/bin
+
+  DEPLOYMENT += QjsonDeployment
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/src/stack.hh	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,129 @@
+/* A Bison parser, made by GNU Bison 2.3.  */
+
+/* Stack handling for Bison parsers in C++
+
+   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+#ifndef BISON_STACK_HH
+# define BISON_STACK_HH
+
+#include <deque>
+
+namespace yy
+{
+  template <class T, class S = std::deque<T> >
+  class stack
+  {
+  public:
+
+    // Hide our reversed order.
+    typedef typename S::reverse_iterator iterator;
+    typedef typename S::const_reverse_iterator const_iterator;
+
+    stack () : seq_ ()
+    {
+    }
+
+    stack (unsigned int n) : seq_ (n)
+    {
+    }
+
+    inline
+    T&
+    operator [] (unsigned int i)
+    {
+      return seq_[i];
+    }
+
+    inline
+    const T&
+    operator [] (unsigned int i) const
+    {
+      return seq_[i];
+    }
+
+    inline
+    void
+    push (const T& t)
+    {
+      seq_.push_front (t);
+    }
+
+    inline
+    void
+    pop (unsigned int n = 1)
+    {
+      for (; n; --n)
+	seq_.pop_front ();
+    }
+
+    inline
+    unsigned int
+    height () const
+    {
+      return seq_.size ();
+    }
+
+    inline const_iterator begin () const { return seq_.rbegin (); }
+    inline const_iterator end () const { return seq_.rend (); }
+
+  private:
+
+    S seq_;
+  };
+
+  /// Present a slice of the top of a stack.
+  template <class T, class S = stack<T> >
+  class slice
+  {
+  public:
+
+    slice (const S& stack,
+	   unsigned int range) : stack_ (stack),
+				 range_ (range)
+    {
+    }
+
+    inline
+    const T&
+    operator [] (unsigned int i) const
+    {
+      return stack_[range_ - i];
+    }
+
+  private:
+
+    const S& stack_;
+    unsigned int range_;
+  };
+}
+
+#endif // not BISON_STACK_HH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/CMakeLists.txt	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,62 @@
+##### Probably don't want to edit below this line #####
+
+SET( QT_USE_QTTEST TRUE )
+
+# Use it
+INCLUDE( ${QT_USE_FILE} )
+
+INCLUDE(AddFileDependencies)
+
+# Include the library include directories, and the current build directory (moc)
+INCLUDE_DIRECTORIES(
+  ../src
+  ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+ADD_EXECUTABLE(
+  cmdline_tester
+  cmdline_tester.cpp
+)
+
+SET (qjson_test_support_SRCS person.cpp)
+QT4_WRAP_CPP(qjson_test_support_MOC_SRCS person.h)
+
+ADD_LIBRARY (qjson_test_support STATIC ${qjson_test_support_SRCS}
+                                       ${qjson_test_support_MOC_SRCS})
+
+#ADD_FILE_DEPENDENCIES(cmdline_tester.cpp ${MOC_SOURCE})
+TARGET_LINK_LIBRARIES(
+  cmdline_tester
+  ${QT_LIBRARIES}
+  qjson
+)
+
+SET( UNIT_TESTS
+  testparser
+ 	testqobjecthelper
+  testserializer
+)
+
+# Build the tests
+FOREACH(test ${UNIT_TESTS})
+  MESSAGE(STATUS "Building ${test}")
+  QT4_WRAP_CPP(MOC_SOURCE ${test}.cpp)
+  ADD_EXECUTABLE(
+    ${test}
+    ${test}.cpp
+  )
+
+  ADD_FILE_DEPENDENCIES(${test}.cpp ${MOC_SOURCE})
+  TARGET_LINK_LIBRARIES(
+    ${test}
+    ${QT_LIBRARIES}
+    qjson
+    qjson_test_support
+  )
+  if (QJSON_TEST_OUTPUT STREQUAL "xml")
+    # produce XML output
+    add_test( ${test} ${test} -xml -o ${test}.tml )
+  else (QJSON_TEST_OUTPUT STREQUAL "xml")
+    add_test( ${test} ${test} )
+  endif (QJSON_TEST_OUTPUT STREQUAL "xml")
+ENDFOREACH()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/Makefile	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,178 @@
+# ==============================================================================
+# Generated by qmake (2.01a) (Qt 4.6.1) on: Mon May 17 12:46:26 2010
+# This file is generated by qmake and should not be modified by the
+# user.
+#  Name        : Makefile
+#  Description : Wrapper Makefile for calling Symbian build tools
+#
+# ==============================================================================
+
+
+MAKEFILE          = Makefile
+QMAKE             = d:\Qt\4.6.1\bin\qmake
+DEL_FILE          = del
+DEL_DIR           = rmdir
+MOVE              = move
+XCOPY             = xcopy /d /f /h /r /y /i
+ABLD              = ABLD.BAT
+DEBUG_PLATFORMS   = winscw gcce armv5 armv6
+RELEASE_PLATFORMS = gcce armv5 armv6
+MAKE              = make
+
+ifeq (WINS,$(findstring WINS, $(PLATFORM)))
+ZDIR=$(EPOCROOT)epoc32\release\$(PLATFORM)\$(CFG)\Z
+else
+ZDIR=$(EPOCROOT)epoc32\data\z
+endif
+
+DEFINES	 = -DSYMBIAN -DUNICODE -DQT_KEYPAD_NAVIGATION -DQT_SOFTKEYS_ENABLED -DQT_USE_MATH_H_FLOATS
+INCPATH	 =  -I"D:/Qt/4.6.1/mkspecs/common/symbian/stl-off" -I"D:/Qt/4.6.1/mkspecs/common/symbian/stl-off/tmp" -I"D:/Qt/4.6.1/mkspecs/common/symbian" -I"D:/Qt/4.6.1/mkspecs/common/symbian/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include" -I"D:/CarbideWorkspace/TestQJson/qjson/src" -I"D:/CarbideWorkspace/TestQJson/qjson/src/tmp" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis" -I"D:/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/include/stdapis/sys" -I"D:/Qt/4.6.1/include" -I"D:/Qt/4.6.1/include/tmp"
+first: default
+default: debug-winscw
+all: debug release
+
+qmake:
+	$(QMAKE) -spec symbian-abld -o "bld.inf" "D:/CarbideWorkspace/TestQJson/qjson/tests/tests.pro"
+
+bld.inf:
+	$(QMAKE)
+
+$(ABLD): bld.inf
+	bldmake bldfiles
+
+debug: $(ABLD)
+	$(ABLD) build winscw udeb
+	$(ABLD) build gcce udeb
+	$(ABLD) build armv5 udeb
+	$(ABLD) build armv6 udeb
+
+release: $(ABLD)
+	$(ABLD) build gcce urel
+	$(ABLD) build armv5 urel
+	$(ABLD) build armv6 urel
+
+debug-winscw: $(ABLD)
+	$(ABLD) build winscw udeb
+debug-gcce: $(ABLD)
+	$(ABLD) build gcce udeb
+debug-armv5: $(ABLD)
+	$(ABLD) build armv5 udeb
+debug-armv6: $(ABLD)
+	$(ABLD) build armv6 udeb
+release-gcce: $(ABLD)
+	$(ABLD) build gcce urel
+release-armv5: $(ABLD)
+	$(ABLD) build armv5 urel
+release-armv6: $(ABLD)
+	$(ABLD) build armv6 urel
+
+export: $(ABLD)
+	$(ABLD) export
+
+cleanexport: $(ABLD)
+	$(ABLD) cleanexport
+
+compiler_clean: 
+
+create_temps:
+	-@ if NOT EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\stl-off\tmp" mkdir "D:\Qt\4.6.1\mkspecs\common\symbian\stl-off\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" mkdir "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if NOT EXIST "D:\CarbideWorkspace\TestQJson\qjson\src\tmp" mkdir "D:\CarbideWorkspace\TestQJson\qjson\src\tmp"
+	-@ if NOT EXIST "D:\Qt\4.6.1\include\tmp" mkdir "D:\Qt\4.6.1\include\tmp"
+
+extension_clean: compiler_clean
+	-@ if EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\stl-off\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\mkspecs\common\symbian\stl-off\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\mkspecs\common\symbian\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\mkspecs\common\symbian\tmp"
+	-@ if EXIST "D:\CarbideWorkspace\TestQJson\qjson\src\tmp" rmdir  /S /Q  "D:\CarbideWorkspace\TestQJson\qjson\src\tmp"
+	-@ if EXIST "D:\Qt\4.6.1\include\tmp" rmdir  /S /Q  "D:\Qt\4.6.1\include\tmp"
+
+pre_targetdeps: \
+	generated_sources \
+	all_source_deps
+
+generated_sources:
+
+all_source_deps:
+
+finalize:
+
+winscw_deployment:
+
+winscw_deployment_clean:
+
+sis: restore_build
+	$(if $(wildcard tests_template.pkg),$(if $(wildcard .make.cache),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(if $(QT_SIS_TARGET),$(MAKE) -s -f $(MAKEFILE) ok_sis,$(MAKE) -s -f $(MAKEFILE) fail_sis_nocache)),$(MAKE) -s -f $(MAKEFILE) fail_sis_nopkg)
+
+ok_sis:
+	createpackage.bat $(QT_SIS_OPTIONS) tests_template.pkg $(QT_SIS_TARGET) $(QT_SIS_CERTIFICATE) $(QT_SIS_KEY) $(QT_SIS_PASSPHRASE)
+
+fail_sis_nopkg:
+	$(error PKG file does not exist, 'SIS' target is only supported for executables or projects with DEPLOYMENT statement)
+
+fail_sis_nocache:
+	$(error Project has to be built or QT_SIS_TARGET environment variable has to be set before calling 'SIS' target)
+
+restore_build:
+-include .make.cache
+
+store_build:
+	@echo # ============================================================================== > .make.cache
+	@echo # This file is generated by make and should not be modified by the user >> .make.cache
+	@echo #  Name        : .make.cache >> .make.cache
+	@echo #  Part of     : tests >> .make.cache
+	@echo #  Description : This file is used to cache last build target for >> .make.cache
+	@echo #                make sis target. >> .make.cache
+	@echo #  Version     :  >> .make.cache
+	@echo # >> .make.cache
+	@echo # ============================================================================== >> .make.cache
+	@echo. >> .make.cache
+	@echo QT_SIS_TARGET ?= $(QT_SIS_TARGET) >> .make.cache
+
+dodistclean:
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\tests_template.pkg" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\tests_template.pkg"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\Makefile" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\Makefile"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\Makefile_0xEdfa80af.mk" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\Makefile_0xEdfa80af.mk"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\tests_0xEdfa80af.mmp" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\tests_0xEdfa80af.mmp"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\tests_reg.rss" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\tests_reg.rss"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\tests.rss" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\tests.rss"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\tests.loc" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\tests.loc"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\.make.cache" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\.make.cache"
+	-@ if EXIST "d:\CarbideWorkspace\TestQJson\qjson\tests\bld.inf" $(DEL_FILE)  "d:\CarbideWorkspace\TestQJson\qjson\tests\bld.inf"
+
+distclean: clean dodistclean
+
+clean: $(ABLD)
+	-$(ABLD) reallyclean
+	-bldmake clean
+
+clean-debug: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+	$(ABLD) reallyclean gcce udeb
+	$(ABLD) reallyclean armv5 udeb
+	$(ABLD) reallyclean armv6 udeb
+
+clean-release: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+	$(ABLD) reallyclean armv5 urel
+	$(ABLD) reallyclean armv6 urel
+
+clean-debug-winscw: $(ABLD)
+	$(ABLD) reallyclean winscw udeb
+clean-debug-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce udeb
+clean-debug-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 udeb
+clean-debug-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 udeb
+clean-release-gcce: $(ABLD)
+	$(ABLD) reallyclean gcce urel
+clean-release-armv5: $(ABLD)
+	$(ABLD) reallyclean armv5 urel
+clean-release-armv6: $(ABLD)
+	$(ABLD) reallyclean armv6 urel
+
+run:
+	-call /S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/release/winscw/udeb/tests.exe $(QT_RUN_OPTIONS)
+runonphone: sis
+	runonphone $(QT_RUN_ON_PHONE_OPTIONS) --sis tests_$(QT_SIS_TARGET).sis tests.exe $(QT_RUN_OPTIONS)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/bld.inf	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,24 @@
+// ============================================================================
+// * Makefile for building: tests
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-17T12:46:26
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// * Project:  tests.pro
+// * Template: app
+// ============================================================================
+
+#define BLD_INF_TESTS_02F3D6E9
+
+
+prj_platforms
+
+WINSCW GCCE ARMV5 ARMV6
+
+
+prj_mmpfiles
+
+gnumakefile Makefile_0xEdfa80af.mk
+tests_0xEdfa80af.mmp
+
+prj_extensions
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/cmdline_tester.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,62 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2009 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+ 
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+#include "parser.h"
+
+using namespace QJson;
+
+int main(int argc, char *argv[]) {
+  QCoreApplication app (argc, argv);
+  
+  if (app.arguments().size() != 2) {
+    qCritical("You have to specify the file containing the json code");
+    exit (1);
+  }
+  
+  QString filename = app.arguments()[1];
+  if (!QFile::exists ( filename )) {
+    qCritical ("The file you specified doesn't exist!");
+    exit (1);
+  }
+  
+  Parser driver;
+  bool ok;
+
+  QFile file (filename);
+  QVariant data = driver.parse (&file, &ok);
+  if (!ok) {
+    qCritical("%s:%i - Error: %s", filename.toLatin1().data(), driver.errorLine(), qPrintable(driver.errorString()));
+    exit (1);
+  }
+  else {
+    qDebug() << "json object successfully converted to:";
+    qDebug() << data;
+  }
+
+  qDebug() << "JOB DONE, BYE";
+  return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/example.txt	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,22 @@
+{
+    "glossary": {
+        "title": "example glossary",
+		"GlossDiv": {
+            "title": "S",
+			"GlossList": {
+                "GlossEntry": {
+                    "ID": "SGML",
+					"SortAs": "SGML",
+					"GlossTerm": "Standard Generalized Markup Language",
+					"Acronym": "SGML",
+					"Abbrev": "ISO 8879:1986",
+					"GlossDef": {
+                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
+						"GlossSeeAlso": ["GML", "XML"]
+                    },
+					"GlossSee": "markup"
+                }
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/person.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,50 @@
+#include "person.h"
+
+Person::Person(QObject* parent)
+  : QObject(parent)
+{
+}
+
+Person::~Person()
+{
+}
+
+QString Person::name() const
+{
+  return m_name;
+}
+
+void Person::setName(const QString& name)
+{
+  m_name = name;
+}
+
+int Person::phoneNumber() const
+{
+  return m_phoneNumber;
+}
+
+void Person::setPhoneNumber(const int phoneNumber)
+{
+  m_phoneNumber = phoneNumber;
+}
+
+void Person::setGender(Gender gender)
+{
+  m_gender = gender;
+}
+
+Person::Gender Person::gender() const
+{
+  return m_gender;
+}
+
+QDate Person::dob() const
+{
+  return m_dob;
+}
+
+void Person::setDob(const QDate& dob)
+{
+  m_dob = dob;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/person.h	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,61 @@
+/* This file is part of qjson
+  *
+  * Copyright (C) 2009 Till Adam <adam@kde.org>
+  *
+  * This library is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Library General Public
+  * License as published by the Free Software Foundation; either
+  * version 2 of the License, or (at your option) any later version.
+  *
+  * This library is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Library General Public License for more details.
+  *
+  * You should have received a copy of the GNU Library General Public License
+  * along with this library; see the file COPYING.LIB.  If not, write to
+  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  * Boston, MA 02110-1301, USA.
+  */
+
+#ifndef PERSON_H
+#define PERSON_H
+
+#include <QtCore/QDate>
+#include <QtCore/QObject>
+
+class Person : public QObject
+{
+  Q_OBJECT
+
+  Q_PROPERTY(QString name READ name WRITE setName)
+  Q_PROPERTY(int phoneNumber READ phoneNumber WRITE setPhoneNumber)
+  Q_PROPERTY(Gender gender READ gender WRITE setGender)
+  Q_PROPERTY(QDate dob READ dob WRITE setDob)
+  Q_ENUMS(Gender)
+
+ public:
+    Person(QObject* parent = 0);
+    ~Person();
+
+    QString name() const;
+    void setName(const QString& name);
+
+    int phoneNumber() const;
+    void setPhoneNumber(const int  phoneNumber);
+
+    enum Gender {Male, Female};
+    void setGender(Gender gender);
+    Gender gender() const;
+
+    QDate dob() const;
+    void setDob(const QDate& dob);
+
+  private:
+    QString m_name;
+    int m_phoneNumber;
+    Gender m_gender;
+    QDate m_dob;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/testparser.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,332 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <QtTest/QtTest>
+
+#include "parser.h"
+
+#include <QtCore/QVariant>
+
+class TestParser: public QObject
+{
+  Q_OBJECT
+  private slots:
+    void parseNonAsciiString();
+    void parseSimpleObject();
+    void parseEmptyObject();
+    void parseEmptyValue();
+    void parseUrl();
+    void parseMultipleObject();
+
+    void parseSimpleArray();
+    void parseInvalidObject();
+    void parseMultipleArray();
+
+    void testTrueFalseNullValues();
+    void testEscapeChars();
+    void testNumbers();
+    void testNumbers_data();
+};
+
+Q_DECLARE_METATYPE(QVariant)
+Q_DECLARE_METATYPE(QVariant::Type)
+
+using namespace QJson;
+
+void TestParser::parseSimpleObject() {
+  QByteArray json = "{\"foo\":\"bar\"}";
+  QVariantMap map;
+  map.insert (QLatin1String("foo"), QLatin1String("bar"));
+  QVariant expected(map);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+}
+
+void TestParser::parseEmptyObject() {
+  QByteArray json = "{}";
+  QVariantMap map;
+  QVariant expected (map);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+}
+
+void TestParser::parseEmptyValue() {
+  QByteArray json = "{\"value\": \"\"}";
+
+  QVariantMap map;
+  map.insert (QLatin1String("value"), QString(QLatin1String("")));
+  QVariant expected (map);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+  QVERIFY (result.toMap().value(QLatin1String("value")).type() == QVariant::String);
+
+  QString value = result.toMap().value(QLatin1String("value")).toString();
+  QVERIFY (value.isEmpty());
+}
+
+void TestParser::parseInvalidObject() {
+  QByteArray json = "{\"foo\":\"bar\"";
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (!ok);
+}
+
+void TestParser::parseNonAsciiString() {
+  QByteArray json = "{\"artist\":\"Queensr\\u00ffche\"}";
+  QVariantMap map;
+
+  QChar unicode_char (0x00ff);
+  QString unicode_string;
+  unicode_string.setUnicode(&unicode_char, 1);
+  unicode_string = QLatin1String("Queensr") + unicode_string + QLatin1String("che");
+  
+  map.insert (QLatin1String("artist"), unicode_string);
+  QVariant expected (map);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+}
+
+void TestParser::parseMultipleObject() {
+  //put also some extra spaces inside the json string
+  QByteArray json = "{ \"foo\":\"bar\",\n\"number\" : 51.3 , \"array\":[\"item1\", 123]}";
+  QVariantMap map;
+  map.insert (QLatin1String("foo"), QLatin1String("bar"));
+  map.insert (QLatin1String("number"), 51.3);
+  QVariantList list;
+  list.append (QLatin1String("item1"));
+  list.append (QLatin1String("123"));
+  map.insert (QLatin1String("array"), list);
+  QVariant expected (map);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+  QVERIFY (result.toMap().value(QLatin1String("number")).canConvert<float>());
+  QVERIFY (result.toMap().value(QLatin1String("array")).canConvert<QVariantList>());
+}
+
+void TestParser::parseUrl(){
+  //"http:\/\/www.last.fm\/venue\/8926427"
+  QByteArray json = "[\"http:\\/\\/www.last.fm\\/venue\\/8926427\"]";
+  QVariantList list;
+  list.append (QVariant(QLatin1String("http://www.last.fm/venue/8926427")));
+  QVariant expected (list);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+}
+
+ void TestParser::parseSimpleArray() {
+  QByteArray json = "[\"foo\",\"bar\"]";
+  QVariantList list;
+  list.append (QLatin1String("foo"));
+  list.append (QLatin1String("bar"));
+  QVariant expected (list);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+}
+
+void TestParser::parseMultipleArray() {
+  //put also some extra spaces inside the json string
+  QByteArray json = "[ {\"foo\":\"bar\"},\n\"number\",51.3 , [\"item1\", 123]]";
+  QVariantMap map;
+  map.insert (QLatin1String("foo"), QLatin1String("bar"));
+
+  QVariantList array;
+  array.append (QLatin1String("item1"));
+  array.append (123);
+  
+  QVariantList list;
+  list.append (map);
+  list.append (QLatin1String("number"));
+  list.append (QLatin1String("51.3"));
+  list.append ((QVariant) array);
+
+  QVariant expected (list);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+}
+
+void TestParser::testTrueFalseNullValues() {
+  QByteArray json = "[true,false, null, {\"foo\" : true}]";
+  QVariantList list;
+  list.append (QVariant(true));
+  list.append (QVariant(false));
+  list.append (QVariant());
+  QVariantMap map;
+  map.insert (QLatin1String("foo"), true);
+  list.append (map);
+  QVariant expected (list);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result, expected);
+  QCOMPARE (result.toList().at(0).toBool(), true);
+  QCOMPARE (result.toList().at(1).toBool(), false);
+  QVERIFY (result.toList().at(2).isNull());
+}
+
+void TestParser::testEscapeChars() {
+  QByteArray json = "[\"\\b \\f \\n \\r \\t \", \" \\\\ \\/ \\\\\", \"http:\\/\\/foo.com\"]";
+
+  QVariantList list;
+  list.append (QLatin1String("\b \f \n \r \t "));
+  list.append (QLatin1String(" \\ / \\"));
+  list.append (QLatin1String("http://foo.com"));
+
+  QVariant expected (list);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse (json, &ok);
+  QVERIFY (ok);
+  QCOMPARE(result.toList().size(), expected.toList().size() );
+  QCOMPARE(result, expected);
+}
+
+void TestParser::testNumbers() {
+  QFETCH(QByteArray, input);
+  QFETCH(QVariant, expected);
+  QFETCH(QVariant::Type, type);
+
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse ("[" + input +"]", &ok);
+  QVERIFY (ok);
+
+  QVariant value = result.toList().at(0);
+  QCOMPARE(value, expected);
+  QCOMPARE( value.type(), type);
+}
+
+void TestParser::testNumbers_data() {
+  QTest::addColumn<QByteArray>( "input" );
+  QTest::addColumn<QVariant>( "expected" );
+  QTest::addColumn<QVariant::Type>( "type" );
+
+  QByteArray input;
+  QVariant output;
+
+  // simple ulonglong
+  input = QByteArray("1");
+  output = QVariant(QVariant::ULongLong);
+  output.setValue(1);
+
+  QTest::newRow("simple ulonglong") << input << output << QVariant::ULongLong;
+
+  // big number
+  input = QByteArray("128708157440");
+  output = QVariant(QVariant::ULongLong);
+  output.setValue(128708157440ull);
+
+  QTest::newRow("big number") << input << output << QVariant::ULongLong;
+
+  // simple double
+  input = QByteArray("2.4");
+  output = QVariant(QVariant::Double);
+  output.setValue(2.4);
+
+  QTest::newRow("simple double") << input << output << QVariant::Double;
+
+  // negative int
+  input = QByteArray("-100");
+  output = QVariant(QVariant::LongLong);
+  output.setValue(-100);
+
+  QTest::newRow("negative int") << input << output << QVariant::LongLong;
+
+  // negative double
+  input = QByteArray("-3.4");
+  output = QVariant(QVariant::Double);
+  output.setValue(-3.4);
+
+  QTest::newRow("negative double") << input << output << QVariant::Double;
+
+  // exp1
+  input = QByteArray("-5e+");
+  output = QVariant(QVariant::ByteArray);
+  output.setValue(input);
+
+  QTest::newRow("exp1") << input << output << QVariant::ByteArray;
+
+  // exp2
+  input = QByteArray("2e");
+  output = QVariant(QVariant::ByteArray);
+  output.setValue(input);
+
+  QTest::newRow("exp2") << input << output << QVariant::ByteArray;
+
+  // exp3
+  input = QByteArray("3e+");
+  output = QVariant(QVariant::ByteArray);
+  output.setValue(input);
+
+  QTest::newRow("exp3") << input << output << QVariant::ByteArray;
+
+  // exp4
+  input = QByteArray("4.3E");
+  output = QVariant(QVariant::ByteArray);
+  output.setValue(input);
+
+  QTest::newRow("exp4") << input << output << QVariant::ByteArray;
+
+  // exp5
+  input = QByteArray("5.4E-");
+  output = QVariant(QVariant::ByteArray);
+  output.setValue(input);
+
+  QTest::newRow("exp5") << input << output << QVariant::ByteArray;
+}
+
+QTEST_MAIN(TestParser)
+#include "moc_testparser.cxx"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/testqobjecthelper.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,91 @@
+
+/* This file is part of QJson
+ *
+ * Copyright (C) 2009 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <limits>
+
+#include <QtTest/QtTest>
+
+#include "person.h"
+#include "qobjecthelper.h"
+
+#include <QtCore/QVariant>
+
+class TestQObjectHelper: public QObject
+{
+  Q_OBJECT
+  private slots:
+    void testQObject2QVariant();
+    void testQVariant2QObject();
+};
+
+Q_DECLARE_METATYPE(QVariant)
+
+using namespace QJson;
+
+void TestQObjectHelper::testQObject2QVariant()
+{
+  QString name = QLatin1String("Flavio Castelli");
+  int phoneNumber = 123456;
+  Person::Gender gender = Person::Male;
+  QDate dob (1982, 7, 12);
+
+  Person person;
+  person.setName(name);
+  person.setPhoneNumber(phoneNumber);
+  person.setGender(gender);
+  person.setDob(dob);
+
+  QVariantMap expected;
+  expected[QLatin1String("name")] = QVariant(name);
+  expected[QLatin1String("phoneNumber")] = QVariant(phoneNumber);
+  expected[QLatin1String("gender")] = QVariant(gender);
+  expected[QLatin1String("dob")] = QVariant(dob);
+
+  QVariantMap result = QObjectHelper::qobject2qvariant(&person);
+
+  QCOMPARE(result, expected);
+}
+
+void TestQObjectHelper::testQVariant2QObject()
+{
+  QString name = QLatin1String("Flavio Castelli");
+  int phoneNumber = 123456;
+  Person::Gender gender = Person::Male;
+  QDate dob (1982, 7, 12);
+
+  Person person;
+
+  QVariantMap variant;
+  variant[QLatin1String("name")] = QVariant(name);
+  variant[QLatin1String("phoneNumber")] = QVariant(phoneNumber);
+  variant[QLatin1String("gender")] = QVariant(gender);
+  variant[QLatin1String("dob")] = QVariant(dob);
+
+  QObjectHelper::qvariant2qobject(variant, &person);
+
+  QCOMPARE(person.name(), name);
+  QCOMPARE(person.phoneNumber(),phoneNumber);
+  QCOMPARE(person.gender(), gender);
+  QCOMPARE(person.dob(), dob);
+}
+
+QTEST_MAIN(TestQObjectHelper)
+#include "moc_testqobjecthelper.cxx"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/tests.loc	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,13 @@
+// ============================================================================
+// * Generated by qmake (2.01a) (Qt 4.6.1) on: 2010-05-17T12:46:26
+// * This file is generated by qmake and should not be modified by the
+// * user.
+// ============================================================================
+
+#ifdef LANGUAGE_SC
+#define STRING_r_short_caption "tests"
+#define STRING_r_caption "tests"
+#else
+#define STRING_r_short_caption "tests"
+#define STRING_r_caption "tests"
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/tests_template.pkg	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,30 @@
+; tests_template.pkg generated by qmake at 2010-05-17T12:46:26
+; This file is generated by qmake and should not be modified by the user
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"tests"},(0xEdfa80af),1,0,0
+
+; Localised Vendor name
+%{"Vendor"}
+
+; Unique Vendor name
+:"Vendor"
+
+; Manual PKG pre-rules from PRO files
+; Default HW/platform dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+ 
+
+; Executable and default resource files
+"/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/release/$(PLATFORM)/$(TARGET)/tests.exe"    - "!:\sys\bin\tests.exe"
+"/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/data/z/resource/apps/tests.rsc"    - "!:\resource\apps\tests.rsc"
+"/S60/devices/S60_5th_Edition_SDK_v0.9/epoc32/data/z/private/10003a3f/import/apps/tests_reg.rsc"    - "!:\private\10003a3f\import\apps\tests_reg.rsc"
+
+; Manual PKG post-rules from PRO files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/smf/smfservermodule/util/qjson/tests/testserializer.cpp	Tue May 18 17:37:12 2010 +0530
@@ -0,0 +1,241 @@
+/* This file is part of QJson
+ *
+ * Copyright (C) 2009 Flavio Castelli <flavio.castelli@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <limits>
+
+#include <QtTest/QtTest>
+
+#include "parser.h"
+#include "serializer.h"
+
+#include <QtCore/QVariant>
+
+
+class TestSerializer: public QObject
+{
+  Q_OBJECT
+  private slots:
+    void testReadWriteEmptyDocument();
+    void testReadWrite();
+    void testReadWrite_data();
+    void testValueNull();
+    void testValueString();
+    void testValueString_data();
+    void testValueInteger();
+    void testValueInteger_data();
+    void testValueDouble();
+    void testValueDouble_data();
+    void testValueBoolean();
+    void testValueBoolean_data();
+
+  private:
+    void valueTest( const QVariant& value, const QString& expectedRegExp );
+    void valueTest( const QObject* object, const QString& expectedRegExp );
+};
+
+Q_DECLARE_METATYPE(QVariant)
+
+using namespace QJson;
+
+void TestSerializer::testReadWriteEmptyDocument()
+{
+  QByteArray json = "";
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse( json, &ok );
+  QVERIFY(ok);
+  QVERIFY( ! result.isValid() );
+  Serializer serializer;
+  const QByteArray serialized = serializer.serialize( result );
+  QVERIFY( !serialized.isNull() );
+  QByteArray expected = "null";
+  QCOMPARE(expected, serialized);
+}
+
+void TestSerializer::testReadWrite()
+{
+  QFETCH( QByteArray, json );
+  Parser parser;
+  bool ok;
+  QVariant result = parser.parse( json, &ok );
+  QVERIFY(ok);
+  Serializer serializer;
+  const QByteArray serialized = serializer.serialize( result );
+  QVariant writtenThenRead = parser.parse( serialized, &ok );
+  QVERIFY(ok);
+  QCOMPARE( result, writtenThenRead );
+}
+
+void TestSerializer::testReadWrite_data()
+{
+    QTest::addColumn<QByteArray>( "json" );
+
+    // array tests
+    QTest::newRow( "empty array" ) << QByteArray("[]");
+    QTest::newRow( "basic array" ) << QByteArray("[\"person\",\"bar\"]");
+    QTest::newRow( "single int array" ) << QByteArray("[6]");
+    QTest::newRow( "int array" ) << QByteArray("[6,5,6,7]");
+    const QByteArray json = "[1,2.4, -100, -3.4, -5e+, 2e,3e+,4.3E,5.4E-]";
+    QTest::newRow( QByteArray("array of various numbers") ) << json;
+
+    // document tests
+    QTest::newRow( "empty object" ) << QByteArray("{}");
+    QTest::newRow( "basic document" ) << QByteArray("{\"person\":\"bar\"}");
+    QTest::newRow( "object with ints" ) << QByteArray("{\"person\":6}");
+    const QByteArray json2 = "{ \"person\":\"bar\",\n\"number\" : 51.3 , \"array\":[\"item1\", 123]}";
+    QTest::newRow( "complicated document" ) << json2;
+
+    // more complex cases
+    const QByteArray json3 = "[ {\"person\":\"bar\"},\n\"number\",51.3 , [\"item1\", 123]]";
+    QTest::newRow( "complicated array" ) << json3;
+}
+
+
+void TestSerializer::valueTest( const QVariant& value, const QString& expectedRegExp )
+{
+  Serializer serializer;
+  const QByteArray serialized = serializer.serialize( value );
+  const QString serializedUnicode = QString::fromUtf8( serialized );
+  QRegExp expected( expectedRegExp );
+  QVERIFY( expected.isValid() );
+  QVERIFY2( expected.exactMatch( serializedUnicode ),
+    qPrintable( QString( QLatin1String( "Expected regexp \"%1\" but got \"%2\"." ) )
+      .arg( expectedRegExp ).arg( serializedUnicode ) ) );
+}
+
+void TestSerializer::valueTest( const QObject* object, const QString& expectedRegExp )
+{
+  Serializer serializer;
+  const QByteArray serialized = serializer.serialize( object );
+  const QString serializedUnicode = QString::fromUtf8( serialized );
+  QRegExp expected( expectedRegExp );
+  QVERIFY( expected.isValid() );
+  QVERIFY2( expected.exactMatch( serializedUnicode ),
+    qPrintable( QString( QLatin1String( "Expected regexp \"%1\" but got \"%2\"." ) )
+      .arg( expectedRegExp ).arg( serializedUnicode ) ) );
+}
+
+void TestSerializer::testValueNull()
+{
+  valueTest( QVariant(), QLatin1String( "\\s*null\\s*" ) );
+  QVariantMap map;
+  map[QLatin1String("value")] = QVariant();
+  valueTest( QVariant(map), QLatin1String( "\\s*\\{\\s*\"value\"\\s*:\\s*null\\s*\\}\\s*" ) );
+}
+
+void TestSerializer::testValueString()
+{
+  QFETCH( QVariant, value );
+  QFETCH( QString, expected );
+  valueTest( value, expected );
+
+  QVariantMap map;
+  map[QLatin1String("value")] = value;
+  valueTest( QVariant(map), QLatin1String( "\\s*\\{\\s*\"value\"\\s*:" ) + expected + QLatin1String( "\\}\\s*" ) );
+}
+
+void TestSerializer::testValueString_data()
+{
+  QTest::addColumn<QVariant>( "value" );
+  QTest::addColumn<QString>( "expected" );
+  
+  QTest::newRow( "null string" ) << QVariant( QString() ) << QString( QLatin1String( "\\s*\"\"\\s*" ) );
+  QTest::newRow( "empty string" ) << QVariant( QString( QLatin1String( "" ) ) ) << QString( QLatin1String( "\\s*\"\"\\s*" ) );
+  QTest::newRow( "Simple String" ) << QVariant( QString( QLatin1String( "simpleString" ) ) ) << QString( QLatin1String( "\\s*\"simpleString\"\\s*" ) );
+  QTest::newRow( "string with tab" ) << QVariant( QString( QLatin1String( "string\tstring" ) ) ) << QString( QLatin1String( "\\s*\"string\\\\tstring\"\\s*" ) );
+  QTest::newRow( "string with newline" ) << QVariant( QString( QLatin1String( "string\nstring" ) ) ) << QString( QLatin1String( "\\s*\"string\\\\nstring\"\\s*" ) );
+  QTest::newRow( "string with bell" ) << QVariant( QString( QLatin1String( "string\bstring" ) ) ) << QString( QLatin1String( "\\s*\"string\\\\bstring\"\\s*" ) );
+  QTest::newRow( "string with return" ) << QVariant( QString( QLatin1String( "string\rstring" ) ) ) << QString( QLatin1String( "\\s*\"string\\\\rstring\"\\s*" ) );
+  QTest::newRow( "string with double quote" ) << QVariant( QString( QLatin1String( "string\"string" ) ) ) << QString( QLatin1String( "\\s*\"string\\\\\"string\"\\s*" ) );
+  QTest::newRow( "string with backslash" ) << QVariant( QString( QLatin1String( "string\\string" ) ) ) << QString( QLatin1String( "\\s*\"string\\\\\\\\string\"\\s*" ) );
+  QString testStringWithUnicode = QString( QLatin1String( "string" ) ) + QChar( 0x2665 ) + QLatin1String( "string" );
+  QTest::newRow( "string with unicode" ) << QVariant( testStringWithUnicode ) << QLatin1String( "\\s*\"" ) + testStringWithUnicode + QLatin1String( "\"\\s*" );
+}
+
+void TestSerializer::testValueInteger()
+{
+  QFETCH( QVariant, value );
+  QFETCH( QString, expected );
+  valueTest( value, expected );
+
+  QVariantMap map;
+  map[QLatin1String("value")] = value;
+  valueTest( QVariant(map), QLatin1String( "\\s*\\{\\s*\"value\"\\s*:" ) + expected + QLatin1String( "\\}\\s*" ) );
+}
+
+void TestSerializer::testValueInteger_data()
+{
+  QTest::addColumn<QVariant>( "value" );
+  QTest::addColumn<QString>( "expected" );
+  
+  QTest::newRow( "int 0" ) << QVariant( static_cast<int>( 0 ) ) << QString( QLatin1String( "\\s*0\\s*" ) );
+  QTest::newRow( "uint 0" ) << QVariant( static_cast<uint>( 0 ) ) << QString( QLatin1String( "\\s*0\\s*" ) );
+  QTest::newRow( "int -1" ) << QVariant( static_cast<int>( -1 ) ) << QString( QLatin1String( "\\s*-1\\s*" ) );
+  QTest::newRow( "int 2133149800" ) << QVariant( static_cast<int>(2133149800) ) << QString( QLatin1String( "\\s*2133149800\\s*" ) );
+  QTest::newRow( "uint 4133149800" ) << QVariant( static_cast<uint>(4133149800u) ) << QString( QLatin1String( "\\s*4133149800\\s*" ) );
+  QTest::newRow( "uint64 932838457459459" ) << QVariant( Q_UINT64_C(932838457459459) ) << QString( QLatin1String( "\\s*932838457459459\\s*" ) );
+  QTest::newRow( "max unsigned long long" ) << QVariant( std::numeric_limits<unsigned long long>::max() ) << QString( QLatin1String( "\\s*%1\\s*" ) ).arg(std::numeric_limits<unsigned long long>::max());
+}
+
+void TestSerializer::testValueDouble()
+{
+  QFETCH( QVariant, value );
+  QFETCH( QString, expected );
+  valueTest( value, expected );
+
+  QVariantMap map;
+  map[QLatin1String("value")] = value;
+  valueTest( QVariant(map), QLatin1String( "\\s*\\{\\s*\"value\"\\s*:" ) + expected + QLatin1String( "\\}\\s*" ) );
+}
+
+void TestSerializer::testValueDouble_data()
+{
+  QTest::addColumn<QVariant>( "value" );
+  QTest::addColumn<QString>( "expected" );
+  
+  QTest::newRow( "double 0" ) << QVariant( 0.0 ) << QString( QLatin1String( "\\s*0.0\\s*" ) );
+  QTest::newRow( "double -1" ) << QVariant( -1.0 ) << QString( QLatin1String( "\\s*-1.0\\s*" ) );
+  QTest::newRow( "double 1.5E-20" ) << QVariant( 1.5e-20 ) << QString( QLatin1String( "\\s*1.5[Ee]-20\\s*" ) );
+  QTest::newRow( "double -1.5E-20" ) << QVariant( -1.5e-20 ) << QString( QLatin1String( "\\s*-1.5[Ee]-20\\s*" ) );
+  QTest::newRow( "double 2.0E-20" ) << QVariant( 2.0e-20 ) << QString( QLatin1String( "\\s*2(?:.0)?[Ee]-20\\s*" ) );
+}
+
+void TestSerializer::testValueBoolean()
+{
+  QFETCH( QVariant, value );
+  QFETCH( QString, expected );
+  valueTest( value, expected );
+
+  QVariantMap map;
+  map[QLatin1String("value")] = value;
+  valueTest( QVariant(map), QLatin1String( "\\s*\\{\\s*\"value\"\\s*:" ) + expected + QLatin1String( "\\}\\s*" ) );
+}
+
+void TestSerializer::testValueBoolean_data()
+{
+  QTest::addColumn<QVariant>( "value" );
+  QTest::addColumn<QString>( "expected" );
+
+  QTest::newRow( "bool false" ) << QVariant( false ) << QString( QLatin1String( "\\s*false\\s*" ) );
+  QTest::newRow( "bool true" ) << QVariant( true ) << QString( QLatin1String( "\\s*true\\s*" ) );
+}
+
+QTEST_MAIN(TestSerializer)
+#include "moc_testserializer.cxx"