ofdbus/dbus/tsrc/testapps/stif_1/src/stif_1Blocks.cpp
changeset 31 ce057bb09d0b
child 45 4b03adbd26ca
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ofdbus/dbus/tsrc/testapps/stif_1/src/stif_1Blocks.cpp	Fri Jun 04 16:20:51 2010 +0100
@@ -0,0 +1,1862 @@
+/*
+* 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: 
+*
+*/
+
+
+
+
+// [INCLUDE FILES] - do not remove    
+#include <e32std.h>
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h> 
+#include <unistd.h>
+#include "stif_1.h"
+#include <sys/stat.h>
+
+#include <pthread.h>
+#include <fcntl.h>
+#include <string.h>
+#include <spawn.h>
+
+#include "errno.h"
+#define MAX_THREAD 25
+#define MAX_SIGNALS 3
+#define MAX_CONN 21
+#define MAX_CONN_EXE 25
+
+_LIT(KSuccess, "Test Successful");
+_LIT(KOOM, "Out Of Memory");
+int var_arg_ret_val = -3;
+int pending_call_ret_val = -6;
+TBool data_free_flag = FALSE;
+
+struct TestData
+{
+	int num;
+	char* str;
+};
+
+struct TestData1
+{
+	int data_slot;
+	TestData* data;
+};
+
+
+void Free_Test_Data(void* data)
+	{
+		TestData* test_data;
+		test_data = (TestData*)data;
+		
+		free(test_data->str);
+		free(test_data);
+		data_free_flag = TRUE;
+	}
+ 
+void handle_reply_variable_args(DBusPendingCall* pending, void* data)
+	{
+		DBusMessage* msg1;
+		DBusMessageIter return_iter;
+		DBusError error;
+		dbus_int32_t* return_value = (dbus_int32_t*)data;
+		dbus_int32_t ret;
+		
+		// get the reply message
+		msg1 = dbus_pending_call_steal_reply(pending);
+		if (NULL == msg1) {
+		*return_value = -2; 
+		}
+
+		// free the pending message handle
+		dbus_pending_call_unref(pending);
+			 
+		dbus_error_init (&error);
+		dbus_message_iter_init(msg1, &return_iter);
+
+		dbus_message_iter_get_basic(&return_iter, return_value);
+		ret = *return_value; 
+		RDebug::Printf("return value is:%d\n", ret);
+		dbus_message_unref(msg1);  
+	}
+
+void handle_reply_pending_call_data_slot0(DBusPendingCall* pending, void* data)
+	{
+		DBusMessage* msg1;
+		DBusError error;
+		int return_value;
+		TestData1* data1 = (TestData1*)data;
+		TestData* test_data;
+		TestData* new_data;
+		DBusFreeFunction free_data;
+		
+		// get the reply message
+		msg1 = dbus_pending_call_steal_reply(pending);
+		if (NULL == msg1) {
+		return_value = -2; 
+		return;
+		}		
+			 
+		dbus_error_init (&error);
+		
+		dbus_message_get_args(msg1, &error, DBUS_TYPE_INT32, &return_value, DBUS_TYPE_INVALID);
+		
+		if(return_value == 9090)
+			return_value = 0;
+		
+		test_data = (TestData*)dbus_pending_call_get_data(pending, data1->data_slot);
+		if(test_data->num != data1->data->num || strcmp(test_data->str, data1->data->str))
+			{
+			return_value = -3;
+			return;
+			}
+
+		new_data = (TestData *)malloc(sizeof(TestData));
+		new_data->num = 234;
+		new_data->str = (char*)malloc(20);
+		strcpy(new_data->str, "Check DBus New");
+		free_data = Free_Test_Data;
+		data_free_flag = FALSE;
+		if(!dbus_pending_call_set_data(pending, data1->data_slot, new_data, free_data))
+			{
+			return_value = -4; 
+			return;
+			}
+		
+		if(!data_free_flag)
+			{
+			return_value = -5;
+			return;
+			}
+		data_free_flag = FALSE;
+				
+		pending_call_ret_val = return_value;
+		dbus_message_unref(msg1);  
+		// free the pending message handle
+		dbus_pending_call_unref(pending);
+	}
+
+void free_mem(void* data)
+	{
+	dbus_int32_t* return_value = (dbus_int32_t*)data;
+	var_arg_ret_val = *return_value;
+	free(data);
+	}
+
+// ============================ MEMBER FUNCTIONS ===============================
+ 
+int Cstif_1::handle_error(DBusError* error)
+	{
+	iLog->Log(_L8("%s"), error->name);
+	iLog->Log(_L8("%s"), error->message);
+	dbus_error_free(error);
+	return 1; 
+	} 
+
+// -----------------------------------------------------------------------------
+// Cstif_1::Delete
+// Delete here all resources allocated and opened from test methods. 
+// Called from destructor. 
+// -----------------------------------------------------------------------------
+//
+void Cstif_1::Delete() 
+    {
+
+    }
+TBool TestConnectionEqual(DBusConnection* conn1, DBusConnection* conn2)
+	{
+		return (conn1==conn2? TRUE : FALSE);
+	}
+
+// -----------------------------------------------------------------------------
+// Cstif_1::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt Cstif_1::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( "stif_Test_Names", Cstif_1::stif_Test_Names ),
+		ENTRY( "stif_Method_Call", Cstif_1::stif_Method_Call ),
+        ENTRY( "stif_N_Connections", Cstif_1::stif_N_Connections ),
+        ENTRY( "stif_Variable_Args", Cstif_1::stif_Variable_Args ),
+        ENTRY( "stif_N_Messages", Cstif_1::stif_N_Messages ),
+        ENTRY( "stif_N_Messages1", Cstif_1::stif_N_Messages1 ),
+        ENTRY( "stif_Signal", Cstif_1::stif_Signal ),
+        ENTRY( "stif_File_Send", Cstif_1::stif_File_Send ),
+        ENTRY( "stif_File_Send_Whole", Cstif_1::stif_File_Send_Whole ),
+        ENTRY( "stif_Match_Rule", Cstif_1::stif_Match_Rule ),
+        ENTRY( "stif_Sign_Test", Cstif_1::stif_Sign_Test ),
+        ENTRY( "stif_N_Separate_Connections", Cstif_1::stif_N_Separate_Connections ),
+        ENTRY( "stif_Pending_Call_Data_Slot0", Cstif_1::stif_Pending_Call_Data_Slot0),   
+        ENTRY( "stif_Time0", Cstif_1::stif_Time0),
+        ENTRY( "stif_Simultaneous_Connections", Cstif_1::stif_Simultaneous_Connections),
+        ENTRY( "stif_Daemon_Run_Time0", Cstif_1::stif_Daemon_Run_Time0)
+        
+        //ADD NEW ENTRY HERE
+        // [test cases entries] - Do not remove
+
+        }; 
+ 
+    const TInt count = sizeof( KFunctions ) / 
+                        sizeof( TStifFunctionInfo );
+
+    return RunInternalL( KFunctions, count, aItem );
+
+    }
+
+void Cstif_1::TestName(DBusConnection *connection, const char *name, int expectedSuccess, int* result)
+{
+  	DBusError error;
+  	dbus_error_init (&error);
+
+  	(void) dbus_bus_request_name (connection, name, 0, &error);
+  	if (dbus_error_is_set (&error))
+    {
+    	if (expectedSuccess)
+    	{
+    		iLog->Log(_L8("Error acquiring name '%s': %s\n"), name, error.message);
+    		*result = 1;
+    	}
+    	else
+   		{
+   			iLog->Log(_L8("Expected Error acquiring name '%s': %s\n"), name, error.message);
+   			*result = 1;
+   		}
+    	dbus_error_free (&error);
+    }
+  	else 
+    {
+    	if (!expectedSuccess)
+    	{
+    		iLog->Log(_L8("Unexpected Success acquiring name '%s'\n"), name);
+    		*result = 1;
+    	}
+    	else
+    		iLog->Log(_L8("Successfully acquired name '%s'\n"), name);
+    }
+}
+
+
+TInt Cstif_1::stif_Test_Names( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );  
+
+
+	DBusError error;
+	DBusConnection *connection;
+	int result = 0;
+	
+	dbus_error_init (&error);
+	connection = dbus_bus_get_private (DBUS_BUS_SESSION, &error);
+	if (connection == NULL)
+	  {
+	  			iLog->Log(_L8("*** Failed to open connection to system bus: %s\n%s"),  error.name, error.message);
+	    dbus_error_free (&error);
+	    return 1;
+	  }
+	
+	TestName(connection, "org.freedesktop.DBus.Test", TRUE, &result);
+	TestName(connection, "org.freedesktop.DBus.Test-2", TRUE, &result);
+	TestName(connection, "org.freedesktop.DBus.Test_2", TRUE, &result);
+	#if 0
+	TestName(connection, "Test_2", TRUE, &result);
+	#endif
+	if(result)
+		return 1;
+	
+	dbus_connection_close(connection);
+	dbus_connection_unref(connection);
+	dbus_shutdown();
+	
+	iLog->Log(KSuccess);
+	return KErrNone;
+}
+
+
+TInt Cstif_1::stif_Method_Call( CStifItemParser& aItem )
+    { 
+
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles ); 
+    
+
+    __UHEAP_MARK;
+    _LIT(KStart, "Test Start");
+
+	    DBusError error; 
+		DBusConnection* connection;
+		DBusMessage* msg;
+		DBusMessageIter args;
+		DBusMessageIter append_args;
+		//~!@#$%^&*()_  . hjgfyh34348#$!%^4567
+		char* str = "DBus Testing";
+		char* str1;
+		int i;
+		       
+		DBusPendingCall* pending; 
+		iLog->Log(KStart);
+		    
+		dbus_error_init(&error); 
+		 
+		iLog->Log(_L8("creating connection"));	
+		
+		connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+		
+		if(dbus_error_is_set(&error))
+			return handle_error(&error);
+		 
+		iLog->Log(_L8("connection created successfully"));
+		msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", NULL, "method");
+	  
+		if(msg == NULL)
+			{
+			iLog->Log(_L8("message error")); 
+			return 1;
+			}
+		iLog->Log(_L8("message created successfully"));
+	 
+		dbus_message_iter_init_append(msg, &append_args);
+		for(i=0;i<255;i++)
+		{
+			if(!dbus_message_iter_append_basic(&append_args, DBUS_TYPE_STRING, &str))
+			{
+				iLog->Log(_L8("Unable to append arguments. msg no. %d"));
+				return 1; 
+			} 
+		}	   
+
+		// send message and get a handle for a reply
+	   if (!dbus_connection_send_with_reply (connection, msg, &pending, -1)) { // -1 is default timeout
+	   		iLog->Log(_L8("message send error"));
+	   		exit(1);
+	   } 
+	   if (NULL == pending) { 
+	   		iLog->Log(_L8("pending is null"));
+	      exit(1); 
+	   } 
+	   dbus_connection_flush(connection);
+	   
+		// free message
+	   dbus_message_unref(msg);
+	  
+	   // block until we recieve a reply
+	   dbus_pending_call_block(pending);
+	
+	   // get the reply message
+	   msg = dbus_pending_call_steal_reply(pending);
+	   if (NULL == msg) {
+	   iLog->Log(_L8("Reply error"));	   		
+	      return 1;
+	   } 
+	   // free the pending message handle
+	   dbus_pending_call_unref(pending);
+		 
+		dbus_error_init (&error);
+		dbus_message_iter_init(msg, &args);
+		i=1; 
+		do{
+			dbus_message_iter_get_basic(&args, &str1);
+			iLog->Log(_L8("%d th Reply = %s"), i, str1);
+			 
+			if(strcmp(str, str1)) 
+				   {
+				   iLog->Log(_L8("Invalid reply error"));
+				   return 1;
+				   }
+			  
+			i++;
+		}while(dbus_message_iter_next(&args)); 
+	 
+	   // free reply and close connection
+	   dbus_message_unref(msg);  
+	   
+	   dbus_connection_close(connection);
+	   dbus_connection_unref(connection);
+	   dbus_shutdown();
+ 
+	   iLog->Log( KSuccess );
+	   __UHEAP_MARKEND;
+	   return KErrNone;
+    }
+
+
+// Currently 21 connections are created If tried more will failed to get connection
+TInt Cstif_1::stif_N_Connections( CStifItemParser& aItem )
+	{
+//		__UHEAP_MARK;
+	TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles ); 
+    
+
+ 		DBusConnection* connection[MAX_CONN];
+		DBusError error;
+		int cnt=0;
+		int cnt1=0;
+		
+		dbus_error_init(&error);
+		for(cnt=0;cnt<MAX_CONN;cnt++)
+		{
+			connection[cnt] = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+			if(!connection[cnt] || dbus_error_is_set(&error))
+			{
+				iLog->Log(_L8("Error_name = %s"), error.name);
+				iLog->Log(_L8("Error_msg = %s"), error.message);
+				break;
+			}
+			else
+			{
+				for(cnt1=0;cnt1<cnt;cnt1++)
+				{
+					if(TestConnectionEqual(connection[cnt], connection[cnt1]))
+					{ 
+						iLog->Log(_L8("%d and %d Connections are equal."), cnt, cnt1);
+						dbus_connection_close(connection[cnt]);
+						dbus_connection_unref(connection[cnt]);
+						break;
+					}
+				}
+				iLog->Log(_L8("Connection Success %d"), cnt);
+			}
+		} 
+		
+		for(cnt1=0;cnt1<cnt;cnt1++)
+			{
+			dbus_connection_close(connection[cnt1]);
+			dbus_connection_unref(connection[cnt1]);
+			}
+		dbus_shutdown();
+		
+		if(cnt!=MAX_CONN)
+			return 1;
+		iLog->Log(KSuccess);
+		
+//		__UHEAP_MARKEND;
+		return KErrNone;
+		
+	}
+
+
+TInt Cstif_1::stif_Variable_Args( CStifItemParser& aItem )
+	{
+	TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );  
+    
+
+		_LIT(KOOM, "Out Of Memory");
+		DBusConnection* connection;
+		DBusError error;
+		DBusMessage* msg;
+		DBusMessageIter append_iter;
+		DBusMessageIter sub_iter;
+		DBusPendingCall* pending;
+		
+		dbus_bool_t arg_bool = TRUE;
+		dbus_int16_t arg_int16 = -16;
+		dbus_int32_t arg_int32 = -32;
+		dbus_int64_t arg_int64 = -64;
+		dbus_uint16_t arg_uint16 = 16;
+		dbus_uint32_t arg_uint32 = 32;
+		dbus_uint64_t arg_uint64 = 64;
+		double arg_double = 12.34567;
+		char* arg_str = "DBus Testing";
+		const dbus_int32_t array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
+		const dbus_int32_t *arr = array;
+		
+		DBusPendingCallNotifyFunction reply_handler;
+		DBusFreeFunction free_data;
+		dbus_int32_t* return_value;
+		
+		dbus_error_init(&error); 
+
+		connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+		if(!connection)
+			return handle_error(&error);
+		
+		msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", "test.Method.Call", "variable_args_method");
+		if(msg == NULL)
+			{ 
+			iLog->Log(_L8("message error"));
+			return 1;
+			}
+		iLog->Log(_L8("message created successfully"));
+
+		dbus_message_iter_init_append(msg, &append_iter);
+		
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_BOOLEAN, &arg_bool))
+			{ 
+			iLog->Log(KOOM);
+			return 1; 
+			} 
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_INT16, &arg_int16))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_INT32, &arg_int32))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_INT64, &arg_int64))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_UINT16, &arg_uint16))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_UINT32, &arg_uint32))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_UINT64, &arg_uint64))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_DOUBLE, &arg_double))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+		
+		if(!dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_STRING, &arg_str))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}
+	
+		// For Array	
+		if(!dbus_message_iter_open_container(&append_iter, DBUS_TYPE_ARRAY, DBUS_TYPE_INT32_AS_STRING, &sub_iter))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}	 
+		if(!dbus_message_iter_append_fixed_array(&sub_iter, DBUS_TYPE_INT32, &arr,  10))
+			{ 
+			iLog->Log(KOOM);
+			return 1;  
+			}
+		dbus_message_iter_close_container(&append_iter, &sub_iter);
+		
+		
+		//For Structure	
+		if(!dbus_message_iter_open_container(&append_iter, DBUS_TYPE_STRUCT, NULL, &sub_iter))
+			{
+			iLog->Log(KOOM);
+			return 1;
+			}	 
+		if(!dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_INT32, &arg_int32))
+			{ 
+			iLog->Log(KOOM);
+			return 1;  
+			}
+		if(!dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_STRING, &arg_str))
+			{ 
+			iLog->Log(KOOM);
+			return 1;  
+			} 
+		if(!dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_DOUBLE, &arg_double))
+			{ 
+			iLog->Log(KOOM);
+			return 1;  
+			}
+		dbus_message_iter_close_container(&append_iter, &sub_iter);
+		
+		
+		  
+		// send message and get a handle for a reply
+		   if (!dbus_connection_send_with_reply (connection, msg, &pending, -1)) { // -1 is default timeout
+		   		iLog->Log(_L8("message send error"));
+		   		exit(1);
+		   } 
+		   if (NULL == pending) {
+		   		iLog->Log(_L8("pending is null"));
+		      exit(1);
+		   }
+		   dbus_connection_flush(connection);
+		   
+			// free message
+		   dbus_message_unref(msg); 
+		  
+		   reply_handler = handle_reply_variable_args;
+		   return_value = (dbus_int32_t*)malloc(sizeof(dbus_int32_t));
+		   free_data = free_mem;
+		   dbus_pending_call_set_notify(pending, reply_handler, return_value, free_data);
+		   
+		   
+		   // block until we recieve a reply
+		   dbus_pending_call_block(pending); 
+		   
+			iLog->Log(_L8("Reply = %d"), var_arg_ret_val);
+			switch(var_arg_ret_val)
+			{
+				case 0:
+					break;
+				case -2:
+					iLog->Log(_L8("Error while stealing reply from pending call"));
+					return 1;
+				case -3:
+					iLog->Log(_L8("free_data function not called."));
+					return 1;
+				default:
+					iLog->Log(_L8("Undefined return value"));
+					return 1;
+			}
+				
+			dbus_connection_close(connection);
+			dbus_connection_unref(connection);
+			dbus_shutdown();
+		
+			iLog->Log( KSuccess );
+			return KErrNone;
+	}
+  
+
+static void* send_msg(void* data)
+{
+	threadData* thrData = (threadData*)data;
+	
+	pthread_mutex_lock(&thrData->mutex);
+	 
+	//static int cnt = 1;
+	dbus_int32_t no = 5;
+	DBusPendingCall* pending;
+	DBusMessage* msg1;
+	DBusMessage* msg;
+	DBusError error; 
+	
+	msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", "test.Method.Call", "simple");
+	
+	dbus_message_append_args(msg, DBUS_TYPE_INT32, &no, DBUS_TYPE_INVALID);
+	 
+	pthread_cond_wait(&thrData->cond,  &thrData->mutex);
+	 
+	// send message and get a handle for a reply
+	   if (!dbus_connection_send_with_reply (thrData->connection, msg, &pending, -1)) { // -1 is default timeout
+	   thrData->ret = 2;
+	   }   
+	   
+	   if (NULL == pending) {
+	   thrData->ret = 2;
+	   } 
+	   dbus_connection_flush(thrData->connection);
+	   
+		// free message
+	   dbus_message_unref(msg);   
+	  
+	   // block until we recieve a reply
+	   dbus_pending_call_block(pending);
+	
+	   // get the reply message
+	   msg1 = dbus_pending_call_steal_reply(pending);
+	   if (NULL == msg1) {
+	   thrData->ret = 2;
+	
+	   }  
+	   // free the pending message handle
+	   dbus_pending_call_unref(pending);
+		 
+	   dbus_error_init(&error);
+	   dbus_message_get_args(msg1, &error, DBUS_TYPE_INT32, &no, DBUS_TYPE_INVALID);
+	   
+	   FILE* fp = fopen("C:\\new.txt", "a+");
+	   fprintf(fp, "%d\n", no);
+	   fclose(fp);
+	    
+	   if(no == 9090)
+		   {
+		   thrData->ret++;
+		   }
+	   
+	 	 
+	   // free reply and close connection
+	   dbus_message_unref(msg1); 
+	   pthread_mutex_unlock(&thrData->mutex); 
+	   return NULL;
+}
+ 
+
+TInt Cstif_1::stif_N_Messages( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );  
+
+
+	DBusError error;
+	char err[80];
+	int cnt;
+	
+	pthread_t thread[MAX_THREAD];
+	int thrVal[MAX_THREAD]={0};
+	void* thrValPtr[MAX_THREAD];
+	
+	for(cnt=0; cnt<MAX_THREAD; cnt++)
+		thrValPtr[cnt] = (void*)&thrVal[cnt];
+
+	threadData thrData;
+	 
+	dbus_error_init(&error);
+	thrData.connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+	if(!thrData.connection || dbus_error_is_set(&error))
+		return handle_error(&error);
+	
+	pthread_mutex_init(&thrData.mutex, NULL);
+ 	pthread_cond_init(&thrData.cond, NULL);
+ 	thrData.ret = 0;
+	
+ 	for(cnt=0; cnt<MAX_THREAD; cnt++)
+ 		pthread_create(&thread[cnt], NULL, &send_msg, &thrData);
+	 
+	sleep(1);  
+	
+	pthread_cond_broadcast(&thrData.cond);
+	
+	for(cnt=0; cnt<MAX_THREAD; cnt++)
+		pthread_join(thread[cnt], &thrValPtr[cnt]); 
+	 
+	if(thrData.ret != MAX_THREAD)
+	{ 
+		sprintf(err, "No. of threads crashed %d", (MAX_THREAD - thrData.ret));
+		iLog->Log(_L8(err));
+		return 1;
+	}
+	
+	dbus_connection_close(thrData.connection);
+	dbus_connection_unref(thrData.connection);
+	dbus_shutdown();
+	
+	iLog->Log(KSuccess); 
+	return KErrNone;
+}
+
+static void* send_msg1(void* data)
+{
+	DBusConnection* connection;
+	DBusError error;
+	//static int cnt = 1;
+	dbus_int32_t no = 5;
+	DBusPendingCall* pending;
+	DBusMessage* msg1;
+	DBusMessage* msg;
+	int data_slot = *(int*)data;
+
+	dbus_error_init(&error);
+	connection = dbus_bus_get(DBUS_BUS_SESSION, &error);
+	
+	threadData1* thrData = (threadData1*)dbus_connection_get_data(connection, data_slot);
+	if(!thrData)
+		return NULL;
+	
+	pthread_mutex_lock(&thrData->mutex);
+	
+	msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", "test.Method.Call", "simple");
+	
+	dbus_message_append_args(msg, DBUS_TYPE_INT32, &no, DBUS_TYPE_INVALID);
+	 
+	pthread_cond_wait(&thrData->cond,  &thrData->mutex);
+	 
+	// send message and get a handle for a reply
+	   if (!dbus_connection_send_with_reply (connection, msg, &pending, -1)) { // -1 is default timeout
+	   thrData->ret = 2;
+//	   		exit(1);
+	   }   
+	   if (NULL == pending) {
+	   thrData->ret = 2;
+//	      exit(1);
+	   } 
+	   dbus_connection_flush(connection);
+	   
+		// free message
+	   dbus_message_unref(msg);   
+	  
+	   // block until we recieve a reply
+	   dbus_pending_call_block(pending);
+	
+	   // get the reply message
+	   msg1 = dbus_pending_call_steal_reply(pending);
+	   if (NULL == msg1) {
+	   thrData->ret = 2;
+	
+	   }  
+	   // free the pending message handle
+	   dbus_pending_call_unref(pending);
+		 
+	  
+	   dbus_message_get_args(msg1, &error, DBUS_TYPE_INT32, &no, DBUS_TYPE_INVALID);
+	   
+	   FILE* fp = fopen("C:\\new.txt", "a+");
+	   fprintf(fp, "%d\n", no);
+	   fclose(fp);
+	    
+	   if(no == 9090)
+		   {
+		   thrData->ret++;
+		   }
+	   
+	 	 
+	   // free reply and close connection
+	   dbus_message_unref(msg1); 
+	   dbus_connection_unref(connection);
+	   pthread_mutex_unlock(&thrData->mutex); 
+	   return NULL;
+}
+
+TInt Cstif_1::stif_N_Messages1( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );  
+
+
+	DBusConnection* connection;
+	DBusError error;
+	int cnt;
+	int data_slot = -1;
+	
+	pthread_t thread[MAX_THREAD];
+	int thrVal[MAX_THREAD]={0};
+	void* thrValPtr[MAX_THREAD];
+	
+	for(cnt=0; cnt<MAX_THREAD; cnt++)
+		thrValPtr[cnt] = (void*)&thrVal[cnt];
+
+	threadData1 thrData;
+	 
+	dbus_error_init(&error);
+	connection = dbus_bus_get(DBUS_BUS_SESSION, &error);
+	if(!connection || dbus_error_is_set(&error))
+		return handle_error(&error);
+	
+	pthread_mutex_init(&thrData.mutex, NULL);
+	pthread_cond_init(&thrData.cond, NULL);
+ 	thrData.ret = 0;
+ 	
+ 	dbus_connection_allocate_data_slot(&data_slot);
+	dbus_connection_set_data(connection, data_slot, &thrData, NULL);
+ 	
+ 	dbus_threads_init_default();
+
+ 	for(cnt=0; cnt<MAX_THREAD; cnt++)
+ 		pthread_create(&thread[cnt], NULL, &send_msg1, &data_slot);
+	 
+	sleep(1);  
+	
+	pthread_cond_broadcast(&thrData.cond);
+	
+	for(cnt=0; cnt<MAX_THREAD; cnt++)
+		pthread_join(thread[cnt], &thrValPtr[cnt]); 
+	 
+	if(thrData.ret != MAX_THREAD)
+	{ 
+		iLog->Log(_L8("No. of threads crashed %d"), (MAX_THREAD - thrData.ret));
+		return 1;
+	}
+	 
+	dbus_connection_unref(connection);
+	
+	iLog->Log(KSuccess); 
+	return KErrNone;
+}
+
+
+TInt Cstif_1::stif_Signal( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );
+
+
+	DBusConnection* connection;
+	DBusError error;
+	DBusMessage* msg;
+	//dbus_int32_t arg_int32 = 1010;
+	DBusObjectPathVTable vtable =
+	{
+	NULL,NULL,NULL	
+	};
+	char* str = "DBus Testing. hjgfyh34348#$!%^45678901730952698376092869876DBus Testing. hjgfyh34348#$!%^~!@#$%^&*()_+`-=<>?:{},./;'[]45678901730952698376092869876";
+	FILE* fp[MAX_SIGNALS]={NULL};
+
+	int cnt=0;
+	char exe_param[100];
+	char names[][40]={"test.Signal.Send3 ",
+					"test.Signal.Send4 ",
+					"test.Signal.Send5 "};
+	char obj_path[][40]={"/Test/Signal/Object3",
+					"/Test/Signal/Object4",
+					"/Test/Signal/Object5"};
+	
+	for(cnt=0;cnt< MAX_SIGNALS;cnt++)
+	{
+#if defined(__WINSCW__) || defined(__WINS__)
+		strcpy(exe_param,"Z:\\sys\\bin\\Simple_Server.exe ");
+#else
+		strcpy(exe_param,"C:\\sys\\bin\\Simple_Server.exe ");
+#endif
+		strcat(exe_param, names[cnt]);
+		strcat(exe_param, obj_path[cnt]);
+		fp[cnt] = popen(exe_param, "r");
+			if(!fp[cnt])
+				{
+				iLog->Log(_L8("fp %d is NULL"), cnt); 
+				return 1;
+				}
+			//User::After(3000000);  
+	}
+
+	//User::After(3000000);  
+	 	
+	dbus_error_init(&error);
+	connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+	 
+	if(!connection || dbus_error_is_set(&error))
+		return handle_error(&error);
+	  
+	msg = dbus_message_new_signal("/Test/Signal/Object", "Test.Signal.Send", "first");
+	
+	sleep(2);
+	if(!msg) 
+	{
+		iLog->Log(_L8("msg is NULL"));
+		return 1;
+	}
+	 
+	if(!dbus_message_append_args(msg, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID))
+	{
+		iLog->Log(_L8("Fail to append args"));
+		return 1;
+	}
+	
+	dbus_connection_send(connection, msg, NULL);
+	dbus_connection_flush(connection);
+	 
+	dbus_message_unref(msg);
+	
+	str = "";
+	iLog->Log(_L8("First part over"));
+	
+	dbus_bus_add_match(connection, "type='signal',interface='Test.Signal.Send1'",&error);
+	
+	if(dbus_error_is_set(&error))
+		return handle_error(&error);
+	
+	iLog->Log(_L8("Registering path"));
+	if(!dbus_connection_register_object_path (connection, "/Test/Signal/Object1", &vtable, NULL))
+	{ 
+		iLog->Log(_L8("Registering path fail"));
+		return 1;
+	}
+	iLog->Log(_L8("Requesting name"));	
+	if(!dbus_bus_request_name (connection, "test.Signal.Send1", DBUS_NAME_FLAG_ALLOW_REPLACEMENT, &error) == (unsigned int)-1)
+	{
+		iLog->Log(_L8("Requesting name fail"));	
+		return 1;
+	}
+	 
+	iLog->Log(_L8("Starting while loop"));
+	cnt=0;
+	while(TRUE)  
+	{	
+		dbus_connection_read_write(connection, 0);
+		
+		msg = dbus_connection_pop_message(connection);
+			
+		if(msg == NULL)
+		{
+			continue; 
+		} 
+		
+		iLog->Log(_L8("Message Detected"));
+
+		if(dbus_message_is_signal(msg, "Test.Signal.Send1", "second"))
+		{
+			if(!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID))
+				{
+					iLog->Log(_L8("Error while retriving arguments :: %s"), error.name);
+					dbus_error_free(&error);
+					return 1;
+				}  
+			iLog->Log(_L8("Got %d MSG : %s"), cnt, str);
+			cnt++;
+			if(cnt==MAX_SIGNALS)
+				break; 
+		}  
+
+		dbus_message_unref(msg);
+	}
+		 
+	dbus_connection_close(connection);
+	dbus_connection_unref(connection);
+	dbus_shutdown();
+	for(cnt=0;cnt<MAX_SIGNALS;cnt++)
+		if(fp[cnt])
+			pclose(fp[cnt]);
+
+	iLog->Log(KSuccess); 
+	return KErrNone;
+}
+
+
+TInt Cstif_1::stif_File_Send( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles ); 
+
+
+	//_LIT(KOOM, "Out Of Memory");
+	FILE* fp;
+	unsigned char arr[200];
+	const unsigned char* p_arr = arr;
+	DBusError error;
+	DBusConnection* connection;
+	DBusMessage* msg;
+	int num;
+	
+	dbus_error_init(&error); 
+	
+	connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+	
+	if(!connection || dbus_error_is_set(&error))
+		return handle_error(&error);
+	  
+	fp = fopen("c:\\bunbask1.jpg", "r"); 
+	if(!fp) 
+	{
+		iLog->Log(_L8("Not able to open File"));
+		return 1;
+	}  
+	int i=0; 
+	while (!feof(fp)) 
+    {   
+        num = fread(&arr, sizeof(unsigned char), 200, fp);
+        i++;  
+        
+        msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", "test.Method.Call", "file_send");
+        if(!msg)
+        { 
+        	iLog->Log(_L8("msg is NULL."));
+        	return 1;
+        } 
+         
+        iLog->Log(_L8("msg is created")); 
+        
+        iLog->Log(_L8("num = %d"), num); 
+        if(!dbus_message_append_args(msg, DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &p_arr, num, DBUS_TYPE_INVALID))
+        { 
+        	iLog->Log(_L8("Fail to append ARRAY."));
+        	return 1;
+        }
+        
+    	iLog->Log(_L8("Array Appended")); 
+    	dbus_connection_send(connection, msg, NULL);   
+    	dbus_connection_flush(connection);
+    	
+    	dbus_message_unref(msg);
+    	msg=NULL;
+    } 
+	if(fp)
+		fclose(fp);
+	
+	dbus_connection_close(connection);
+	dbus_connection_unref(connection);
+	dbus_shutdown();
+	return KErrNone;
+}
+
+TInt Cstif_1::stif_File_Send_Whole( CStifItemParser& aItem )
+	{
+	TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );
+    
+    
+    FILE* fp;
+	int ret =0;
+	
+#if defined(__WINSCW__) || defined(__WINS__)
+	fp = popen("Z:\\sys\\bin\\file_send_whole.exe", "r");
+#else
+	fp = popen("C:\\sys\\bin\\file_send_whole.exe", "r");
+#endif
+	if(!fp)
+	{
+		iLog->Log(_L8("Failed to open file_send_whole.exe"));
+		return 1;
+	}
+	
+	ret = pclose(fp);	
+	if(ret)
+		{
+		iLog->Log(_L8("Test Fail"));
+		return 1;
+		}
+	iLog->Log(KSuccess);
+	return KErrNone;
+	}
+
+
+int Cstif_1::send_message(DBusConnection* connection, char* path, char* iface, char* member)
+{
+	DBusMessage* msg;
+	char* str = "DBus Testing.";
+	
+	msg = dbus_message_new_signal(path, iface, member);
+	
+	if(!msg) 
+	{ 
+		iLog->Log(_L8("msg is NULL"));
+		return 1;
+	}
+	 
+	if(!dbus_message_append_args(msg, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID))
+	{
+		iLog->Log(_L8("Fail to append args"));
+		return 1;
+	}
+	 
+	dbus_connection_send(connection, msg, NULL);
+	dbus_connection_flush(connection);	 
+	dbus_message_unref(msg);
+	return 0;
+}
+
+
+TInt Cstif_1::stif_Match_Rule( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );  
+
+
+	DBusConnection* connection;
+	DBusError error;
+	DBusMessage* msg;
+	char* str;
+	DBusObjectPathVTable vtable ={
+  NULL,
+  NULL,
+  NULL,
+	};
+	char buf[180] = ""; 
+	FILE* fp = NULL;
+
+	const char* fifopath = "C:\\mkfifo1.file";
+	int err;
+	err = mkfifo (fifopath, 0666);
+	   if(err != 0)
+	   {
+	       // probably file already exists, delete the file
+	       unlink(fifopath); 
+	       // try once more..
+	       err = mkfifo (fifopath, 0666);
+	       if(err != 0)
+	       {
+	            return 1;
+	       }
+	   }
+
+#if defined(__WINSCW__) || defined(__WINS__)
+	fp = popen("Z:\\sys\\bin\\match_rule_server.exe", "r");
+#else
+	fp = popen("C:\\sys\\bin\\match_rule_server.exe", "r");
+#endif
+	if(!fp)
+		iLog->Log(_L8("fp is NULL")); 
+
+	
+	int fd = open(fifopath, O_RDONLY);
+	if(fd > 0)
+	{
+		err = read (fd, buf, 20);  
+		close(fd);
+	}
+	else
+		{
+		iLog->Log(_L8("Error in FIFO open()."));
+		return 1;
+		}
+	unlink(fifopath);
+	if(strcmp("done", buf))
+		{
+		iLog->Log(_L8("done is not returned from server."));
+		return 1;
+		}
+	
+	dbus_error_init(&error);
+	connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+	 
+	if(!connection || dbus_error_is_set(&error))
+		return handle_error(&error);
+	  
+	send_message(connection, "/Test/Signal/Object", "Test.Signal.Send2", "first");
+	
+	iLog->Log(_L8("First part over"));
+	
+	dbus_bus_add_match(connection, "type='signal',interface='Test.Signal.Send3'",&error);
+	
+	if(dbus_error_is_set(&error))
+		return handle_error(&error);
+	
+	iLog->Log(_L8("Registering path"));
+	if(!dbus_connection_register_object_path (connection, "/Test/Signal/Object1", &vtable, NULL))
+	{ 
+		iLog->Log(_L8("Registering path fail"));
+		return 1;
+	}
+	iLog->Log(_L8("Requesting name"));	
+	
+	if(!dbus_bus_request_name (connection, "test.Signal.Send1", DBUS_NAME_FLAG_ALLOW_REPLACEMENT, &error) == (unsigned int)-1)
+	{
+		iLog->Log(_L8("Requesting name fail"));	
+		return 1;
+	}
+	
+	iLog->Log(_L8("Starting while loop"));
+	while(TRUE)  
+	{	
+		dbus_connection_read_write(connection, 0);
+		
+		msg = dbus_connection_pop_message(connection);
+			
+		if(msg == NULL)
+		{
+			continue; 
+		} 
+		
+		iLog->Log(_L8("Message Detected"));
+	
+		if(dbus_message_is_signal(msg, "Test.Signal.Send3", "second"))
+		{
+			if(!dbus_message_get_args(msg, &error, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID))
+				{
+					dbus_error_free(&error);
+					return 1;
+				}  
+			iLog->Log(_L8("Got MSG : %s"),  str);
+			break; 
+		}    
+	
+		dbus_message_unref(msg); 
+	} 
+	
+//	sleep(2);
+	send_message(connection, "/Test/Signal/Object", "Test.Signal.Send2", "third");
+	send_message(connection, "/Test/Signal/Object", "Test.Signal.Send2", "first");	
+	send_message(connection, "/Test/Signal/Object", "Test.Signal.Send2", "third");
+
+	while(TRUE)
+	{
+		dbus_connection_read_write(connection, 0);
+		msg = dbus_connection_pop_message(connection);
+		if(!msg)
+			continue;
+		if(!dbus_message_has_destination(msg, "test.Signal.Send1"))
+		{
+			iLog->Log(_L8("dbus_message_has_destination() failed to check Destination."));
+			return 1;
+		}
+		
+		if(dbus_message_get_type(msg) == DBUS_MESSAGE_TYPE_ERROR)
+		{
+			iLog->Log(_L8("Error is returned."));
+			if(!dbus_message_has_member(msg, "error"))
+				iLog->Log(_L8("dbus_message_has_destination() failed to check Destination."));
+			return 1;
+		}
+		else if(dbus_message_get_type(msg) == DBUS_MESSAGE_TYPE_METHOD_CALL)
+			{
+			iLog->Log(_L8("Method call is returned."));
+			if(!dbus_message_has_member(msg, "success"))
+			{
+				iLog->Log(_L8("dbus_message_has_destination() failed to check Destination."));
+				return 1;
+			}
+			break; 
+			}
+		
+	}
+	dbus_connection_close(connection);
+	dbus_connection_unref(connection);
+	dbus_shutdown();
+	if(fp) 
+		pclose(fp);
+	
+	iLog->Log(KSuccess);  
+	return KErrNone; 
+}
+
+TInt Cstif_1::stif_Sign_Test( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles ); 
+
+
+	DBusConnection* connection;
+	DBusError error;
+	DBusMessage* msg;
+	DBusMessage* reply = NULL;
+	dbus_int32_t int_32 = -32;
+	double d = 1.1234;
+	char* str = "DBus Testing";
+	const char* sign;
+	const char* sub_sign;
+	const char* iter_sign;
+	const char* iter_sign1;
+	dbus_int32_t type;
+	dbus_int32_t arr[] = {0,1,2,3,4,5,6,7,8,9};
+	dbus_int32_t* v_arr = arr;
+	DBusMessageIter iter;
+	DBusMessageIter sub_iter;
+	DBusMessageIter sub_iter1;
+	struct SignTest
+	{
+		int num1;
+		int num2;
+		int num3;
+	}st;
+	
+	dbus_error_init(&error);
+	connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+	if(!connection || dbus_error_is_set(&error))
+		return handle_error(&error);
+	
+	msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", NULL, "sign_test");
+	if(!msg)
+	{
+		iLog->Log(_L8("msg is NULL"));
+		return 1;
+	}
+	
+	st.num1 = 100;
+	st.num2 = 200;
+	st.num3 = 300;
+	
+	dbus_message_iter_init_append(msg, &iter);
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_INT32, &int_32);
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &str);
+	dbus_message_iter_open_container(&iter, DBUS_TYPE_STRUCT, NULL, &sub_iter);
+	dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_INT32, &st.num1);
+	dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_INT32, &st.num2);
+	dbus_message_iter_append_basic(&sub_iter, DBUS_TYPE_INT32, &st.num3);
+	dbus_message_iter_close_container(&iter, &sub_iter);
+	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, DBUS_TYPE_INT32_AS_STRING, &sub_iter1);
+	dbus_message_iter_append_fixed_array(&sub_iter1, DBUS_TYPE_INT32, &v_arr, 10);
+	dbus_message_iter_close_container(&iter, &sub_iter1);
+	dbus_message_iter_append_basic(&iter, DBUS_TYPE_DOUBLE, &d);
+	
+	reply = dbus_connection_send_with_reply_and_block(connection, msg, 10000, &error);
+	if(!reply)
+		return handle_error(&error);
+	
+	if(!dbus_message_get_args(reply, &error, DBUS_TYPE_SIGNATURE, &sign, DBUS_TYPE_SIGNATURE, &sub_sign, DBUS_TYPE_INT32, &type, DBUS_TYPE_SIGNATURE, &iter_sign, DBUS_TYPE_SIGNATURE, &iter_sign1, DBUS_TYPE_INVALID))
+		return handle_error(&error);
+
+	iLog->Log(_L8("Signature :: %s\n\tSubSignature :: %s\n\tType :: %c\n\tMessageIterSignature :: %s\n\tMessageIterSignature1 :: %s"), sign, sub_sign, type, iter_sign, iter_sign1);
+	if(!dbus_message_has_signature(msg, sign))
+	{
+		iLog->Log(_L8("Signature returned is not correct."));
+		return 1;
+	}
+	if(strcmp("i", iter_sign))
+	{
+		iLog->Log(_L8("Signature returned is not correct."));
+		return 1;
+	}
+	if(strcmp("(iii)", sub_sign))
+	{
+		iLog->Log(_L8("SubSignature returned is not correct."));
+		return 1;
+	}
+	if(strcmp("(iii)", iter_sign1))
+	{
+		iLog->Log(_L8("SubSignature returned is not correct."));
+		return 1;
+	}
+	if('i' != type)
+	{
+		iLog->Log(_L8("type returned is not correct"));
+		return 1;
+	}
+	
+	dbus_message_unref(msg);
+	dbus_message_unref(reply);
+	
+	dbus_connection_close(connection);
+	dbus_connection_unref(connection);
+	dbus_shutdown();
+	
+	iLog->Log(KSuccess);  
+	return KErrNone; 
+}
+
+
+
+TInt Cstif_1::stif_N_Separate_Connections( CStifItemParser& aItem )
+{
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles ); 
+
+	const char* fifopath = "C:\\mkfifo.file";
+	int cnt =0;
+	int err =0;
+	int fd;
+	char buf[20] = {NULL};
+	pid_t pid;
+	
+	err = mkfifo (fifopath, 0666);
+	   if(err != 0)
+	   {
+	       // probably file already exists, delete the file
+	       unlink(fifopath); 
+	       // try once more..
+	       err = mkfifo (fifopath, 0666);
+	       if(err != 0)
+	       {
+	            return 1;
+	       }
+	   }
+	
+	for(cnt=0; cnt<MAX_CONN_EXE; cnt++)
+	{
+#if defined(__WINSCW__) || defined(__WINS__)
+		posix_spawn(&pid, "Z:\\sys\\bin\\private_connection.exe", NULL, NULL, NULL, NULL);
+#else
+		posix_spawn(&pid, "C:\\sys\\bin\\private_connection.exe", NULL, NULL, NULL, NULL);
+#endif
+		fd = open(fifopath, O_RDONLY);
+		if(fd > 0)
+		{
+			err = read (fd, buf, 20);  
+			close(fd);
+			iLog->Log(_L8("%d :: %s"), cnt, buf);
+			if(!strcmp("Error Occured", buf))
+				{
+				iLog->Log(_L8("Error at %d EXE"), cnt);
+				return 1;
+				}
+		}
+	} 
+	
+	unlink(fifopath);
+	
+	return KErrNone;
+}
+
+TInt Cstif_1::stif_Pending_Call_Data_Slot0( CStifItemParser& aItem )
+	{
+	TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );
+    
+
+		DBusConnection* connection;
+		DBusError error;
+		DBusMessage* msg;
+		DBusPendingCall* pending;
+		dbus_int32_t no;
+		int data_slot = -1;
+		TestData* data;
+		TestData1 data1;
+		DBusFreeFunction free_data;
+		
+		DBusPendingCallNotifyFunction reply_handler;
+			
+		dbus_error_init(&error);
+		
+		connection = dbus_bus_get_private(DBUS_BUS_SESSION, &error);
+		if(!connection || dbus_error_is_set(&error))
+			handle_error(&error);
+		
+		msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", "test.Method.Call", "simple");
+		if(!msg)
+		{
+			iLog->Log(_L8("Failed to creat Messsage"));
+			return 1;
+		}
+		
+		dbus_message_append_args(msg, DBUS_TYPE_INT32, &no, DBUS_TYPE_INVALID);
+		dbus_connection_send_with_reply(connection, msg, &pending, -1);
+		if(!pending)
+		{
+			iLog->Log(_L8("pending is NULL"));
+			return 1;
+		}
+		
+		if(!dbus_pending_call_allocate_data_slot(&data_slot))
+		{
+			iLog->Log(_L8("Not able to allocate data slot"));
+			return 1;
+		}
+		
+		data = (TestData*)malloc(sizeof(TestData));
+		data->num = 123;
+		data->str = (char*)malloc(20);
+		strcpy(data->str, "Check DBus");
+		free_data = Free_Test_Data;
+		data_free_flag = FALSE;
+		data1.data = data;
+		data1.data_slot = data_slot;
+		if(!dbus_pending_call_set_data(pending, data_slot, data, free_data))
+			{
+				iLog->Log(KOOM);
+				return 1; 
+			}
+		
+		dbus_connection_flush(connection);
+		
+		reply_handler = handle_reply_pending_call_data_slot0;
+	    if(!dbus_pending_call_set_notify(pending, reply_handler, &data1, NULL))
+	    	{
+	    	iLog->Log(_L8("Failed to set handler for pending call"));
+	    	return 1;
+	    	}
+		
+		dbus_pending_call_block(pending);
+		dbus_message_unref(msg);		
+		
+		iLog->Log(_L8("Reply = %d"), pending_call_ret_val);
+		switch(pending_call_ret_val)
+		{
+			case 0:
+				break;
+			case -2:
+				iLog->Log(_L8("Error while stealing reply from pending call."));
+				return 1;
+			case -3:
+				iLog->Log(_L8("Not able to retrive data from pending call."));
+				return 1;
+			case -4:
+				iLog->Log(_L8("Not able to Reset data for pending call."));
+				return 1;
+			case -5:
+				iLog->Log(_L8("Free Function is not called."));
+				return 1;
+			default:
+				iLog->Log(_L8("Notify function is not called"));
+				return 1;
+		}
+		if(!data_free_flag)
+			{
+			iLog->Log(_L8("Free Function is not called."));
+			return 1;
+			}
+		
+		dbus_connection_close(connection);
+		dbus_connection_unref(connection);
+		dbus_shutdown();
+		iLog->Log(KSuccess);
+		return KErrNone;
+	}
+
+
+int Cstif_1::send_file(DBusConnection* connection, char* file_name)
+{
+	FILE* fp;
+	unsigned char arr[200];
+	unsigned char* data;
+	//const unsigned char* p_arr = arr;
+	DBusError error;
+	DBusMessage* msg;
+	DBusMessage* reply;
+	DBusMessageIter append_iter;
+	DBusMessageIter sub_iter;
+	int num=1;
+	int size=0;
+	TTime NowTime;
+	TTime NowTime1;
+	TTimeIntervalMicroSeconds micro_sec;
+	TInt64 diff_int64;
+	dbus_error_init(&error);
+	
+	fp = fopen(file_name, "r"); 
+	if(!fp) 
+	{
+		iLog->Log(_L8("Not able to open File"));
+		return 1;
+	}  
+	
+	while(num)
+	{
+		num = fread(&arr, sizeof(unsigned char), 200, fp);
+		size = size + num;
+	}
+	if(fp)
+		fclose(fp);
+	
+	fp = NULL;
+	fp = fopen(file_name, "r");
+	if(!fp) 
+		{
+			iLog->Log(_L8("Not able to open File"));
+			return 1;
+		}  
+	data = (unsigned char*)dbus_malloc(size);
+	if(!data)
+		{
+		iLog->Log(_L8("Errno %d"), errno);
+		iLog->Log(_L8("data is NULL for %s of size %d."), file_name, size);
+		return 1;
+		}
+	if(size != fread(data, sizeof(unsigned char), size, fp))
+	{
+		iLog->Log(_L8("Error while reading file"));
+		return 1; 
+	}
+
+	if(fp)
+		fclose(fp);
+	msg = dbus_message_new_method_call("Test.Method.Call", "/Test/Method/Object", "test.Method.Call", "file_send_time");
+	if(!msg)
+	{ 
+		iLog->Log(_L8("msg is NULL."));
+		return 1;
+	} 
+	 
+	iLog->Log(_L8("msg is created")); 
+	  
+	dbus_message_iter_init_append(msg, &append_iter);
+	dbus_message_iter_append_basic(&append_iter, DBUS_TYPE_STRING, &file_name);
+	
+	// For Array	
+	if(!dbus_message_iter_open_container(&append_iter, DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE_AS_STRING, &sub_iter))
+		{
+		iLog->Log(KOOM);
+		return 1;
+		}	 
+	if(!dbus_message_iter_append_fixed_array(&sub_iter, DBUS_TYPE_BYTE, &data, size))
+		{ 
+		iLog->Log(KOOM);
+		return 1;  
+		}   
+	dbus_message_iter_close_container(&append_iter, &sub_iter);
+	
+	iLog->Log(_L8("Array Appended"));
+	NowTime.HomeTime();
+	reply = dbus_connection_send_with_reply_and_block(connection, msg, 15000, &error);
+	NowTime1.HomeTime();
+	if(!reply)
+	{
+		iLog->Log(_L8("Failed to get reply for %s of size %d"), file_name, size);
+		iLog->Log(_L8("Error Message :: %s"), error.message);
+		return 1;
+	}
+	
+	micro_sec = NowTime1.MicroSecondsFrom(NowTime);
+	diff_int64 = micro_sec.Int64();
+	iLog->Log(_L8("Time to send %s file of size %d is %d"), file_name, size, diff_int64);
+	dbus_free(data);
+	
+	return 0;
+}
+
+TInt Cstif_1::stif_Time0( CStifItemParser& aItem )
+{
+	TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+	TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );  
+
+	DBusError error;
+	DBusConnection *connection;
+	
+	TTime NowTime;
+	TTime NowTime1;
+	TTimeIntervalMicroSeconds micro_sec;
+	TInt64 diff_int64;
+	
+	dbus_error_init (&error);
+	NowTime.HomeTime();
+	connection = dbus_bus_get_private (DBUS_BUS_SESSION, &error);
+	NowTime1.HomeTime();
+	if (connection == NULL)
+	  {
+	  			iLog->Log(_L8("*** Failed to open connection to system bus: %s\n%s"),  error.name, error.message);
+	    dbus_error_free (&error);
+	    return 1;
+	  }
+	micro_sec = NowTime1.MicroSecondsFrom(NowTime);
+	diff_int64 = micro_sec.Int64();
+	iLog->Log(_L8("Time to get 1st time connection is %d"), diff_int64);
+	
+	if(send_file(connection, "c:\\inbox1.jpg"))
+		return 1;
+	sleep(1);
+		
+	if(send_file(connection, "c:\\bunbask1.jpg"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\sound_clip.amr"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\inbox.jpg"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\sound_clip1.amr"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\sound_clip2.amr"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\sound_clip4.amr"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\sound_clip5.amr"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\sound_clip6.amr"))
+		return 1;
+	sleep(1);
+	
+	if(send_file(connection, "c:\\sound_clip3.amr"))
+		return 1;
+	
+	dbus_connection_close(connection);
+	dbus_connection_unref(connection);
+	dbus_shutdown();
+	iLog->Log(KSuccess);
+	return 0;
+}
+
+TInt Cstif_1::stif_Daemon_Run_Time0( CStifItemParser& aItem )
+    { 
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksRequests ); 
+    TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles ); 
+    
+#if defined(__WINSCW__) || defined(__WINS__)
+    FILE* fp = popen("z:\\sys\\bin\\idle_daemon_run.exe", "r");
+#else
+    FILE* fp = popen("c:\\sys\\bin\\idle_daemon_run.exe", "r");
+#endif
+    if(!fp)
+    	{
+    	iLog->Log(_L8("Fail to open exe"));
+    	return 1;
+    	}
+    
+	iLog->Log(KSuccess);
+	return KErrNone;
+    }
+
+int make_fifo(char* fifopath)
+{
+	int err =0;
+	err = mkfifo (fifopath, 0666);
+	   if(err != 0)
+	   {
+	       // probably file already exists, delete the file
+	       unlink(fifopath); 
+	       // try once more..
+	       err = mkfifo (fifopath, 0666);
+	       if(err != 0)
+	       {
+	            return 1;
+	       }
+	   }
+	   return 0;
+}
+
+int read_fifo(char* fifopath, char* str)
+{
+	int fd = open(fifopath, O_RDONLY);
+	int err;
+	char buf[180];
+	
+	if(fd > 0)
+	{
+		err = read (fd, buf, 80);
+		RDebug::Printf("error value is:%d\n", err);
+		close(fd);
+	}
+	else
+		{
+		return 1;
+		}
+	unlink(fifopath);
+	if(strcmp(buf, "done"))
+	{
+		strcpy(str, buf);
+		return 1;
+	}
+	
+	return 0;
+}
+
+TInt Cstif_1::stif_Simultaneous_Connections( CStifItemParser& aItem )
+{
+	FILE* fp[3];
+	int cnt;
+	char res[80];
+	
+	char* fifopath[3] = {	"C:\\mkfifo001.file",
+								"C:\\mkfifo002.file",
+								"C:\\mkfifo003.file"};
+	for(cnt=0; cnt<3; cnt++)
+	{
+		if(make_fifo(fifopath[cnt]))
+			{
+			iLog->Log(_L8("Failed to open FIFO for %d count"), cnt);
+			return 1;
+			}
+	}
+	
+#if defined(__WINSCW__) || defined(__WINS__)
+	char* exe_names[] = { 	"z:\\sys\\bin\\get_connection_1.exe",
+							"z:\\sys\\bin\\get_connection_2.exe",
+							"z:\\sys\\bin\\get_connection_3.exe"
+						};
+#else
+	char* exe_names[] = { 	"c:\\sys\\bin\\get_connection_1.exe",
+							"c:\\sys\\bin\\get_connection_2.exe",
+							"c:\\sys\\bin\\get_connection_3.exe"
+						};
+#endif
+	
+	
+	for(cnt=0; cnt<3; cnt++)
+		{
+			fp[cnt] = popen(exe_names[cnt], "r");
+			if(!fp[cnt])
+				{
+				iLog->Log(_L8("Failed to open %d th EXE."), cnt);
+				return 1;
+				}
+		}
+	
+	for(cnt=0; cnt<3; cnt++)
+	{
+		if(read_fifo(fifopath[cnt], res))
+			{
+			iLog->Log(_L8("Failed to read FIFO for %d exe and %s"), cnt, res);
+			return 1;
+			}
+	}	
+	
+	iLog->Log(KSuccess);
+	return KErrNone;
+}
+