コード例 #1
0
static DBusHandlerResult 
filter_session_message (DBusConnection     *connection,
                        DBusMessage        *message,
                        void               *user_data)
{
  TestServiceData *testdata = user_data;

  if (dbus_message_is_method_call (message,
                                   "org.freedesktop.DBus.TestSuite.PrivServer",
                                   "GetPrivateAddress"))
    {
       DBusMessage *reply;
       reply = dbus_message_new_method_return (message);
       dbus_message_append_args (reply, DBUS_TYPE_STRING, 
                                 &(testdata->private_addr), DBUS_TYPE_INVALID);
       dbus_connection_send (connection, reply, NULL);
       dbus_message_unref (reply);
       return DBUS_HANDLER_RESULT_HANDLED;
    }
  else if (dbus_message_is_method_call (message,
                                   "org.freedesktop.DBus.TestSuite.PrivServer",
                                   "Quit"))
    {
      fprintf (stderr, "server exiting loop\n");
      _dbus_loop_quit (testdata->loop);
      return DBUS_HANDLER_RESULT_HANDLED;
    }
  return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
コード例 #2
0
static DBusHandlerResult dbusrecv_message_func(DBusConnection  *connection, DBusMessage *message, void *user_data)
{
    dbusrecv_hdl_st *p_dbusrecv_hdl = (dbusrecv_hdl_st *)user_data;

    if (NULL == p_dbusrecv_hdl)
    {
        printf("dbusrecv_message_func: invalid handle!\n");
        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
    }

    if (dbus_message_is_method_call (message,
                                     DBUS_PMD_INTERFACE,
                                     "Echo"))
    {
        return handle_echo(connection, message, user_data);
    }
    else if (dbus_message_is_method_call (message,
                                          DBUS_PMD_INTERFACE,
                                          "Exit"))
    {
        _dbus_loop_quit (p_dbusrecv_hdl->dbusloop);
        p_dbusrecv_hdl->dbusloop = NULL;
        return DBUS_HANDLER_RESULT_HANDLED;
    }
    else if (dbus_message_is_method_call(message,
                                         DBUS_PMD_INTERFACE,
                                         "system"))
    {
        return handle_system(connection, message, user_data);
    }
    else
        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
コード例 #3
0
ファイル: main.c プロジェクト: flwh/Alcatel_OT_985_kernel
static void
signal_handler (int sig)
{
  DBusString str;

  switch (sig)
    {
#ifdef DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX 
    case SIGIO: 
      /* explicit fall-through */
#endif /* DBUS_BUS_ENABLE_DNOTIFY_ON_LINUX  */
    case SIGHUP:
      _dbus_string_init_const (&str, "foo");
      if (!_dbus_write_socket (reload_pipe[RELOAD_WRITE_END], &str, 0, 1))
	{
	  _dbus_warn ("Unable to write to reload pipe.\n");
	  exit (1);
	}
      break;

    case SIGTERM:
      _dbus_loop_quit (bus_context_get_loop (context));
      break;
    }
}
コード例 #4
0
ファイル: test-service.c プロジェクト: psunkari/spicebird
static void
quit (void)
{
  if (!already_quit)
    {
      _dbus_loop_quit (loop);
      already_quit = TRUE;
    }
}
コード例 #5
0
int dbusrecv_uninit(dbusrecv_hdl_st *p_dbusrecv_hdl)
{
    if (NULL == p_dbusrecv_hdl)
    {
        printf("dbusrecv_uninit: invalid parameter, p_dbusrecv_hdl!");
        return -1;
    }
    if (p_dbusrecv_hdl->dbusloop)
    {
        _dbus_loop_quit (p_dbusrecv_hdl->dbusloop);
        sleep(2);
    }

    if (p_dbusrecv_hdl->connection)
    {
        test_connection_shutdown (p_dbusrecv_hdl->dbusloop, p_dbusrecv_hdl->connection);
        if (p_dbusrecv_hdl->filter_func)
            dbus_connection_remove_filter (p_dbusrecv_hdl->connection, p_dbusrecv_hdl->filter_func, NULL);
        dbus_connection_unref (p_dbusrecv_hdl->connection);
        p_dbusrecv_hdl->connection = NULL;
    }
    if (p_dbusrecv_hdl->dbusloop)
    {
        _dbus_loop_unref (p_dbusrecv_hdl->dbusloop);
        p_dbusrecv_hdl->dbusloop = NULL;
    }
    dbus_shutdown();

    if (p_dbusrecv_hdl->dbusrecv_cfg.myname)
    {
        free(p_dbusrecv_hdl->dbusrecv_cfg.myname);
        p_dbusrecv_hdl->dbusrecv_cfg.myname = NULL;
    }
    free(p_dbusrecv_hdl);
    p_dbusrecv_hdl = NULL;

    _dbus_verbose("%s: service exiting!\n", __FILE__);

    return 0;
}
コード例 #6
0
ファイル: main.c プロジェクト: AByzhynar/sdl_core
static dbus_bool_t
handle_reload_watch (DBusWatch    *watch,
		     unsigned int  flags,
		     void         *data)
{
  DBusError error;
  DBusString str;
  char *action_str;
  char action = '\0';

  while (!_dbus_string_init (&str))
    _dbus_wait_for_memory ();

  if ((reload_pipe[RELOAD_READ_END] > 0) &&
      _dbus_read_socket (reload_pipe[RELOAD_READ_END], &str, 1) != 1)
    {
      _dbus_warn ("Couldn't read from reload pipe.\n");
      close_reload_pipe (&watch);
      return TRUE;
    }

  action_str = _dbus_string_get_data (&str);
  if (action_str != NULL)
    {
      action = action_str[0];
    }
  _dbus_string_free (&str);

  /* this can only fail if we don't understand the config file
   * or OOM.  Either way we should just stick with the currently
   * loaded config.
   */
  dbus_error_init (&error);

  switch (action)
    {
    case ACTION_RELOAD:
      if (! bus_context_reload_config (context, &error))
        {
          _DBUS_ASSERT_ERROR_IS_SET (&error);
          _dbus_assert (dbus_error_has_name (&error, DBUS_ERROR_FAILED) ||
                        dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY));
          _dbus_warn ("Unable to reload configuration: %s\n",
                      error.message);
          dbus_error_free (&error);
        }
      break;

    case ACTION_QUIT:
      {
        DBusLoop *loop;
        /*
         * On OSs without abstract sockets, we want to quit
         * gracefully rather than being killed by SIGTERM,
         * so that DBusServer gets a chance to clean up the
         * sockets from the filesystem. fd.o #38656
         */
        loop = bus_context_get_loop (context);
        if (loop != NULL)
          {
            _dbus_loop_quit (loop);
          }
      }
      break;

    default:
      break;
    }

  return TRUE;
}