201011
authorhgs
Sat, 24 Apr 2010 00:27:31 +0300
changeset 30 64b3172ba347
parent 29 ce4f184690c9
child 31 3b92f7acdc91
201011
localconnectivityservice/group/bld.inf
localconnectivityservice/obexserviceman/utils/src/obexutilslaunchwaiter.cpp
shortlinkconn_plat/obex_service_utils_api/tsrc/Bmarm/ObexServAPItestu.def
shortlinkconn_plat/obex_service_utils_api/tsrc/Bwins/ObexServAPItestu.def
shortlinkconn_plat/obex_service_utils_api/tsrc/conf/obexservapitest.cfg
shortlinkconn_plat/obex_service_utils_api/tsrc/eabi/ObexServAPItestu.def
shortlinkconn_plat/obex_service_utils_api/tsrc/group/bld.inf
shortlinkconn_plat/obex_service_utils_api/tsrc/group/obexservapitest.mmp
shortlinkconn_plat/obex_service_utils_api/tsrc/group/obexservapitest.pkg
shortlinkconn_plat/obex_service_utils_api/tsrc/inc/ObexServAPItest.h
shortlinkconn_plat/obex_service_utils_api/tsrc/inc/testlogger.h
shortlinkconn_plat/obex_service_utils_api/tsrc/init/obexservapitest.ini
shortlinkconn_plat/obex_service_utils_api/tsrc/rom/obexservapitest.iby
shortlinkconn_plat/obex_service_utils_api/tsrc/src/ObexServAPItest.cpp
shortlinkconn_plat/obex_service_utils_api/tsrc/src/ObexServAPItestBlocks.cpp
shortlinkconn_plat/obex_service_utils_api/tsrc/src/testlogger.cpp
--- a/localconnectivityservice/group/bld.inf	Sat Apr 24 00:11:33 2010 +0300
+++ b/localconnectivityservice/group/bld.inf	Sat Apr 24 00:27:31 2010 +0300
@@ -24,10 +24,7 @@
 #include "../obexsendservices/group/bld.inf"
 #include "../obexreceiveservices/group/bld.inf"
 #include "../dun/group/bld.inf"
-#include "../lccustomplugin/group/bld.inf"
 #include "../lcstylustap/group/bld.inf"
-#include "../legacymodemplugin/group/bld.inf"
-#include "../modematplugin/group/bld.inf"
 #include "../generichid/group/bld.inf"
 #include "../headset/group/bld.inf"
 
--- a/localconnectivityservice/obexserviceman/utils/src/obexutilslaunchwaiter.cpp	Sat Apr 24 00:11:33 2010 +0300
+++ b/localconnectivityservice/obexserviceman/utils/src/obexutilslaunchwaiter.cpp	Sat Apr 24 00:27:31 2010 +0300
@@ -86,91 +86,102 @@
     
     CMsvAttachment* attachInfo = store->AttachmentManagerL().GetAttachmentInfoL(0);
     CleanupStack::PushL(attachInfo); // 3rd push
-    
+          
     TDataType dataType = attachInfo->MimeType();
-  
-    TInt error = KErrNone;
-    TBool isCompleteSelf = EFalse;  
+    TFileName filePath;
+    filePath = attachInfo->FilePath();
     
-    RFile attachFile;        
-    TRAP( error, attachFile = store->AttachmentManagerL().GetAttachmentFileL(0));
-    TFileName fullName;
-    attachFile.FullName(fullName);
-    attachFile.Close();
+    TInt error = KErrNone;
+    TBool isCompleteSelf = EFalse;      
+    CEikonEnv* eikEnv = CEikonEnv::Static();
+
+    if ( attachInfo->Type() == CMsvAttachment::EMsvFile )
+        {
+        RFile attachFile;        
+        TRAP( error, attachFile = store->AttachmentManagerL().GetAttachmentFileL(0));
+        if ( error == KErrNone )
+            {
+            CleanupClosePushL(attachFile);  // 4th push          
+            CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();  // 5th push
+            TAiwGenericParam paramSave(EGenericParamAllowSave, ETrue);
+            paramList->AppendL( paramSave );          
+            
+            if ( eikEnv )
+                {               
+                iDocumentHandler = CDocumentHandler::NewL( eikEnv->Process() );
+                iDocumentHandler->SetExitObserver( this );
+                TRAP( error, iDocumentHandler->OpenFileEmbeddedL(attachFile, dataType, *paramList));               
+                }// eikEnv        
+            CleanupStack::PopAndDestroy(2); // paramList, attachFile
+            }
+        }// EMsvFile
     
-    if ( KErrNone == error )
+    if ( attachInfo->Type() == CMsvAttachment::EMsvLinkedFile )
         {
-        CleanupClosePushL(attachFile);  // 4th push
-        CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();  // 5th push
+        CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC();  // 4th push
         TAiwGenericParam paramSave(EGenericParamFileSaved, ETrue);
         paramList->AppendL( paramSave );
-
-        if ( CEikonEnv::Static() )
+        
+        if ( eikEnv )
             {
-            // Launches an application in embedded mode
-            iDocumentHandler = CDocumentHandler::NewL( CEikonEnv::Static()->Process() );
+            
+            iDocumentHandler = CDocumentHandler::NewL( eikEnv->Process() );
             iDocumentHandler->SetExitObserver( this );
             RFile64 shareableFile;
-            TRAP( error, iDocumentHandler->OpenTempFileL(fullName,shareableFile));
+            TRAP( error, iDocumentHandler->OpenTempFileL(filePath,shareableFile));
             if ( error == KErrNone)
                 {
-                TRAP( error, iDocumentHandler->OpenFileEmbeddedL( shareableFile, dataType, *paramList ));
+                TRAP( error, iDocumentHandler->OpenFileEmbeddedL( shareableFile, dataType, *paramList));
                 }
             shareableFile.Close();
-            }
-        
-           
-        if ( error == KErrNotSupported )  
-            // If file is not supported, we open the file manager at file location.
-            {
-            // Launchs file manager at default folder
-            delete iDocumentHandler;
-            iDocumentHandler = NULL;
-               
-            TInt sortMethod = 2;  // 0 = 'By name', 1 = 'By type', 
-                                  // 2 = 'Most recent first' and 3 = 'Largest first'
-           TRAP (error, TObexUtilsUiLayer::LaunchFileManagerL( fullName, 
-                                                               sortMethod, 
-                                                               ETrue )); // ETrue -> launch file manager in embedded mode.
-            isCompleteSelf = ETrue;
-            }  // KErrNotSupported
-        
-        // Set message to READ
-        //
-        TMsvEntry entry = aMessage->Entry();
-        entry.SetUnread( EFalse );
-        aMessage->ChangeL( entry );
-        CleanupStack::PopAndDestroy(2); // paramList, attachFile
-        
-        }   // KErrNone
+            if ( error == KErrNotFound )
+                {
+                error = KErrNone;
+                TFileName fileName;
+                if (LocateFileL(fileName, filePath))
+                    {
+                    // Update the entry
+                    TRAP(error, TObexUtilsMessageHandler::UpdateEntryAttachmentL(fileName,aMessage));
+                    if ( error == KErrNone )
+                        {
+                        // Show a confirmation note
+                        CAknGlobalNote* note = CAknGlobalNote::NewLC();
+                        HBufC* stringholder  = StringLoader::LoadLC( R_BT_SAVED_LINK_UPDATED );
+                        note->ShowNoteL(EAknGlobalConfirmationNote, *stringholder);
+                        CleanupStack::PopAndDestroy(2); //note and stringholder
+                        }            
+                    }    
+                isCompleteSelf = ETrue;
+                } // KErrNotFound
+            } // eikEnv
+                   
+       		else if ( error == KErrNotSupported )  
+            	{                    
+            	delete iDocumentHandler;
+            	iDocumentHandler = NULL;
+                                   
+            	const TInt sortMethod = 2;  // 0 = 'By name', 1 = 'By type', 
+                                  			// 2 = 'Most recent first' and 3 = 'Largest first'
+            	TRAP (error, TObexUtilsUiLayer::LaunchFileManagerL( filePath, 
+                                                                sortMethod, 
+                                                                ETrue )); // ETrue -> launch file manager in embedded mode.
+            	isCompleteSelf = ETrue;
+            	}  // KErrNotSupported
+                
+        CleanupStack::PopAndDestroy(); // paramList                                     
+        } // EMsvLinkedFile
     
