os/ossrv/ofdbus/dbus/tsrc/testapps/method1/src/method1.c
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /*
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description: 
    15 *
    16 */
    17 
    18 
    19 //#include<stdio.h>  
    20 #include "test-utils.h"
    21 #include<string.h> 
    22 #include<ctype.h>
    23 #include<unistd.h>  // sleep function is defined in this header file 
    24 #define TEST_BUS_NAME_TEMP "Test.Method.Call1"
    25 dbus_bool_t message_is_error;
    26  
    27 
    28 void called_file_writecontact(DBusMessage* msg,DBusConnection* connection)
    29 	{
    30 	FILE *fp;  
    31 
    32 	char* str;
    33 	dbus_int32_t cnt;
    34 	DBusMessage* reply;
    35 	DBusMessageIter iter;
    36 	DBusMessageIter sub_iter;
    37 	
    38 	dbus_message_iter_init(msg, &iter);   
    39 	
    40 	
    41 	fp = fopen("c:\\data.txt","a+");
    42 	do{
    43 		switch(dbus_message_iter_get_arg_type(&iter))
    44 		{
    45 			
    46 		
    47 		
    48 		case DBUS_TYPE_STRUCT: 
    49 			dbus_message_iter_recurse(&iter, &sub_iter);
    50 			do{
    51 					switch(dbus_message_iter_get_arg_type(&sub_iter))
    52 					{
    53 					case DBUS_TYPE_INT32:
    54 						dbus_message_iter_get_basic(&sub_iter, &cnt);
    55 						fwrite(&cnt, sizeof(cnt),1,fp);
    56 						break;
    57 					case DBUS_TYPE_STRING:
    58 						dbus_message_iter_get_basic(&sub_iter, &str);
    59 						fwrite(str, strlen(str),1,fp);
    60 					} 
    61 					fwrite("\n", strlen("\n"),1,fp);
    62 			}while(dbus_message_iter_next(&sub_iter));
    63 			
    64 			break;  
    65 		default: 
    66 		fprintf(stdout,"no input"); 
    67  
    68 		}
    69 	}while(dbus_message_iter_next(&iter));
    70 	reply = dbus_message_new_method_return(msg);
    71 	
    72 	dbus_message_append_args(reply, DBUS_TYPE_INT32, &cnt, DBUS_TYPE_INVALID);
    73 	dbus_connection_send(connection, reply, NULL);
    74 	dbus_connection_flush(connection); 
    75 	}
    76 	
    77 void called_dbus_connection_borrow_message0(DBusMessage* msg,DBusConnection* connection)
    78 	{
    79 		DBusMessage* reply;	
    80 		dbus_int32_t return_value = 9090;
    81 	
    82 		reply = dbus_message_new_method_return(msg);
    83 		
    84 		dbus_message_append_args(reply, DBUS_TYPE_INT32, &return_value, DBUS_TYPE_INVALID);
    85 		dbus_connection_send(connection, reply, NULL); 
    86 		dbus_connection_flush(connection); 
    87 	}
    88 void called_dbus_connection_pop_message0(DBusMessage* msg,DBusConnection* connection)
    89 	{
    90 	DBusMessage* reply;	
    91 	dbus_int32_t return_value = 9090;
    92 
    93 	reply = dbus_message_new_method_return(msg);
    94 	
    95 	dbus_message_append_args(reply, DBUS_TYPE_INT32, &return_value, DBUS_TYPE_INVALID);
    96 	dbus_connection_send(connection, reply, NULL);
    97 	dbus_connection_flush(connection);
    98 	}
    99 void called_dbus_connection_steal_borrowed_message0(DBusMessage* msg,DBusConnection* connection)
   100 	{
   101 	DBusMessage* reply;	
   102 	dbus_int32_t return_value = 9090;
   103 
   104 	reply = dbus_message_new_method_return(msg);
   105 	
   106 	dbus_message_append_args(reply, DBUS_TYPE_INT32, &return_value, DBUS_TYPE_INVALID);
   107 	dbus_connection_send(connection, reply, NULL);
   108 	dbus_connection_flush(connection);
   109 	}
   110 void called_dbus_connection_return_message0(DBusMessage* msg,DBusConnection* connection)
   111 	{
   112 	DBusMessage* reply;	
   113 	
   114 	reply = dbus_message_new_method_return(msg);
   115 
   116 	dbus_connection_send(connection, reply, NULL);
   117 	dbus_connection_flush(connection);
   118 	}
   119 void called_dbus_message_new_error_printf0(DBusMessage* msg,DBusConnection* connection)
   120 	{
   121 		char err_succes[]={"ERROR IS SAME"};
   122 		
   123 		char err_failed[]= {"MISMATCH IN ERROR"};//'M','i','s','m','a','t','c','h',' ','i','n',' ' ,'e','r','r','o','r'
   124 		const char* errorname;
   125 		FILE *fp;
   126 		
   127 		DBusMessage* err_msg;
   128 		const char* error_name; 
   129 		const char* error_message;
   130 		dbus_int32_t return_value =9090;
   131 		errorname = "dbus.test.error1";
   132 		/* change the error name so that err_failed is printed
   133 		 * for eg: errorname = "dbus.test.error1"
   134 		 * 
   135 		      */
   136 		
   137 		error_name = "dbus.test.error";  
   138 		error_message = "dbus.message";
   139 		
   140 		fp = fopen("c:\\method1newerror.txt","w");
   141 	
   142 		err_msg = dbus_message_new_error(msg,error_name,error_message);  
   143 		message_is_error=dbus_message_is_error(err_msg ,errorname);
   144 		if(message_is_error)
   145 			{
   146 				fwrite(err_succes,1,sizeof(err_succes),fp); 
   147 				
   148 				fclose(fp);
   149 			}
   150 		else 
   151 			{ 
   152 			fwrite(err_failed,1,sizeof(err_failed),fp);  
   153 			fclose(fp);
   154 			}
   155 		 
   156 		   
   157 		
   158 	
   159 		dbus_connection_send(connection, err_msg, NULL); 
   160 		dbus_connection_flush(connection); 
   161 	}
   162 
   163 void called_dbus_message_get_no_reply0(DBusMessage* msg,DBusConnection* connection)
   164 	{
   165 		dbus_bool_t nomsg = FALSE;
   166 		char err_succes[]={"Set reply is set/reply not required"};
   167 		char err_fail[]={"Set reply is not been set/reply may be sent"};
   168 		
   169 		dbus_int32_t return_value = 9090;
   170 		FILE *fp; 
   171 		fp = fopen("c:\\msggetnorply.txt","w"); 
   172 		
   173 	
   174 	
   175 		nomsg = dbus_message_get_no_reply(msg) ;
   176 		if(nomsg)
   177 			{
   178 			fwrite(err_succes,1,sizeof(err_succes),fp); 
   179 			fclose(fp);
   180 			}
   181 		else  
   182 			{
   183 				fwrite(err_fail,1,sizeof(err_fail),fp);  
   184 				fclose(fp);
   185 			}
   186 			
   187 	
   188 		dbus_connection_flush(connection); 
   189 	}
   190 
   191 
   192 
   193 
   194 int main()
   195 {
   196 	DBusError error;
   197 	DBusError error1;
   198 	DBusConnection* connection;
   199 	DBusMessage* msg;
   200 	DBusObjectPathVTable vtable;
   201 	 
   202 	dbus_error_init(&error);
   203 	dbus_error_init(&error1);
   204 	fprintf(stdout, "Starting Method");
   205 	
   206 	connection = dbus_bus_get(DBUS_BUS_SESSION, &error);
   207 	
   208 	if(dbus_error_is_set(&error))
   209 	{
   210 		fprintf(stdout, "Error Occured :: %s", error.name);
   211 		return 1;
   212 	}
   213 	
   214 
   215 	
   216 	if(dbus_connection_register_object_path (connection, "/Test/Method/Object", &vtable, NULL))
   217 	{
   218 		fprintf(stdout, "Object Path registered.");
   219 	}
   220 	else
   221 	{
   222 		fprintf(stdout, "Object Path not able to register.");
   223 		return 1;
   224 	}
   225  
   226 
   227 
   228 	if(dbus_bus_request_name (connection, TEST_BUS_NAME_TEMP, DBUS_NAME_FLAG_ALLOW_REPLACEMENT, &error1) == -1)
   229 	{
   230 		fprintf(stdout, "Not able to request name.");
   231 	}
   232 	else
   233 	{
   234 		fprintf(stdout, "Name Request Successful");
   235 	}
   236 	
   237 	while(TRUE)
   238 	{	
   239 		dbus_connection_read_write(connection, 0);
   240 		
   241 		msg = dbus_connection_pop_message(connection);
   242 			
   243 		if(msg == NULL)
   244 		{
   245 			sleep(1);
   246 			continue;
   247 		}
   248 		     
   249 		fprintf(stdout, "Message Detected");
   250 		
   251 		if(DBUS_MESSAGE_TYPE_SIGNAL == dbus_message_get_type(msg))
   252 		{
   253 			fprintf(stdout, "Message is Signal.");
   254 		}
   255 		
   256 		if(DBUS_MESSAGE_TYPE_METHOD_CALL == dbus_message_get_type(msg))
   257 		{
   258 			fprintf(stdout, "Message is Method call.");
   259 		}
   260 		if(dbus_message_is_method_call(msg, "test.Method.Call", "file_writecontact"))
   261 			{
   262 			
   263 			called_file_writecontact(msg, connection);
   264 			break;
   265 			}
   266 		 
   267 		
   268 		 
   269 		if(dbus_message_is_method_call(msg, "test.Method.Call", "dbus_connection_borrow_message0"))
   270 			{
   271 			
   272 			called_dbus_connection_borrow_message0(msg, connection);
   273 	
   274 			}
   275 		
   276 		if(dbus_message_is_method_call(msg, "test.Method.Call", "dbus_connection_pop_message0"))
   277 			{
   278 			
   279 			called_dbus_connection_pop_message0(msg, connection);
   280 	
   281 			}
   282 		
   283 		if(dbus_message_is_method_call(msg, "test.Method.Call", "dbus_connection_steal_borrowed_message0"))
   284 			{
   285 			
   286 			called_dbus_connection_steal_borrowed_message0(msg, connection);
   287 	
   288 			}
   289 		if(dbus_message_is_method_call(msg, "test.Method.Call", "dbus_connection_return_message0"))
   290 			{
   291 			
   292 			called_dbus_connection_return_message0(msg, connection);
   293 		
   294 			}
   295 		if(dbus_message_is_method_call(msg, "test.Method.Call", "dbus_message_new_error_printf0"))
   296 			{
   297 				called_dbus_message_new_error_printf0(msg, connection);
   298 		
   299 			}
   300 		
   301 
   302 		
   303 		if(dbus_message_is_method_call(msg, "test.Method.Call", "dbus_message_get_no_reply0"))
   304 			{
   305 			
   306 			called_dbus_message_get_no_reply0(msg, connection);
   307 			break;
   308 			} 
   309 		dbus_message_unref(msg);    
   310 	}
   311 	
   312 	dbus_connection_unref(connection); 
   313 	return 0;
   314 }