static DBusHandlerResult handle_exec_action (DBusConnection * connection, DBusMessage * message, void *data) { DBusMessage *reply; DBusMessageIter iter; DBusHandlerResult result; DBusError err; dbus_uint32_t retval; char *action_name; char **argv; int argc; #ifdef DEBUG int i; #endif result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; // TODO: Should check the message signature matches what we expect? // initialise the error struct dbus_error_init (&err); /* DON'T FREE action_name, as it belongs to DBUS, * DO FREE argv, using dbus_free_string_array() */ argv = NULL; if (!dbus_message_get_args (message, &err, DBUS_TYPE_STRING, &action_name, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &argv, &argc, DBUS_TYPE_INVALID)) { fprintf (stderr, "Failed to read method arguments\n"); if (argv) dbus_free_string_array (argv); return result; } #ifdef DEBUG fprintf (stderr, "pcb_dbus: DEBUG: Executing action: %s(", action_name); if (argc > 0) fprintf (stderr, " \"%s\"", argv[0]); for (i = 1; i < argc; i++) fprintf (stderr, ", \"%s\"", argv[i]); fprintf (stderr, " )\n"); #endif // TODO: Proper return value from actions hid_actionv (action_name, argc, argv); retval = 0; dbus_free_string_array (argv); reply = dbus_message_new_method_return (message); if (reply == NULL) { fprintf (stderr, "pcb_dbus: Couldn't create reply message\n"); return result; } dbus_message_iter_init_append (reply, &iter); if (!dbus_message_iter_append_basic (&iter, DBUS_TYPE_UINT32, &retval)) { fprintf (stderr, "pcb_dbus: Couldn't sent message, Out Of Memory!\n"); goto out; } if (!dbus_connection_send (connection, reply, NULL)) { fprintf (stderr, "pcb_dbus: Couldn't send message, Out Of Memory!\n"); goto out; } result = DBUS_HANDLER_RESULT_HANDLED; out: dbus_message_unref (reply); return result; }
DBusHandlerResult handle_dbus_message( DBusConnection *connection, DBusMessage *message, void *data ) { int eax; int esi; int msg_type; switch ( msg_type ) { default: break; case 4: break; case 3: break; case 2: break; case 1: { char *method_name; char *interface_name; if ( dbus_message_get_member( &message ) ) { if ( interface_name ) { /* phantom */ size_t __s1_len; /* phantom */ size_t __s2_len; strcmp( "org.seul.geda.pcb", interface_name ); if ( 1 ) { /* phantom */ size_t __s1_len; /* phantom */ size_t __s2_len; method_name[0] = dbus_message_get_member( &message ); strcmp( "GetFilename", dbus_message_get_member( &message ) ); if ( !1 ) { __fprintf_chk( stderr, 1, "pcb_dbus: Interface '%s' has no method '%s'\n", dbus_message_get_interface( &message ), ebp_184 ); return 1; } else { if ( dbus_message_new_method_return( &message ) ) { dbus_message_iter_init_append( dbus_message_new_method_return( &message ), ebp_112 ); if ( PCB->Filename ) { if ( lrealpath( &PCB->Filename ) == 0 ) goto B38; else { if ( dbus_message_iter_append_basic( ebp_112, 115, ebp_32 ) ) { free( ebp_32 ); } else { __fprintf_chk( stderr, 1, "pcb_dbus: Couldn't append return filename string to message reply, Out Of Memory!\n" ); free( ebp_32 ); dbus_message_unref( &ebx ); return 0; } } } else { } B38:; if ( calloc( 1, 1 ) ) { } else { __fprintf_chk( stderr, 1, ebp_192, ebp_192 ); } } else { } } } else { /* phantom */ size_t __s1_len; /* phantom */ size_t __s2_len; strcmp( "org.seul.geda.pcb.actions", interface_name ); if ( 1 ) { /* phantom */ size_t __s1_len; /* phantom */ size_t __s2_len; method_name[0] = ebp_140; strcmp( "ExecAction", ebp_140 ); if ( !1 ) { __fprintf_chk( stderr, 1, "pcb_dbus: Interface '%s' has no method '%s'\n", dbus_message_get_interface( &message ), ebp_184 ); } else { dbus_error_init( ebp_56 ); if ( dbus_message_get_args( &message, ebp_56, 115, ebp_32, 97, (long long)115, (long long)( ebp_40 ) ) ) { hid_actionv( (char*)calloc( 1, 1 ), ebp_40, ebp_36 ); dbus_free_string_array( 0 ); if ( dbus_message_new_method_return( &message ) ) { dbus_message_iter_init_append( dbus_message_new_method_return( &message ), ebp_112 ); if ( dbus_message_iter_append_basic( ebp_112, 117, ebp_28 ) ) { } else { } } } else { __fprintf_chk( stderr, 1, "Failed to read method arguments\n" ); if ( 0 ) { dbus_free_string_array( 0 ); } } } } else { /* phantom */ size_t __s1_len; /* phantom */ size_t __s2_len; strcmp( "org.freedesktop.DBus.Introspectable", interface_name ); if ( !1 ) { __fprintf_chk( stderr, 1, "pcb_dbus: Interface '%s' was not recognised\n", dbus_message_iter_append_basic( ebp_112, 117, ebp_28 ) ); } { /* phantom */ size_t __s1_len; /* phantom */ size_t __s2_len; method_name[0] = dbus_message_get_member( &message ); strcmp( "Introspect", dbus_message_get_member( &message ) ); if ( !1 ) { __fprintf_chk( stderr, 1, "pcb_dbus: Interface '%s' has no method '%s'\n", dbus_message_get_interface( &message ), ebp_184 ); } else { if ( dbus_message_new_method_return( &message ) ) { dbus_message_iter_init_append( dbus_message_new_method_return( &message ), ebp_112 ); if ( dbus_message_iter_append_basic( ebp_112, 115, pcb_dbus_introspect_xml ) ) { if ( dbus_connection_send( &pcb_dbus_conn, (DBusMessage*)dbus_message_get_interface( &message ), 0 ) ) { dbus_message_unref( &ebx ); return 0; } } else { } } } } } } if ( dbus_connection_send( ebp_200, ebp_200, ebp_196 ) ) { dbus_message_unref( &ebx ); return 0; } } else { } } else { } } break; } __fprintf_chk( stderr, 1, ebp_192, ebp_192 ); }