-    else // Error != KErrNone, broken link found. 
-         // Lets fix it by selecting the right file.
-        {
-        error = KErrNone;
-        TFileName fileName;
-        TFileName oldFileName = attachInfo->FilePath();
-        // select file
-        //
-        if (LocateFileL(fileName, oldFileName))
-            {
-            // Update the entry
-            TRAP(error, TObexUtilsMessageHandler::UpdateEntryAttachmentL(fileName,aMessage));
-            if ( error == KErrNone )
-                {
-                // Show a confirmation note
-                CAknGlobalNote* note = CAknGlobalNote::NewLC();
-                HBufC* stringholder  = StringLoader::LoadLC( R_BT_SAVED_LINK_UPDATED );
-                note->ShowNoteL(EAknGlobalConfirmationNote, *stringholder);
-                CleanupStack::PopAndDestroy(2); //note and stringholder
-                }            
-            }           
-        isCompleteSelf = ETrue;
-        }  // !KErrNone
-
+    
+    // Set message to READ     
+    TMsvEntry entry = aMessage->Entry();
+    entry.SetUnread( EFalse );
+    aMessage->ChangeL( entry );
+    
     User::LeaveIfError ( error );
     CleanupStack::PopAndDestroy(3); //  attachInfo, store, attachEntry
     
+    
+    
     iObserverRequestStatus = KRequestPending;  // CMsvOperation (observer)
     iStatus = KRequestPending;  // CMsvOperation
     SetActive();
@@ -180,6 +191,7 @@
         HandleServerAppExit( error );
         }
     }
+
 // -----------------------------------------------------------------------------
 // Destructor
 // -----------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/Bmarm/ObexServAPItestu.def	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/Bwins/ObexServAPItestu.def	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/conf/obexservapitest.cfg	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,119 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+[Test]
