Beispiel #1
0
static void
_eventd_protocol_evp_parse_dot_event_end(EventdProtocol *self, GError **error)
{
    if ( self->data.hash != NULL )
    {
        eventd_event_set_all_data(self->event, self->data.hash);
        self->data.hash = NULL;
    }

    eventd_protocol_call_event((EventdProtocol *) self, self->event);

    eventd_event_unref(self->event);
    self->event = NULL;

    self->state = self->base_state;
}
Beispiel #2
0
int
main(int argc, char *argv[])
{
    int r = 0;
    gchar *host = NULL;
    gchar **event_data_name = NULL;
    gchar **event_data_content = NULL;

    gboolean print_version = FALSE;

    GOptionEntry entries[] =
    {
        { "data-name",    'd', 0, G_OPTION_ARG_STRING_ARRAY, &event_data_name,    "Event data name to send",                                "<name>" },
        { "data-content", 'c', 0, G_OPTION_ARG_STRING_ARRAY, &event_data_content, "Event data content to send (must be after a data-name)", "<content>" },
        { "host",         'h', 0, G_OPTION_ARG_STRING,       &host,               "Host to connect to",                                     "<host>" },
        { "max-tries",    'm', 0, G_OPTION_ARG_INT,          &max_tries,          "Maximum connection attempts (0 for infinite)",           "<times>" },
        { "wait",         'w', 0, G_OPTION_ARG_NONE,         &wait_event_end,     "Wait the end of the event",                              NULL },
        { "version",      'V', 0, G_OPTION_ARG_NONE,         &print_version,      "Print version",                                          NULL },
        { NULL }
    };
    GOptionContext *opt_context = g_option_context_new("<event category> <event name> - Basic CLI client for eventd");

    g_option_context_add_main_entries(opt_context, entries, GETTEXT_PACKAGE);

    GError *error = NULL;
    if ( ! g_option_context_parse(opt_context, &argc, &argv, &error) )
    {
        g_warning("Couldn't parse the arguments: %s", error->message);
        g_option_context_free(opt_context);
        return 1;
    }
    g_option_context_free(opt_context);

    if ( print_version )
    {
        g_print("eventc %s (using libeventc %s)\n",
            PACKAGE_VERSION,
            eventc_get_version());
        goto end;
    }

    r = 1; /* We are checking arguments */

    if ( argc < 2 )
    {
        g_print("You must define the category of the event.\n");
        goto end;
    }
    if ( argc < 3 )
    {
        g_print("You must define the name of the event.\n");
        goto end;
    }
    guint n_length, c_length;

    n_length = ( event_data_name == NULL ) ? 0 : g_strv_length(event_data_name);
    c_length = ( event_data_content == NULL ) ? 0 : g_strv_length(event_data_content);
    if ( n_length != c_length )
    {
        g_warning("Not the same number of data names and data contents");
        g_strfreev(event_data_name);
        g_strfreev(event_data_content);
        goto end;
    }

    r = 0; /* Arguments are fine */

    const gchar *category = argv[1];
    const gchar *name = argv[2];

    client = eventc_connection_new(host);
    eventc_connection_set_passive(client, !wait_event_end);

    event = eventd_event_new(category, name);

    GHashTable *data;

    data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);

    guint i;
    for ( i = 0 ; i < n_length ; ++i )
        g_hash_table_insert(data, event_data_name[i], event_data_content[i]);
    g_free(event_data_name);
    g_free(event_data_content);

    eventd_event_set_all_data(event, data);

    g_idle_add(_eventc_connect, NULL);

    loop = g_main_loop_new(NULL, FALSE);
    g_main_loop_run(loop);
    g_main_loop_unref(loop);

    g_object_unref(event);

    g_object_unref(client);

end:
    g_free(host);

    return r;
}