sl@0: /* sl@0: * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include<stdio.h> sl@0: #include "test-utils.h" sl@0: #include<string.h> sl@0: #include<ctype.h> sl@0: #include<unistd.h> sl@0: #define TEST_BUS_NAME_TEMP "Test.Method.Call" sl@0: sl@0: void called_method(DBusMessage* msg, DBusConnection* connection) sl@0: { sl@0: DBusMessage* reply; sl@0: DBusMessageIter args; sl@0: DBusMessageIter in_args; sl@0: sl@0: char* in_str; sl@0: DBusError error; sl@0: sl@0: dbus_uint32_t status = 94; sl@0: sl@0: dbus_error_init(&error); sl@0: dbus_message_iter_init(msg, &in_args); sl@0: sl@0: reply = dbus_message_new_method_return(msg); sl@0: dbus_message_iter_init_append(reply, &args); sl@0: sl@0: do{ sl@0: dbus_message_iter_get_basic(&in_args, &in_str); sl@0: sl@0: dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &in_str); sl@0: sl@0: }while(dbus_message_iter_next(&in_args)); sl@0: sl@0: dbus_connection_send(connection, reply, NULL); sl@0: sl@0: dbus_connection_flush(connection); sl@0: } sl@0: sl@0: sl@0: void called_variable_args_method(DBusMessage* msg, DBusConnection* connection) sl@0: { sl@0: DBusMessage* reply; sl@0: DBusMessageIter iter; sl@0: DBusMessageIter sub_iter; sl@0: void* arg = malloc(20); sl@0: char* str; sl@0: int no; sl@0: int i; sl@0: dbus_int32_t* array; sl@0: dbus_int32_t return_value = 0; sl@0: dbus_bool_t valid_flag = TRUE; sl@0: sl@0: sl@0: sl@0: sl@0: reply = dbus_message_new_method_return(msg); sl@0: dbus_message_iter_init(msg, &iter); sl@0: sl@0: do{ sl@0: switch(dbus_message_iter_get_arg_type(&iter)) sl@0: { sl@0: case DBUS_TYPE_BOOLEAN: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(dbus_bool_t*)arg != TRUE) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_INT16: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(dbus_int16_t*)arg != -16) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_INT32: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(dbus_int32_t*)arg != -32) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_INT64: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(dbus_int64_t*)arg != -64) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_UINT16: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(dbus_uint16_t*)arg != 16) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_UINT32: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(dbus_uint32_t*)arg != 32) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_UINT64: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(dbus_uint64_t*)arg != 64) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_DOUBLE: sl@0: dbus_message_iter_get_basic(&iter, arg); sl@0: if(*(double*)arg != 12.34567) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_STRING: sl@0: dbus_message_iter_get_basic(&iter, &str); sl@0: if(strcmp("DBus Testing", str)) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_ARRAY: sl@0: dbus_message_iter_recurse(&iter, &sub_iter); sl@0: no = dbus_message_iter_get_array_len(&sub_iter); sl@0: dbus_message_iter_get_fixed_array(&sub_iter, &array, &no); sl@0: for(i=0;i<no;i++) sl@0: if(array[i] != (i+1)) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_STRUCT: sl@0: dbus_message_iter_recurse(&iter, &sub_iter); sl@0: do{ sl@0: switch(dbus_message_iter_get_arg_type(&sub_iter)) sl@0: { sl@0: case DBUS_TYPE_INT32: sl@0: dbus_message_iter_get_basic(&sub_iter, arg); sl@0: if(*(dbus_int32_t*)arg != -32) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_STRING: sl@0: dbus_message_iter_get_basic(&sub_iter, &str); sl@0: if(strcmp("DBus Testing", str)) sl@0: valid_flag = FALSE; sl@0: break; sl@0: case DBUS_TYPE_DOUBLE: sl@0: dbus_message_iter_get_basic(&sub_iter, arg); sl@0: if(*(double*)arg != 12.34567) sl@0: valid_flag = FALSE; sl@0: break; sl@0: default: sl@0: valid_flag = FALSE; sl@0: sl@0: } sl@0: }while(dbus_message_iter_next(&sub_iter)); sl@0: sl@0: break; sl@0: default: sl@0: valid_flag = FALSE; sl@0: } sl@0: }while(dbus_message_iter_next(&iter)); sl@0: sl@0: if(!valid_flag) sl@0: return_value = 1; sl@0: else sl@0: return_value = 0; sl@0: sl@0: dbus_message_append_args(reply, DBUS_TYPE_INT32, &return_value, DBUS_TYPE_INVALID); sl@0: dbus_connection_send(connection, reply, NULL); sl@0: dbus_connection_flush(connection); sl@0: } sl@0: sl@0: void called_simple(DBusMessage* msg, DBusConnection* connection) sl@0: { sl@0: DBusMessage* reply; sl@0: dbus_int32_t return_value = 9090; sl@0: sl@0: reply = dbus_message_new_method_return(msg); sl@0: sl@0: dbus_message_append_args(reply, DBUS_TYPE_INT32, &return_value, DBUS_TYPE_INVALID); sl@0: dbus_connection_send(connection, reply, NULL); sl@0: dbus_connection_flush(connection); sl@0: } sl@0: sl@0: sl@0: void called_file_send(DBusMessage* msg, DBusConnection* connection) sl@0: { sl@0: DBusMessage* reply; sl@0: int return_value = 8080; sl@0: DBusMessageIter iter; sl@0: DBusMessageIter sub_iter; sl@0: int no; sl@0: unsigned char* array; sl@0: FILE* fp=NULL; sl@0: sl@0: dbus_message_iter_init(msg, &iter); sl@0: dbus_message_iter_recurse(&iter, &sub_iter); sl@0: no = dbus_message_iter_get_array_len(&sub_iter); sl@0: dbus_message_iter_get_fixed_array(&sub_iter, &array, &no); sl@0: sl@0: fp = fopen("c:\\data\\images\\pictures\\bunbask1.jpg", "a+"); sl@0: if(!fp) sl@0: { sl@0: printf("Failed to open file"); sl@0: return; sl@0: } sl@0: sl@0: fwrite(array, sizeof(unsigned char), no, fp); sl@0: sl@0: if(fp) sl@0: fclose(fp); sl@0: sl@0: reply = dbus_message_new_method_return(msg); sl@0: dbus_connection_send(connection, reply, NULL); sl@0: dbus_connection_flush(connection); sl@0: } sl@0: sl@0: void called_file_send_time(DBusMessage* msg,DBusConnection* connection) sl@0: { sl@0: DBusMessageIter iter; sl@0: DBusMessageIter sub_iter; sl@0: int no; sl@0: unsigned char* array; sl@0: FILE* fp=NULL; sl@0: DBusMessage* reply; sl@0: char* file_name; sl@0: sl@0: reply = dbus_message_new_method_return(msg); sl@0: dbus_connection_send(connection, reply, NULL); sl@0: dbus_connection_flush(connection); sl@0: sl@0: dbus_message_iter_init(msg, &iter); sl@0: dbus_message_iter_get_basic(&iter, &file_name); sl@0: dbus_message_iter_next(&iter); sl@0: dbus_message_iter_recurse(&iter, &sub_iter); sl@0: no = dbus_message_iter_get_array_len(&sub_iter); sl@0: dbus_message_iter_get_fixed_array(&sub_iter, &array, &no); sl@0: sl@0: strcat(file_name, "_1"); sl@0: fp = fopen(file_name, "w+"); sl@0: if(!fp) sl@0: { sl@0: printf("Failed to open file %s", file_name); sl@0: getchar(); sl@0: } sl@0: sl@0: fwrite(array, sizeof(unsigned char), no, fp); sl@0: if(fp) sl@0: fclose(fp); sl@0: } sl@0: sl@0: void called_sign_test(DBusMessage* msg, DBusConnection* connection) sl@0: { sl@0: DBusError error; sl@0: const char* signature; sl@0: const char* msg_sign; sl@0: const char* msg_sign1; sl@0: DBusSignatureIter sign_iter; sl@0: DBusSignatureIter sub_sign_iter; sl@0: DBusSignatureIter sub_sign_iter1; sl@0: DBusMessageIter iter; sl@0: DBusMessage* reply; sl@0: int type; sl@0: int sub_type; sl@0: const char* sub_signature; sl@0: sl@0: dbus_error_init(&error); sl@0: sl@0: dbus_message_iter_init(msg, &iter); sl@0: msg_sign = dbus_message_iter_get_signature(&iter); sl@0: dbus_message_iter_next(&iter); sl@0: dbus_message_iter_next(&iter); sl@0: msg_sign1 = dbus_message_iter_get_signature(&iter); sl@0: sl@0: signature = dbus_message_get_signature(msg); sl@0: dbus_signature_iter_init(&sign_iter, signature); sl@0: if(dbus_signature_validate_single(signature, &error)) sl@0: { sl@0: exit(1); sl@0: } sl@0: do{ sl@0: type = dbus_signature_iter_get_current_type(&sign_iter); sl@0: switch(type) sl@0: { sl@0: case DBUS_TYPE_ARRAY: sl@0: dbus_signature_iter_recurse(&sign_iter, &sub_sign_iter1); sl@0: sub_type = dbus_signature_iter_get_element_type(&sign_iter); sl@0: break; sl@0: case DBUS_TYPE_STRUCT: sl@0: dbus_signature_iter_recurse(&sign_iter, &sub_sign_iter); sl@0: sub_signature = dbus_signature_iter_get_signature(&sign_iter); sl@0: dbus_error_init(&error); sl@0: if(!dbus_signature_validate_single(sub_signature, &error)) sl@0: { sl@0: exit(1); sl@0: } sl@0: break; sl@0: } sl@0: }while(dbus_signature_iter_next(&sign_iter)); sl@0: sl@0: reply = dbus_message_new_method_return(msg); sl@0: dbus_message_append_args(reply, DBUS_TYPE_SIGNATURE, &signature, DBUS_TYPE_SIGNATURE, &sub_signature, DBUS_TYPE_INT32, &sub_type, DBUS_TYPE_SIGNATURE, &msg_sign, DBUS_TYPE_SIGNATURE, &msg_sign1, DBUS_TYPE_INVALID); sl@0: dbus_connection_send(connection, reply, NULL); sl@0: dbus_connection_flush(connection); sl@0: sl@0: dbus_free((void*)msg_sign); sl@0: dbus_free((void*)msg_sign1); sl@0: dbus_message_unref(reply); sl@0: } sl@0: sl@0: void called_file_send_whole(DBusMessage* msg, DBusConnection* connection) sl@0: { sl@0: DBusMessageIter iter; sl@0: DBusMessageIter sub_iter; sl@0: int no; sl@0: unsigned char* array; sl@0: FILE* fp=NULL; sl@0: DBusMessage* reply; sl@0: sl@0: reply = dbus_message_new_method_return(msg); sl@0: dbus_connection_send(connection, reply, NULL); sl@0: dbus_connection_flush(connection); sl@0: sl@0: dbus_message_iter_init(msg, &iter); sl@0: dbus_message_iter_recurse(&iter, &sub_iter); sl@0: no = dbus_message_iter_get_array_len(&sub_iter); sl@0: dbus_message_iter_get_fixed_array(&sub_iter, &array, &no); sl@0: sl@0: fp = fopen("c:\\data\\Images\\Pictures\\test.mp3", "a+"); sl@0: if(!fp) sl@0: { sl@0: printf("Failed to open file"); sl@0: getchar(); sl@0: } sl@0: sl@0: fwrite(array, sizeof(unsigned char), no, fp); sl@0: sl@0: if(fp) sl@0: fclose(fp); sl@0: sl@0: dbus_message_unref(reply); sl@0: } sl@0: sl@0: int main() sl@0: { sl@0: DBusError error; sl@0: DBusError error1; sl@0: DBusConnection* connection; sl@0: DBusMessage* msg; sl@0: DBusObjectPathVTable vtable = sl@0: { sl@0: NULL,NULL,NULL sl@0: }; sl@0: sl@0: dbus_error_init(&error); sl@0: dbus_error_init(&error1); sl@0: sl@0: connection = dbus_bus_get(DBUS_BUS_SESSION, &error); sl@0: sl@0: if(dbus_error_is_set(&error)) sl@0: { sl@0: fprintf(stdout, "Error Occured :: %s", error.name); sl@0: return 1; sl@0: } sl@0: sl@0: sl@0: sl@0: if(dbus_connection_register_object_path (connection, "/Test/Method/Object", &vtable, NULL)) sl@0: { sl@0: fprintf(stdout, "Object Path registered."); sl@0: } sl@0: else sl@0: { sl@0: fprintf(stdout, "Object Path not able to register."); sl@0: return 1; sl@0: } sl@0: sl@0: sl@0: sl@0: if(dbus_bus_request_name (connection, TEST_BUS_NAME_TEMP, DBUS_NAME_FLAG_ALLOW_REPLACEMENT, &error1) == -1) sl@0: { sl@0: fprintf(stdout, "Not able to request name."); sl@0: } sl@0: else sl@0: { sl@0: fprintf(stdout, "Name Request Successful"); sl@0: } sl@0: sl@0: while(TRUE) sl@0: { sl@0: dbus_connection_read_write(connection, 0); sl@0: sl@0: msg = dbus_connection_pop_message(connection); sl@0: sl@0: if(msg == NULL) sl@0: { sl@0: sleep(1); sl@0: continue; sl@0: } sl@0: sl@0: fprintf(stdout, "Message Detected"); sl@0: sl@0: if(DBUS_MESSAGE_TYPE_SIGNAL == dbus_message_get_type(msg)) sl@0: { sl@0: fprintf(stdout, "Message is Signal."); sl@0: } sl@0: sl@0: if(DBUS_MESSAGE_TYPE_METHOD_CALL == dbus_message_get_type(msg)) sl@0: { sl@0: fprintf(stdout, "Message is Method call."); sl@0: } sl@0: sl@0: sl@0: if(dbus_message_is_method_call(msg, "test.Method.Call", "method")) sl@0: { sl@0: called_method(msg, connection); sl@0: break; sl@0: } sl@0: sl@0: if(dbus_message_is_method_call(msg, "test.Method.Call", "variable_args_method")) sl@0: { sl@0: sl@0: called_variable_args_method(msg, connection); sl@0: break; sl@0: } sl@0: sl@0: if(dbus_message_is_method_call(msg, "test.Method.Call", "simple")) sl@0: { sl@0: sl@0: called_simple(msg, connection); sl@0: // break; sl@0: } sl@0: if(dbus_message_is_method_call(msg, "test.Method.Call", "file_send")) sl@0: { sl@0: sl@0: called_file_send(msg, connection); sl@0: // break; sl@0: } sl@0: if(dbus_message_is_method_call(msg, "test.Method.Call", "sign_test")) sl@0: { sl@0: sl@0: called_sign_test(msg, connection); sl@0: break; sl@0: } sl@0: if(dbus_message_is_method_call(msg, "test.Method.Call", "file_send_whole")) sl@0: { sl@0: sl@0: called_file_send_whole(msg, connection); sl@0: break; sl@0: } sl@0: sl@0: if(dbus_message_is_method_call(msg, "test.Method.Call", "file_send_time")) sl@0: { sl@0: sl@0: called_file_send_time(msg, connection); sl@0: // break; sl@0: } sl@0: sl@0: dbus_message_unref(msg); sl@0: sl@0: } sl@0: sl@0: dbus_message_unref(msg); sl@0: dbus_bus_release_name(connection,TEST_BUS_NAME_TEMP,&error1); sl@0: dbus_connection_unregister_object_path(connection,"/Test/Method/Object"); sl@0: sl@0: dbus_connection_unref(connection); sl@0: sl@0: return 0; sl@0: }