+title Get file system status
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetFileSystemStatus
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get MMC file system status
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetMmcFileSystemStatus
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get message center drive
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetMessageCentreDriveL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create default mtm service
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateDefaultMtmServiceL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get cenrep key int value
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyIntValueL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get PubSub key int value
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetPubSubKeyIntValue
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and remove outpox entry
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateOutBoxEntry
+Message_Handler_Tester RemoveOutBoxEntry
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Crate and remove outpox entry
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester SaveObjToInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Save object to inbox
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester SaveObjToInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and save attacment
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateEntryToInbox
+Message_Handler_Tester SaveRFileObjectToInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and Remove attacment
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester CreateEntryToInbox
+Message_Handler_Tester RemoveObjectFromInbox
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Get CenRep key string value
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Create and delete receive buffer and RFile
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+Message_Handler_Tester CreateReceiveBufferAndRFileL
+Message_Handler_Tester RemoveTemporaryRFileL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Save receive buffer and RFile to inbox
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+Message_Handler_Tester CreateReceiveBufferAndRFileL
+Message_Handler_Tester SaveFileToFileSystemL
+Message_Handler_Tester AddEntryToInboxL
+delete Message_Handler_Tester
+[Endtest] 
+[Test]
+title Update the previous Inbox entry
+create obexservapitest Message_Handler_Tester
+Message_Handler_Tester GetCenRepKeyStringValueL
+Message_Handler_Tester CreateReceiveBufferAndRFileL
+Message_Handler_Tester SaveFileToFileSystemL
+Message_Handler_Tester AddEntryToInboxL
+Message_Handler_Tester UpdateEntryAttachmentL
+delete Message_Handler_Tester
+[Endtest] 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/eabi/ObexServAPItestu.def	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,3 @@
+EXPORTS
+	_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/group/bld.inf	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+PRJ_PLATFORMS
+// specify the platforms your component needs to be built for here
+// defaults to WINS MARM so you can ignore this if you just build these
+DEFAULT
+
+PRJ_TESTEXPORTS
+// NOTE: If using ARS requirements all export operations should be done under this.
+// 'abld test export'
+
+PRJ_EXPORTS
+// Specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in /epoc32/include
+// Example: 
+/*
+/agnmodel/inc/AGMCOMON.H
+*/
+
+PRJ_TESTMMPFILES
+// NOTE: If using ARS requirements .mmp file operation should be done under this.
+// 'abld test build'
+obexservapitest.mmp
+
+PRJ_MMPFILES
+
+//  End of File
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/group/obexservapitest.mmp	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,63 @@
+/*TYPE TESTCLASS*//*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+#if defined(__S60_)
+        // To get the OSEXT_LAYER_SYSTEMINCLUDE-definition
+        #include <platform_paths.hrh>
+#endif
+
+TARGET          obexservapitest.dll
+TARGETTYPE      dll
+UID             0x1000008D 0x101FB3E3
+
+CAPABILITY      ALL -TCB
+/* Remove comments and replace 0x00000000 with correct vendor id */
+// VENDORID     0x00000000
+/* Remove comments and replace 0x00000000 with correct secure id */
+// SECUREID     0x00000000
+
+//TARGETPATH      ?target_path
+DEFFILE         ObexServAPItest.def
+
+SOURCEPATH      ../src
+SOURCE          ObexServAPItest.cpp
+SOURCE          ObexServAPItestBlocks.cpp
+SOURCE          testlogger.cpp
+
+
+USERINCLUDE     ../inc 
+
+#if defined(__S60_)
+  //  OSEXT_LAYER_SYSTEMINCLUDE
+    MW_LAYER_SYSTEMINCLUDE
+#else
+    //SYSTEMINCLUDE   /epoc32/include 
+    //SYSTEMINCLUDE   /epoc32/include/internal
+#endif
+
+LIBRARY         euser.lib
+LIBRARY         stiftestinterface.lib
+LIBRARY         sysutil.lib
+LIBRARY         obexutils.lib
+LIBRARY         irobex.lib
+LIBRARY         efsrv.lib 
+LIBRARY 	msgs.lib
+
+LANG            SC
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/group/obexservapitest.pkg	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,65 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;
+; Installation file for STIF
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"obexservapitest"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 5.1
+[0x10283160], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Install files
+"\epoc32\release\armv5\udeb\obexservapitest.dll"-"c:\Sys\Bin\obexservapitest.dll"
+
+"..\conf\obexservapitest.cfg"-"e:\testing\conf\obexservapitest.cfg"
+"..\init\obexservapitest.ini"-"e:\testing\init\obexservapitest.ini"
+  
+; Embedded SIS 
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/inc/ObexServAPItest.h	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+#ifndef OBEXSERVAPITEST_H
+#define OBEXSERVAPITEST_H
+
+//  INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <ObexUtilsMessageHandler.h>
+#include "testlogger.h"
+
+
+// FORWARD DECLARATIONS
+class CObexServAPItest;
+
+
+// CLASS DECLARATION
+
+/**
+*  CObexServAPItest test class for STIF Test Framework TestScripter.
+*/
+NONSHARABLE_CLASS(CObexServAPItest) : public CScriptBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CObexServAPItest* NewL( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CObexServAPItest();
+
+    public: // New functions
+
+       
+
+    public: // Functions from base classes
+
+        /**
+        * From CScriptBase Runs a script line.
+        * @since ?Series60_version
+        * @param aItem Script line containing method name and parameters
+        * @return Symbian OS error code
+        */
+        virtual TInt RunMethodL( CStifItemParser& aItem );
+
+    
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CObexServAPItest( CTestModuleIf& aTestModuleIf );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // ?classname( const ?classname& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // ?classname& operator=( const ?classname& );
+
+        /**
+        * Frees all resources allocated from test methods.
+        * @since ?Series60_version
+        */
+        void Delete();
+        
+        void TestCompleted( TInt aErr, const TUint8* aFunc, const TDesC& aArg );
+
+        /**
+        * Test methods are listed below. 
+        */
+
+        /**
+        * Test code for getting file system status.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetFileSystemStatusL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for getting mmc file system status.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetMmcFileSystemStatusL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for getting message center drive. 
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetMessageCentreDriveL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for creating Default MTM services.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt CreateDefaultMtmServiceL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for Getting CenRep key.    .    
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetCenRepKeyIntValueL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for Getting PubSub key.    
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt GetPubSubKeyIntValueL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for Creating outbox entry.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt CreateOutBoxEntryL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for removing outbox entry.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt RemoveOutBoxEntryL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for save received file to inbox. 
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt SaveObjToInboxL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for creating entry to inbox.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt CreateEntryToInboxL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for creating entry to inbox.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt SaveRFileObjectToInboxL( CStifItemParser& aItem );
+        
+        /**
+        * Test code for removing entry to inbox.
+        * @since ?Series60_version
+        * @param aItem Script line containing parameters.
+        * @return Symbian OS error code.
+        */
+        virtual TInt RemoveObjectL( CStifItemParser& aItem );
+        
+        TInt CObexServAPItest::GetCenRepKeyStringValueL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::CreateReceiveBufferAndRFileL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::SaveFileToFileSystemL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::AddEntryToInboxL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::UpdateEntryAttachmentL( CStifItemParser& aItem ); 
+        TInt CObexServAPItest::RemoveTemporaryRFileL( CStifItemParser& aItem ); 
+
+    private:    // Data
+
+        /**
+        * A dummy class for opening CMsvSession.
+        */
+        class CDummySessionObserver : public CBase , public MMsvSessionObserver
+            {
+            public:
+                void HandleSessionEventL( TMsvSessionEvent/*aEvent*/,
+                    TAny* /*aArg1*/,
+                    TAny* /*aArg2*/,
+                    TAny* /*aArg3*/ ) {};
+            };
+        
+        
+        
+         TMsvId           iMessageServerIndex;
+         CObexBufObject*  iObexObject; 
+         RFs              iRFs;
+         RFile            iFile;
+         CBufFlat*        iBuf; 
+         CObexTestLogger* iTestLogger;
+         TFileName        iCenRepFolder;
+         TFileName        iTempFullPathFilename; 
+    };
+
+#endif      // OBEXSERVAPITEST_H
+
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/inc/testlogger.h	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#ifndef BTTESTLOGGER_H
+#define BTTESTLOGGER_H
+
+// INCLUDES
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CStifLogger;
+class CTestModuleIf;
+
+#define TLFUNCLOG (TUint8*) __FUNCTION__
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS( CObexTestLogger ) : public CBase
+{
+	public:
+	
+		static CObexTestLogger* NewL(const CTestModuleIf* aTestModuleIf);
+		virtual ~CObexTestLogger();
+
+	public: // Data used by functions
+
+		enum TLogLevel {ETLError, ETLResult, ETLInfo, ETLDebug};
+
+	public: // New functions
+	
+		TBool GetEnabled() const;
+		CStifLogger* GetLogger() const;
+		const CTestModuleIf* GetTestModuleIf() const;
+		TInt Log(TLogLevel aLevel, TRefByValue<const TDesC8> aLogText, ...) const;
+		TInt Log(const TDesC& aCategory, TRefByValue<const TDesC8> aLogText, ...) const;
+		TInt Log(TLogLevel aLevel, TRefByValue<const TDesC16> aLogText, ...) const;
+		TInt Log(const TDesC& aCategory, TRefByValue<const TDesC16> aLogText, ...) const;
+		TInt LogResult( const TDesC8& aFunc, const TDesC& aArg, TInt aRes ) const;
+		TInt LogNewLine() const;
+		void SetEnabled(TBool aEnabled);
+		void SetLogger(CStifLogger* aLog);
+		void SetTestModuleIf(const CTestModuleIf* aTestModuleIf);
+
+	public: // Functions from base classes
+
+	private:  // New functions
+
+		TInt WriteLog(TLogLevel aLevel, TDes16& aLog) const;
+		TInt WriteLog(const TDesC16& aCategory, const TDesC16& aLog) const;
+		static TPtrC GetPrefix(TLogLevel aLevel);
+		TInt CheckLogFile();
+		void LogHeadSectionL();
+		void LogTimeStampL(TDes& aBuf, TBool aTime = ETrue) const;
+
+	private:  // Constructors
+	
+		CObexTestLogger(const CTestModuleIf* aTestModuleIf);
+		void ConstructL();
+
+	public:     // Data
+		static const TInt KPrefixLength;
+
+	private:    // Data
+
+		TBool iEnabled;
+		CStifLogger* iLog;
+		const CTestModuleIf* iTestModuleIf;
+	};
+
+#endif // BTTESTLOGGER_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/init/obexservapitest.ini	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,233 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+#
+
+#
+# This is STIF initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+#	- Set Test Reporting mode. TestReportMode's possible values are:
+#		+ 'Summary': Summary of the tested test cases.
+#		+ 'Environment': Hardware and software info.
+#		+ 'TestCases': Test case report.
+#		+ 'FullReport': Set of all above ones.
+#		+ Example 'TestReportMode= Summary TestCases'
+#
+# 	- CreateTestReport setting controls report creation mode
+#		+ YES, Test report will created.
+#		+ NO, No Test report.
+#
+# 	- File path indicates the base path of the test report.
+# 	- File name indicates the name of the test report.
+#
+# 	- File format indicates the type of the test report.
+#		+ TXT, Test report file will be txt type, for example 'TestReport.txt'.
+#		+ HTML, Test report will be html type, for example 'TestReport.html'.
+#
+# 	- File output indicates output source of the test report.
+#		+ FILE, Test report logging to file.
+#		+ RDEBUG, Test report logging to using rdebug.
+#
+# 	- File Creation Mode indicates test report overwriting if file exist.
+#		+ OVERWRITE, Overwrites if the Test report file exist.
+#		+ APPEND, Continue logging after the old Test report information if
+#                 report exist.
+# 	- Sets a device reset module's dll name(Reboot).
+#		+ If Nokia specific reset module is not available or it is not correct one
+#		  StifHWResetStub module may use as a template for user specific reset
+#		  module.
+# 	- Sets STIF test measurement disable options. e.g. pluging1 and pluging2 disablation
+#		DisableMeasurement= stifmeasurementplugin01 stifmeasurementplugin02
+#
+
+[Engine_Defaults]
+
+TestReportMode= FullReport    # Possible values are: 'Empty', 'Summary', 'Environment',
+                              #                      'TestCases' or 'FullReport'
+
+CreateTestReport= YES         # Possible values: YES or NO
+
+TestReportFilePath= e:\testing\logs\
+TestReportFileName= obexServApiTest_TestReport
+
+TestReportFormat= TXT         # Possible values: TXT, HTML or XML
+TestReportOutput= FILE        # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+DeviceResetDllName= StifResetForNokia.dll # e.g. 'StifHWResetStub.dll' for user specific reseting
+
+DisableMeasurement= stifmeasurementdisablenone  # Possible values are:
+              # 'stifmeasurementdisablenone', 'stifmeasurementdisableall'
+              # 'stifmeasurementplugin01', 'stifmeasurementplugin02',
+              # 'stifmeasurementplugin03', 'stifmeasurementplugin04',
+              # 'stifmeasurementplugin05' or 'stifbappeaprofiler'
+
+Timeout= 0                    # Default timeout value for each test case. In milliseconds
+#UITestingSupport= YES        # Possible values: YES or NO
+#SeparateProcesses= YES       # Possible values: YES or NO (default: NO)
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= XXXXXXXXX
+# Modules might have initialisation file, specified as
+# IniFile= c:\testframework\YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= c:\testframework\NormalCases.txt
+# TestCaseFile= c:\testframework\SmokeCases.txt
+# TestCaseFile= c:\testframework\ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags 
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= e:\testing\conf\obexservapitest.cfg
+[End_Module]
+
+
+# Load testmoduleXXX, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleXXX used initialization file
+#IniFile= c:\testframework\init.txt
+
+#TestModuleXXX used configuration file(s)
+#TestCaseFile= c:\testframework\testcases1.cfg
+#TestCaseFile= c:\testframework\testcases2.cfg
+#TestCaseFile= c:\testframework\manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIF logging overwrite parameters for Logger.
+# 	Hardware and emulator environment logging path and styles can
+# 	be configured from here to overwrite the Logger's implemented values.
+#	
+#	Settings description:
+#	- Indicates option for creation log directory/directories. If log directory/directories
+#         is/are not created by user they will make by software.
+#		+ YES, Create log directory/directories if not allready exist.
+#		+ NO, Log directory/directories not created. Only created one is used.
+#
+#	- Overwrite emulator path setting.
+#		+ Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined 
+#		           Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+#		           will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+#	- Overwrite emulator's logging format.
+#		+ TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+#		+ HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+#	- Overwrited emulator logging output source.
+#		+ FILE, Logging to file(s).
+#		+ RDEBUG, Logging to using rdebug(s).
+#
+#	- Overwrite hardware path setting (Same description as above in emulator path).
+#	- Overwrite hardware's logging format(Same description as above in emulator format).
+#	- Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+#	- File Creation Mode indicates file overwriting if file exist.
+#		+ OVERWRITE, Overwrites if file(s) exist.
+#		+ APPEND, Continue logging after the old logging information if file(s) exist.
+#
+#	- Will thread id include to the log filename.
+#		+ YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+#		+ NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+#	- Will time stamps include the to log file.
+#		+ YES, Time stamp added to each line in log file(s). Time stamp is 
+#                 for example'12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No time stamp(s).
+#
+#	- Will line breaks include to the log file.
+#		+ YES, Each logging event includes line break and next log event is in own line.
+#		+ NO, No line break(s).
+#
+#	- Will event ranking include to the log file.
+#		+ YES, Event ranking number added to each line in log file(s). Ranking number
+#                 depends on environment's tics, for example(includes time stamp also)
+#                 '012   12.Nov.2003 115958    LOGGING INFO'
+#		+ NO, No event ranking.
+#
+#	- Will write log file in unicode format.
+#		+ YES, Log file will be written in unicode format
+#		+ NO, Log will be written as normal, not unicode, file.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+#NOTE: TestEngine and TestServer logging settings cannot change here
+
+CreateLogDirectories= YES		# Possible values: YES or NO
+
+#EmulatorBasePath= C:\LOGS\TestFramework\
+#EmulatorFormat= HTML         # Possible values: TXT or HTML
+#EmulatorOutput= FILE         # Possible values: FILE or RDEBUG
+
+#HardwareBasePath= D:\LOGS\TestFramework\
+#HardwareFormat= HTML         # Possible values: TXT or HTML
+#HardwareOutput= FILE         # Possible values: FILE or RDEBUG
+
+#FileCreationMode= OVERWRITE  # Possible values: OVERWRITE or APPEND
+
+#ThreadIdToLogFile= YES       # Possible values: YES or NO
+#WithTimeStamp= YES           # Possible values: YES or NO
+#WithLineBreak= YES           # Possible values: YES or NO
+#WithEventRanking= YES        # Possible values: YES or NO
+
+#FileUnicode= YES             # Possible values: YES or NO
+#AddTestCaseTitle= YES        # Possible values: YES or NO
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set filters to be used by ConsoleUI.
+# 	If you want to use filter with ConsoleUI, simply remove comments
+# 	from section below and provide valid filter entries.
+#   Each filter line has to start with "filter= " keyword.
+#   Filter can contain special wildcard characters:
+#     *  which stands for none or any literal;
+#     ?  which stands for single character.
+#   Filters are not case-sensitive.
+
+#[Filters]
+#filter= *math*
+#filter= *radio*
+#[End_Filters]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/rom/obexservapitest.iby	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Image description file for project bteng
+*
+*/
+
+#ifndef BTENGAPITEST_IBY
+#define BTENGAPITEST_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+
+file=ABI_DIR\BUILD_DIR\ObexServAPItest.dll			SHARED_LIB_DIR\ObexServAPItest.dll
+
+#endif // BTENGAPITEST_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/src/ObexServAPItest.cpp	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "ObexServAPItest.h"
+
+// EXTERNAL DATA STRUCTURES
+//extern  ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES  
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// ?function_name ?description.
+// ?description
+// Returns: ?value_1: ?description
+//          ?value_n: ?description_line1
+//                    ?description_line2
+// -----------------------------------------------------------------------------
+//
+/*
+?type ?function_name(
+    ?arg_type arg,  // ?description
+    ?arg_type arg)  // ?description
+    {
+
+    ?code  // ?comment
+
+    // ?comment
+    ?code
+    }
+*/
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CObexServAPItest
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CObexServAPItest::CObexServAPItest( 
+    CTestModuleIf& aTestModuleIf ):
+        CScriptBase( aTestModuleIf )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CObexServAPItest::ConstructL()
+    {
+    
+    iTestLogger = CObexTestLogger::NewL( &TestModuleIf() );         
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CObexServAPItest* CObexServAPItest::NewL( 
+    CTestModuleIf& aTestModuleIf )
+    {
+    CObexServAPItest* self = new (ELeave) CObexServAPItest( aTestModuleIf );
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+
+    }
+
+// Destructor
+CObexServAPItest::~CObexServAPItest()
+    { 
+
+    // Delete resources allocated from test methods
+    Delete();
+
+    // Delete logger
+    delete iTestLogger; 
+    iTestLogger = NULL;
+    }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL( 
+    CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+    {
+
+    return ( CScriptBase* ) CObexServAPItest::NewL( aTestModuleIf );
+
+    }
+
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/src/ObexServAPItestBlocks.cpp	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,630 @@
+/*
+* Copyright (c) 2002 - 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <UiklafInternalCRKeys.h>
+#include <UikonInternalPSKeys.h>
+#include <Obexutils.rsg>
+#include <obex.h>
+#include "testlogger.h"
+#include "ObexServAPItest.h"
+
+#include    <btengdomaincrkeys.h> 
+
+// CONSTANTS
+const TInt    KBufferSize = 0x4000;  // 16kB
+
+// Defined to coincide with the definition in btmsgtypeuid.h 
+const TUid KUidMsgTypeBt                 = {0x10009ED5};
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void CObexServAPItest::Delete() 
+    {
+    delete iObexObject;
+    iObexObject = NULL;
+    delete iBuf;
+    iBuf = NULL;
+    iRFs.Close(); 
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::RunMethodL( 
+    CStifItemParser& aItem ) 
+    {
+
+    static TStifFunctionInfo const KFunctions[] =
+        {  
+        // Copy this line for every implemented function.
+        // First string is the function name used in TestScripter script file.
+        // Second is the actual implementation member function. 
+        ENTRY( "GetFileSystemStatus", CObexServAPItest::GetFileSystemStatusL ),
+        ENTRY( "GetMmcFileSystemStatus", CObexServAPItest::GetMmcFileSystemStatusL ),
+        ENTRY( "GetMessageCentreDriveL", CObexServAPItest::GetMessageCentreDriveL ),
+        ENTRY( "CreateDefaultMtmServiceL", CObexServAPItest::CreateDefaultMtmServiceL ),
+        ENTRY( "GetCenRepKeyIntValueL", CObexServAPItest::GetCenRepKeyIntValueL ),
+        ENTRY( "GetPubSubKeyIntValue", CObexServAPItest::GetPubSubKeyIntValueL ),
+        ENTRY( "CreateOutBoxEntry", CObexServAPItest::CreateOutBoxEntryL ),
+        ENTRY( "RemoveOutBoxEntry", CObexServAPItest::RemoveOutBoxEntryL ),
+        ENTRY( "SaveObjToInbox", CObexServAPItest::SaveObjToInboxL ),
+        ENTRY( "CreateEntryToInbox", CObexServAPItest::CreateEntryToInboxL ),
+        ENTRY( "SaveRFileObjectToInbox", CObexServAPItest::SaveRFileObjectToInboxL ),
+        ENTRY( "RemoveObjectFromInbox", CObexServAPItest::RemoveObjectL ),
+        ENTRY( "GetCenRepKeyStringValueL", CObexServAPItest::GetCenRepKeyStringValueL), // JHä 
+        ENTRY( "CreateReceiveBufferAndRFileL", CObexServAPItest::CreateReceiveBufferAndRFileL), // JHä 
+        ENTRY( "RemoveTemporaryRFileL", CObexServAPItest::RemoveTemporaryRFileL), // JHä 
+        ENTRY( "SaveFileToFileSystemL", CObexServAPItest::SaveFileToFileSystemL), // JHä 
+        ENTRY( "AddEntryToInboxL", CObexServAPItest::AddEntryToInboxL), // JHä 
+        ENTRY( "UpdateEntryAttachmentL", CObexServAPItest::UpdateEntryAttachmentL), // JHä 
+        };
+
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+    
+ // -----------------------------------------------------------------------------
+// CBtApiTest::TestCompleted
+// -----------------------------------------------------------------------------
+//  
+void CObexServAPItest::TestCompleted( TInt aErr, const TUint8* aFunc, const TDesC& aArg )
+    {
+    iTestLogger->LogResult( (TPtrC8( aFunc )), aArg, aErr );
+    Signal( aErr );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetFileSystemStatusL
+// Test code for getting file system status.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetFileSystemStatusL( CStifItemParser& /*aItem*/ )
+    {
+    // Print to log file
+    TInt retVal=TObexUtilsMessageHandler::GetFileSystemStatus();
+    if (retVal == 0 || retVal == KErrDiskFull)
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetFileSystemStatusL"));
+        }
+    else
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("Error getting files ystem status"));    
+        }    
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetMmcFileSystemStatusL
+// Test code for getting mmc file system status.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetMmcFileSystemStatusL( CStifItemParser& /*aItem*/ )
+    {
+    TInt retVal=TObexUtilsMessageHandler::GetMmcFileSystemStatus();
+    if (retVal == 0 || retVal == KErrDiskFull)
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetFileSystemStatusL"));
+        }
+    else
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("Error getting files ystem status"));    
+        }    
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetMessageCentreDriveL
+// Test code for getting message center drive. 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetMessageCentreDriveL( CStifItemParser& /*aItem*/ )
+    {
+    
+    TInt retVal = TObexUtilsMessageHandler::GetMessageCentreDriveL();
+    if (retVal >= 0 )
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetMessageCentreDrive"));
+        }
+    else
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("GetMessageCentreDrive failed"));    
+        }    
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CreateDefaultMtmServiceL
+// Test code for creating Default MTM services.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::CreateDefaultMtmServiceL( CStifItemParser& /*aItem*/ )
+    {
+
+    TRAPD(error, TObexUtilsMessageHandler::CreateDefaultMtmServiceL(KUidMsgTypeBt) );
+    if (error == KErrNone)
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("CreateDefaultMtmServiceL"));        
+        }
+    else
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateDefaultMtmServiceL"));                       
+        }
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetCenRepKeyIntValueL
+// Test code for Getting CenRep key.    
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetCenRepKeyIntValueL( CStifItemParser&  /*aItem*/ )  // JHä note: Is return code handling done right? 
+    {
+    TInt limit=0;    
+    TInt error=0;
+    TRAPD(leaveVal, error = TObexUtilsMessageHandler::GetCenRepKeyIntValueL(KCRUidUiklaf,
+                                                                KUikOODDiskCriticalThreshold,
+                                                                limit));
+    if( leaveVal != KErrNone ) 
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyIntValueL leaves"));                       
+        }    
+    else if (error == KErrNone)
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyIntValue return error"));                       
+        }   
+    else
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetCenRepKeyIntValueL"));                           
+        }    
+    
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::GetPubSubKeyIntValueL
+// Test code for Getting PubSub key.    
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::GetPubSubKeyIntValueL( CStifItemParser& /*aItem*/ )
+    {
+    TInt status = KErrNone;
+    TInt retVal = KErrNone;
+    
+    TRAPD(leaveVal, retVal = TObexUtilsMessageHandler::GetPubSubKeyIntValue(KPSUidUikon, KUikFFSFreeLevel, status));
+    
+    if( leaveVal != KErrNone ) 
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetPubSubKeyIntValueL leaves"));                       
+        }    
+    else if (retVal == KErrNone)
+        {
+        TestCompleted( retVal, TLFUNCLOG, _L("GetPubSubKeyIntValueL return error"));                       
+        }   
+    else
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetPubSubKeyIntValue"));                           
+        }  
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::OutBoxEntryL
+// Test code for Creating outbox entry.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::CreateOutBoxEntryL( CStifItemParser& /*aItem*/ )
+    {    
+    TRAPD(error, iMessageServerIndex = TObexUtilsMessageHandler::CreateOutboxEntryL( KUidMsgTypeBt, R_BT_SEND_OUTBOX_SENDING ));  
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateOutBoxEntryL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("CreateOutBoxEntryL"));     
+        }
+
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::OutBoxEntryL
+// Test code for removing outbox entry.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::RemoveOutBoxEntryL( CStifItemParser& /*aItem*/ )
+    {   
+    
+    TRAPD(error, TObexUtilsMessageHandler::DeleteOutboxEntryL( iMessageServerIndex ));
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("RemoveOutBoxEntryL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("RemoveOutBoxEntryL"));     
+        }
+    return KErrNone;
+
+    }
+    
+// -----------------------------------------------------------------------------
+// CObexServAPItest::SaveObjToInboxL
+// Test code for save received file to inbox. 
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::SaveObjToInboxL( CStifItemParser& /*aItem*/ )
+    {   
+    
+    CObexBufObject* obexobject = CObexBufObject::NewL( NULL );
+    CleanupStack::PushL(obexobject);    
+    
+    TRAP_IGNORE(TObexUtilsMessageHandler::SaveObjToInboxL(obexobject ,
+                                              KNullDesC, 
+                                              KUidMsgTypeBt ));
+    TestCompleted( KErrNone, TLFUNCLOG, _L("SaveObjToInboxL leaves")); 
+    
+    CleanupStack::PopAndDestroy(obexobject);
+    return KErrNone;
+
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CreateAndSaveObjectL
+// Test code for creating entry to inbox.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::CreateEntryToInboxL( CStifItemParser& /*aItem*/ )
+    {
+    iFile = RFile();
+    
+    if ( iObexObject)
+        {
+        delete iObexObject;
+        iObexObject = NULL;
+        }
+        
+    iObexObject = CObexBufObject::NewL( NULL );
+    
+    TRAPD( error, TObexUtilsMessageHandler::CreateInboxAttachmentL( iObexObject,
+                                                      KUidMsgTypeBt,
+                                                      iMessageServerIndex,
+                                                      iFile));
+                                                      
+                                                      
+    iBuf = CBufFlat::NewL(1024);
+    iBuf->ResizeL(1024);
+    
+    TObexRFileBackedBuffer bufferdetails(*iBuf,iFile,CObexBufObject::EDoubleBuffering);    
+    
+    TRAP_IGNORE( iObexObject->SetDataBufL( bufferdetails) );
+    
+                                                      
+                                                      
+    iFile.Write(_L8("test"));    
+    iObexObject->SetNameL(_L("test.txt"));        
+    
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateEntryToInboxL leaves")); 
+        }    
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateEntryToInboxL"));     
+        }         
+    return KErrNone;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::CreateAndSaveObjectL
+// Test code for creating entry to inbox.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::SaveRFileObjectToInboxL( CStifItemParser& /*aItem*/ )
+    {
+    TRAPD( error, TObexUtilsMessageHandler::SaveObjToInboxL(
+            iObexObject,
+            iFile,
+            iMessageServerIndex));
+    
+    delete iBuf;
+    iBuf = NULL;
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL"));     
+        }                                          
+    
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexServAPItest::RemoveObjectL
+// Test code for removing entry to inbox.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CObexServAPItest::RemoveObjectL( CStifItemParser& /*aItem*/ )
+    {
+    TRAPD(error,TObexUtilsMessageHandler::RemoveInboxEntriesL(iObexObject, iMessageServerIndex));    
+    delete iBuf;
+    iBuf = NULL;
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveObjToInboxL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Find out the path of the receive folder. 
+TInt CObexServAPItest::GetCenRepKeyStringValueL( CStifItemParser& /*aItem*/ ) // JHä  - Done 
+    {
+    TInt error = KErrNone;
+    TRAPD(leaveVal, error = TObexUtilsMessageHandler::GetCenRepKeyStringValueL(KCRUidBluetoothEngine,
+                                                                KLCReceiveFolder,
+                                                                iCenRepFolder));
+    if( leaveVal != KErrNone ) 
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyStringValueL leaves"));                       
+        }    
+    else if (error != KErrNone)
+        {
+        TestCompleted( leaveVal, TLFUNCLOG, _L("GetCenRepKeyStringValueL return error"));                       
+        }   
+    else
+        {
+        TestCompleted( KErrNone, TLFUNCLOG, _L("GetCenRepKeyStringValueL"));                           
+        }    
+
+    return KErrNone;    
+   	}
+
+// Create the receive buffer and temporary receive file. 
+TInt CObexServAPItest::CreateReceiveBufferAndRFileL( CStifItemParser& /*aItem*/ ) // JHä - Done 
+    {
+    TFileName defaultFolder;
+    defaultFolder.Zero();
+
+    User::LeaveIfError(iRFs.Connect());
+    
+    iFile = RFile(); // Creating an empty file. 
+
+    // Ensure that the object and buffer don't exist. 
+    // This also deletes the previous iFile object, if any existed, 
+    //  because its handle is held by iObexObject.  
+    if(iObexObject)
+        {
+        delete iObexObject;
+        iObexObject = NULL;
+        }
+    if( iBuf )
+        {
+        delete iBuf;    
+        iBuf=NULL;
+        }
+
+    // Then create a new obex object for holding the buffer and the temp file. 
+    iObexObject = CObexBufObject::NewL( NULL );
+
+    defaultFolder.Append(_L("C:\\data\\"));
+    defaultFolder.Append(iCenRepFolder);   // Got this from central repository in GetCenRepKeyStringValueL
+
+    TRAPD(error,TObexUtilsMessageHandler::CreateReceiveBufferAndRFileL( iFile,  // Out: But iFile is returned as closed. 
+                                                                        defaultFolder, // Where to create the temp file.  
+                                                                        iTempFullPathFilename, // Out: Can be used to open the file later. 
+                                                                        iBuf,   // Out: This contains the message buffer. 
+                                                                        KBufferSize));
+
+    // Open the file again. 
+    User::LeaveIfError(iFile.Open(iRFs, iTempFullPathFilename, EFileWrite));   
+
+    TObexRFileBackedBuffer bufferdetails(*iBuf,iFile,CObexBufObject::EDoubleBuffering);    
+    
+    // Do we really need to trap leaves here? Maybe because of Stif?  
+    TRAP(error, iObexObject->SetDataBufL( bufferdetails) );
+    if (error != KErrNone)
+        {
+        error = KErrGeneral;  
+        }
+
+    iFile.Write(_L8("test")); // Put some test data into the file, although it is not mandatory.      
+    iFile.Flush();
+
+    iObexObject->SetNameL(_L("test.txt"));        
+
+    // At this point we have an object in file system (iFile refers to it)    
+    // and an entry in Inbox which we can later refer to with iMessageServerIndex.  
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateReceiveBufferAndRFileL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("CreateReceiveBufferAndRFileL"));     
+        }                                              
+
+    // iFile is left open  
+    return KErrNone;
+    }
+
+// Copy the temporary receive file to the correct place in the file system after receiving is complete. 
+TInt CObexServAPItest::SaveFileToFileSystemL( CStifItemParser& /*aItem*/ ) // JHä - Done
+    {
+    // Create bogus device name. 
+    TBTDeviceName remoteDeviceName;
+	remoteDeviceName.Zero(); 
+	remoteDeviceName.Append(_L("APITestDevice")); 
+
+// The iFile must be still open after calling CreateReceiveBufferAndRFileL method 
+	
+    TRAPD(error,TObexUtilsMessageHandler::SaveFileToFileSystemL(   iObexObject,
+                                                                   KUidMsgTypeBt,
+                                                                   iMessageServerIndex,	// This is gotten  
+                                                                   iTempFullPathFilename, // Contains the final path of the file
+                                                                   iFile,   // Handle to the temp file. 
+                                                                   remoteDeviceName)); 
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveFileToFileSystemL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("SaveFileToFileSystemL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Create an entry in the Inbox and attach the file there. 
+TInt CObexServAPItest::AddEntryToInboxL( CStifItemParser& /*aItem*/ ) // JHä - Done 
+    {
+    RArray<TMsvId>  tmpMsvIdArray; // Not really needed, but must be passed to the method. 
+    
+    TRAPD(error,TObexUtilsMessageHandler::AddEntryToInboxL( iMessageServerIndex, 
+                                                            iTempFullPathFilename, 
+                                                            &tmpMsvIdArray));
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("AddEntryToInboxL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("AddEntryToInboxL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Replacing a broken link in Inbox with a proper link to a file. 
+TInt CObexServAPItest::UpdateEntryAttachmentL( CStifItemParser& /*aItem*/ ) // JHä - Done
+    {
+    // Create a new file to be the replacement: 
+    TFileName tempFilename; 
+    TFileName defaultFolder;
+    RFs rfs; 
+    RFile newFile;  
+
+    User::LeaveIfError(rfs.Connect());
+    CleanupClosePushL(rfs);  
+
+    defaultFolder.Zero();
+    defaultFolder.Append(_L("C:\\data\\"));
+    defaultFolder.Append(iCenRepFolder);   // Got this from central repository in GetCenRepKeyStringValueL
+    User::LeaveIfError( newFile.Temp( rfs, defaultFolder, tempFilename, EFileWrite) );
+    newFile.Write(_L8("testing replacing"));    
+    newFile.Flush();
+    newFile.Close(); 
+
+    CleanupStack::PopAndDestroy(); // rfs  
+
+    // Then replace the attachment: 
+    CDummySessionObserver* sessionObs = new( ELeave )CDummySessionObserver;;
+    CleanupStack::PushL( sessionObs );  
+    CMsvSession* msvSession = CMsvSession::OpenSyncL( *sessionObs );
+    CleanupStack::PushL(msvSession);
+    CMsvEntry* entry = msvSession->GetEntryL(iMessageServerIndex);
+    CleanupStack::PushL(entry);
+    TRAPD(error,TObexUtilsMessageHandler::UpdateEntryAttachmentL(tempFilename, entry));    
+
+    // Cleanup: 
+    CleanupStack::PopAndDestroy(3); // entry, msvSession, sessionObs, 
+    
+    // Save the path to the new file so it can be referred to later.  
+    iTempFullPathFilename = tempFilename; 
+
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("UpdateEntryAttachmentL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("UpdateEntryAttachmentL"));     
+        }                                              
+    return KErrNone;
+    }
+
+// Delete the temporary file. Called normally when the link is broken and the user searches for the file. 
+// In test code this should be called after creating the temporary RFile and before 
+// creating the Inbox entry. 
+TInt CObexServAPItest::RemoveTemporaryRFileL( CStifItemParser& /*aItem*/ ) // JHä - Done 
+    {
+    TRAPD(error,TObexUtilsMessageHandler::RemoveTemporaryRFileL(iTempFullPathFilename));    
+    if( error != KErrNone)
+        {
+        TestCompleted( error, TLFUNCLOG, _L("RemoveTemporaryRFileL leaves")); 
+        }
+    else     
+        {
+        TestCompleted( error, TLFUNCLOG, _L("RemoveTemporaryRFileL"));     
+        }                                              
+    return KErrNone;
+    }
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+//  End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shortlinkconn_plat/obex_service_utils_api/tsrc/src/testlogger.cpp	Sat Apr 24 00:27:31 2010 +0300
@@ -0,0 +1,530 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// INCLUDES
+
+#include "testlogger.h"
+
+#include <StifTestModule.h>
+#include <StifLogger.h>
+
+#include <e32std.h>
+#include <f32file.h>
+#include <sysutil.h>
+
+// RDebug
+#include <e32debug.h>
+
+const TInt CObexTestLogger::KPrefixLength = 8;
+// Timestamp string length
+const TInt KTimeStampStrLen = 21;
+// Extended Timestamp string length
+const TInt KExtTimeStampStrLen = 40;
+// Extended time stamp
+typedef TBuf<KExtTimeStampStrLen> TExtTimeStamp;
+// Logging path
+_LIT( KObexServAPITestSystemLogPath, "e:\\logs\\ObexServAPItest\\" );
+// Log file
+_LIT( KObexServAPITestSystemLogFile, "ObexServAPItest.html" );
+// Log file
+_LIT( KObexServAPITestSystemLogFullName, "\\logs\\ObexServAPItest\\ObexServAPItest%x.html" );
+// Time stamp format string
+_LIT( KFormatTimeStamp, "<br/>[%H:%T:%S.%*C4] " );
+// Date format string
+_LIT( KFormatDate, "%F%D %N %Y" );
+// HTML header section
+_LIT( KHtmlHeadSection, "<html>\n<head>\n<title>Obex Message Handler Test System results</title>\n<style type=\"text/css\">\n.res, .case { display: inline; }\n</style>\n</head>\n\n<body onLoad=\"FormatResults();\">\n\n" );
+// HTML code which will display the statistics
+_LIT( KHtmlStatSection, "<p>Logfile created on %S at %S<br />\nS60 version %S</p>\n\n<div id=\"stats\"></div>\n<br />\n\n" );
+// HTML identifier for test case start
+_LIT( KHtmlTestCaseStart, "<div class=\"case\">" );
+// Test case result logging
+_LIT( KTestCaseResult, "Test completed; function %S, parameter %S, result <div class=\"res\">%d</div></div>" );
+// JavaScript function for calculating test result
+#define KJSSECTION _L( "<script type=\"text/javascript\">\nfunction FormatResults() { \
+\n\tvar tl = document.getElementsByTagName( \"div\" );\n\tvar passed = 0, failed = 0, testcases = 0; \
+\n\tfor( var i = 0; i < tl.length; i++ ) {\n\t\tif( tl[i].className == \"case\" ) {\n\t\t\ttestcases++;\n\t\t\t} \
+\n\t\tif( tl[i].className == \"res\" ) {\n\t\t\tif( tl[i].innerHTML == 0 ) {\n\t\t\t\tpassed++;\n\t\t\t\t} \
+\n\t\t\telse {\n\t\t\t\tfailed++;\n\t\t\t\ttl[i].parentNode.style.color = \"red\";\n\t\t\t\t} } } \
+\n\tvar stat = document.getElementById( \"stats\" );\n\tvar passrate = Math.round( ( passed / testcases ) * 10000 ) / 100; \
+\n\tstat.innerHTML = \"Test cases run: \" + testcases + \"<br />Passed: \" + passed \
++\"<br />Failed: \" + failed + \"<br /><b>Passrate: \" + passrate + \"%%</b>\";\n\t}\n</script>" )
+
+// Construction and destruction.
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::NewL
+// Static constructor to constructor builder objects.
+// -----------------------------------------------------------------------------
+//
+CObexTestLogger* CObexTestLogger::NewL(const CTestModuleIf* aTestModuleIf)
+	{
+	CObexTestLogger* self = new (ELeave) CObexTestLogger(aTestModuleIf);
+
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop(self);
+
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::CObexTestLogger
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CObexTestLogger::CObexTestLogger(const CTestModuleIf* aTestModuleIf)
+	: CBase(),
+	  iEnabled(ETrue),
+	  iTestModuleIf(aTestModuleIf)
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CTestLogger::ConstructL
+// 2nd phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::ConstructL()
+    {
+    TInt err = CheckLogFile();
+    iLog = CStifLogger::NewL( KObexServAPITestSystemLogPath, KObexServAPITestSystemLogFile,
+                              CStifLogger::ETxt, CStifLogger::EFile, EFalse, EFalse );
+    if( err == KErrNotFound )
+        {   // Add info & HTML markup to the beginning of the log file.
+        LogHeadSectionL();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::~CObexTestLogger
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CObexTestLogger::~CObexTestLogger()
+	{
+	delete iLog;
+	}
+
+// Member functions.
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::GetLogger
+// Returns a pointer to current STIF logger.
+// -----------------------------------------------------------------------------
+//
+CStifLogger* CObexTestLogger::GetLogger() const
+	{
+	return iLog;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::GetTestModuleIf
+// Returns a pointer to current STIF test module interface.
+// -----------------------------------------------------------------------------
+//
+const CTestModuleIf* CObexTestLogger::GetTestModuleIf() const
+	{
+	return iTestModuleIf;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 8 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(TLogLevel aLevel, TRefByValue<const TDesC8> aLogText, ...) const
+    {
+    if (!iEnabled)
+        {
+        return KErrNone;
+        }
+
+    const TDesC8& actualData = aLogText;
+
+    // Check that user does not try to output too much data.
+    if (actualData.Length() > KMaxLogData - KPrefixLength)
+        {
+        return KErrTooBig;
+        }
+
+    // Buffer to convert 8 bit data to to 16 bit.
+    TLogInfo8 converter;
+
+    // Create variable argument list.
+    VA_LIST args;
+    VA_START(args, aLogText);
+
+    // Format the argument list to the output buffer.
+    converter.FormatList( aLogText, args );
+
+    // Free the variable argument list
+    VA_END(args);
+
+    TLogInfo buffer;
+    buffer.Copy( converter );
+
+    // Append log prefix to the output buffer.
+    buffer.Insert( 0, GetPrefix( aLevel ) );
+
+    // Log a timestamp
+    TStifLoggerTimeStamp8 time;
+    TRAP_IGNORE( LogTimeStampL( time ) );
+    buffer.Insert( 0, time );
+
+    // Write log.
+    return WriteLog(aLevel, buffer);
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 8 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(const TDesC& aCategory, TRefByValue<const TDesC8> aLogText, ...) const
+    {
+    if (!iEnabled)
+	    {
+        return KErrNone;
+        }
+
+    const TDesC8& actualData = aLogText;
+
+    // Check that user does not try to output too much data.
+    if (actualData.Length() > KMaxLogData - KPrefixLength)
+        {
+        return KErrTooBig;
+        }
+
+    // Buffer to convert 8 bit data to to 16 bit.
+    TLogInfo8 converter;
+
+    // Create variable argument list.
+    VA_LIST args;
+    VA_START(args, aLogText);
+
+    // Format the argument list to the output buffer.
+    converter.FormatList(aLogText, args);
+
+    // Free the variable argument list
+    VA_END(args);
+
+    TLogInfo buffer;
+    buffer.Copy( converter );
+
+    // Log a timestamp
+    TStifLoggerTimeStamp8 time;
+    TRAP_IGNORE( LogTimeStampL( time ) );
+    buffer.Insert( 0, time );
+
+    // Write log.
+    return WriteLog(aCategory, buffer);
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 16 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(TLogLevel aLevel, TRefByValue<const TDesC16> aLogText, ...) const
+	{
+	if (!iEnabled)
+		{
+		return KErrNone;
+		}
+
+	const TDesC16& actualData = aLogText;
+	// Check that user does not try to output too much data.
+	if (actualData.Length() + KPrefixLength > KMaxLogData)
+		{
+		return KErrTooBig;
+		}
+
+	TLogInfo buffer;
+
+	// Log a timestamp
+	TRAP_IGNORE( LogTimeStampL( buffer ) );
+
+	// Create variable argument list.
+	VA_LIST args;
+	VA_START(args, aLogText);
+
+	// Format the argument list to the output buffer.
+	buffer.AppendFormatList(aLogText, args);
+
+	// Free the variable argument list
+	VA_END(args);
+
+	// Write log.
+	return WriteLog(aLevel, buffer);
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::Log
+// Logs 16 bit data to screen and file.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::Log(const TDesC& aCategory, TRefByValue<const TDesC16> aLogText, ...) const
+	{
+	if (!iEnabled)
+		{
+		return KErrNone;
+		}
+
+	const TDesC16& actualData = aLogText;
+	// Check that user does not try to output too much data.
+	if (actualData.Length() + KPrefixLength > KMaxLogData)
+		{
+		return KErrTooBig;
+		}
+
+	TLogInfo buffer;
+
+	// Log a timestamp
+	TRAP_IGNORE( LogTimeStampL( buffer ) );
+
+	// Create variable argument list.
+	VA_LIST args;
+	VA_START(args, aLogText);
+
+	// Format the argument list to the output buffer.
+	buffer.AppendFormatList(aLogText, args);
+
+	// Free the variable argument list
+	VA_END(args);
+
+	// Write log.
+	return WriteLog(aCategory, buffer);
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogNewLine
+// Logs an HTML  newline and timestamp.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::LogResult( const TDesC8& aFunc, const TDesC& aArg, TInt aRes ) const
+    {
+    TExtTimeStamp func;
+    func.Copy( aFunc ); // Copy 8-bit string to 16-bit buffer
+
+    Log( CObexTestLogger::ETLResult, KTestCaseResult, &func, &aArg, aRes );
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogNewLine
+// Logs an HTML  newline and timestamp.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::LogNewLine() const
+    {
+    if (!iEnabled)
+        {
+        return KErrNone;
+        }
+    TExtTimeStamp time;
+    TRAPD( err, LogTimeStampL( time ) );
+    if( !err )
+        {
+        time.Insert( 0, KHtmlTestCaseStart );
+        err = iLog->Log( time );
+        }
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::SetEnabled
+// Returns a pointer to current STIF logger.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::SetEnabled(TBool aEnabled)
+	{
+	iEnabled = aEnabled;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::SetLogger
+// Sets a pointer to current STIF logger.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::SetLogger(CStifLogger* aLog)
+	{
+	iLog = aLog;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::SetTestModuleIf
+// Sets a pointer to current STIF test module.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::SetTestModuleIf(const CTestModuleIf* aTestModuleIf)
+	{
+	iTestModuleIf = aTestModuleIf;
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::WriteLog
+// Writes log.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::WriteLog(TLogLevel aLevel, TDes16& aLog) const
+    {
+    // Write log to file if file logger is available.
+    if (iLog != 0)
+        {
+        iLog->Log(aLog);
+        }
+    // Remove the timestamp from the logging data.
+    TPtrC16 log( aLog.Mid( KTimeStampStrLen ) );
+
+    // Write log with RDebug.
+    RDebug::Print(log);
+
+    // Write log to screen if test module interface is available.
+	if (iTestModuleIf != 0)
+        {
+        CTestModuleIf* nonStaticLogger = const_cast<CTestModuleIf*>(iTestModuleIf);
+        nonStaticLogger->Printf(aLevel, _L(""), log);
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::WriteLog
+// Writes log.
+// -----------------------------------------------------------------------------
+//
+TInt  CObexTestLogger::WriteLog(const TDesC16& aCategory, const TDesC16& aLog) const
+    {
+    // Write log to file if file logger is available.
+    if (iLog != 0)
+        {
+        iLog->Log(aLog);
+        }
+    // Remove the timestamp from the logging data.
+    TPtrC16 log( aLog.Mid( KTimeStampStrLen ) );
+
+    // Write log with RDebug.
+    RDebug::Print(log);
+
+    // Write log to screen if test module interface is available.
+    if (iTestModuleIf != 0)
+        {
+        CTestModuleIf* nonStaticLogger = const_cast<CTestModuleIf*>(iTestModuleIf);
+        nonStaticLogger->Printf(0, aCategory, log);
+        }
+
+    return KErrNone;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::GetPrefix
+// Returns the prefix for a given logging level.
+// -----------------------------------------------------------------------------
+//
+TPtrC CObexTestLogger::GetPrefix(TLogLevel aLevel)
+	{
+	// Select a prefix for a log level and return a pointer to it.
+	switch(aLevel)
+		{
+		case ETLError:
+			{
+			TPtrC logPrefix = _L("ERROR : ");
+			return logPrefix;
+			}
+		case ETLInfo:
+		case ETLResult: 
+			{
+			TPtrC logPrefix = _L("INFO  : ");
+			return logPrefix;
+			}
+		case ETLDebug:
+			{
+			TPtrC logPrefix = _L("DEBUG : ");
+			return logPrefix;
+			}
+		default:
+			{
+			// Return a null pointer.
+			return TPtrC();
+			}
+
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::CheckLogFile
+// Check if a log file is already existing, otherwise HTML formatting 
+// should be added.
+// -----------------------------------------------------------------------------
+//
+TInt CObexTestLogger::CheckLogFile()
+    {
+    RThread thread;
+    TInt id = thread.Id();
+    TBuf<KMaxFileName > file;
+    file.Format( KObexServAPITestSystemLogFullName, id );
+    RFs fs;
+    TInt err = fs.Connect();
+    TBool open = EFalse;
+    if( !err )
+        {
+        err = fs.IsFileOpen( file, open );
+        }
+    fs.Close();
+    return err;
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogTimeStamp
+// Log HTML head section and general information in a newly created logfile.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::LogHeadSectionL()
+    {
+    iLog->Log( KHtmlHeadSection );
+    iLog->Log( KJSSECTION );
+    TBuf<KSysUtilVersionTextLength> version( _L( "Version unknown!" ) );
+    (void) SysUtil::GetSWVersion( version );
+    TStifLoggerTimeStamp8 date;
+    LogTimeStampL( date, EFalse );
+    TStifLoggerTimeStamp8 time;
+    LogTimeStampL( time );
+    TPtrC timePtr( time.Mid( 6, 13 ) );
+    iLog->Log( KHtmlStatSection, &date, &timePtr, &version );
+    }
+
+// -----------------------------------------------------------------------------
+// CObexTestLogger::LogTimeStamp
+// Format a timestamp for logging.
+// If aTime is set to false, the (formatted) date is returned.
+// -----------------------------------------------------------------------------
+//
+void CObexTestLogger::LogTimeStampL(TDes& aBuf, TBool aTime) const
+    {
+    TTime time;
+    time.HomeTime();    // Get time and format it
+    if( aTime )
+        {
+        time.FormatL( aBuf, KFormatTimeStamp );
+        }
+    else
+        {
+        time.FormatL( aBuf, KFormatDate );
+        }
+    }