Пример #1
0
void
SrvAgent::action_async(enum service_id service, qmf::AgentSession& session,
                       qmf::AgentEvent& event, svc_action_t *op, bool has_rc)
{
    op->cb_data = new AsyncCB(this, service, session, event, has_rc);
    services_action_async(op, AsyncCB::mh_async_callback);
}
Пример #2
0
gboolean recurring_action_timer(gpointer data)
{
    svc_action_t *op = data;
    crm_debug("Scheduling another invokation of %s", op->id);

    /* Clean out the old result */
    free(op->stdout_data); op->stdout_data = NULL;
    free(op->stderr_data); op->stderr_data = NULL;

    services_action_async(op, NULL);
    return FALSE;
}
Пример #3
0
gboolean
Resources_invoke(Matahari *matahari, const char *name, const char *standard,
                 const char *provider, const char *agent, const char *action,
                 unsigned int interval, GHashTable *parameters,
                 unsigned int timeout, unsigned int expected_rc,
                 const char *userdata_in, DBusGMethodInvocation *context)
{
    GError* error = NULL;
    svc_action_t *op = NULL;
    GList *standards;
    struct invoke_cb_data *data;

    if (!check_authorization(RESOURCES_INTERFACE_NAME ".invoke",
                             &error, context)) {
        dbus_g_method_return_error(context, error);
        g_error_free(error);
        return FALSE;
    }

    // Check if standard is valid
    standards = resources_list_standards();

    if (g_list_find_custom(standards, standard, (GCompareFunc) strcasecmp) == NULL) {
        mh_err("%s is not a known resource standard", standard);
        error = g_error_new(MATAHARI_ERROR, MH_RES_NOT_IMPLEMENTED,
                            "%s is not a known resource standard", standard);
        dbus_g_method_return_error(context, error);
        g_error_free(error);
        g_list_free_full(standards, free);
        return FALSE;
    }
    g_list_free_full(standards, free);

    op = resources_action_create(name, standard, provider, agent, action,
                                 0, timeout, g_hash_table_ref(parameters));
    op->expected_rc = expected_rc;

    if (!(data = malloc(1 * sizeof(struct invoke_cb_data)))) {
        services_action_free(op);
        return FALSE;
    }

    data->context = context;
    data->userdata = strdup(userdata_in);
    op->cb_data = data;

    services_action_async(op, invoke_cb);
    return FALSE;
}