static char * test_event1 (void) { struct lwes_event *event1; struct lwes_event_type_db *db = NULL; LWES_BYTE bytes[MAX_MSG_SIZE]; int size1; LWES_LONG_STRING string1; LWES_LONG_STRING string2; LWES_IP_ADDR ip_addr; char bigbuf[200]; char *retbuf; char bigdirbuf[4048]; char file[4100]; assert (getcwd (bigdirbuf, 4048) != NULL); snprintf (file, 4100, "%s/test1.esf", bigdirbuf); ip_addr.s_addr = inet_addr ("127.0.0.1"); db = lwes_event_type_db_create (file); assert (db != NULL); event1 = lwes_event_create_with_encoding (db, "Event1", encoding); assert ( event1 != NULL ); /* use the max string size */ string1 = random_ascii (10); string2 = random_ascii (50); assert (lwes_event_set_STRING (event1, "st", string1) == 2); assert (lwes_event_set_BOOLEAN (event1, "t_bool", 1) == 3); assert (lwes_event_set_INT_16 (event1, "t_int16", 1) == 4); assert (lwes_event_set_U_INT_16 (event1, "t_uint16", 1) == 5); assert (lwes_event_set_INT_32 (event1, "t_int32", 1) == 6); assert (lwes_event_set_U_INT_32 (event1, "t_uint32", 1) == 7); assert (lwes_event_set_INT_64 (event1, "t_int64", 1) == 8); assert (lwes_event_set_U_INT_64 (event1, "t_uint64", 1) == 9); assert (lwes_event_set_IP_ADDR (event1, "t_ip_addr",ip_addr) == 10); assert (lwes_event_set_STRING (event1, "t_string", string2) == 11); size1 = lwes_event_to_bytes (event1, bytes, MAX_MSG_SIZE, 0); sprintf (bigbuf, "Event1\t%d\n",size1); lwes_event_destroy (event1); lwes_event_type_db_destroy (db); free (string1); free (string2); retbuf = (char *) malloc (sizeof (char) * strlen (bigbuf) + 1); strcpy (retbuf, bigbuf); return retbuf; }
/* note that address_entry has already been validated => exactly one of path, tmpdir or abstract keys are set */ static gboolean try_unix (GDBusServer *server, const gchar *address_entry, GHashTable *key_value_pairs, GError **error) { gboolean ret; const gchar *path; const gchar *tmpdir; const gchar *abstract; GSocketAddress *address; ret = FALSE; address = NULL; path = g_hash_table_lookup (key_value_pairs, "path"); tmpdir = g_hash_table_lookup (key_value_pairs, "tmpdir"); abstract = g_hash_table_lookup (key_value_pairs, "abstract"); if (path != NULL) { address = g_unix_socket_address_new (path); } else if (tmpdir != NULL) { gint n; GString *s; GError *local_error; retry: s = g_string_new (tmpdir); g_string_append (s, "/dbus-"); for (n = 0; n < 8; n++) g_string_append_c (s, random_ascii ()); /* prefer abstract namespace if available */ if (g_unix_socket_address_abstract_names_supported ()) address = g_unix_socket_address_new_with_type (s->str, -1, G_UNIX_SOCKET_ADDRESS_ABSTRACT); else address = g_unix_socket_address_new (s->str); g_string_free (s, TRUE); local_error = NULL; if (!g_socket_listener_add_address (server->listener, address, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL, /* source_object */ NULL, /* effective_address */ &local_error)) { if (local_error->domain == G_IO_ERROR && local_error->code == G_IO_ERROR_ADDRESS_IN_USE) { g_error_free (local_error); goto retry; } g_propagate_error (error, local_error); goto out; } ret = TRUE; goto out; } else if (abstract != NULL) { if (!g_unix_socket_address_abstract_names_supported ()) { g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Abstract name space not supported")); goto out; } address = g_unix_socket_address_new_with_type (abstract, -1, G_UNIX_SOCKET_ADDRESS_ABSTRACT); } else { g_assert_not_reached (); } if (!g_socket_listener_add_address (server->listener, address, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL, /* source_object */ NULL, /* effective_address */ error)) goto out; ret = TRUE; out: if (address != NULL) { /* Fill out client_address if the connection attempt worked */ if (ret) { server->is_using_listener = TRUE; switch (g_unix_socket_address_get_address_type (G_UNIX_SOCKET_ADDRESS (address))) { case G_UNIX_SOCKET_ADDRESS_ABSTRACT: server->client_address = g_strdup_printf ("unix:abstract=%s", g_unix_socket_address_get_path (G_UNIX_SOCKET_ADDRESS (address))); break; case G_UNIX_SOCKET_ADDRESS_PATH: server->client_address = g_strdup_printf ("unix:path=%s", g_unix_socket_address_get_path (G_UNIX_SOCKET_ADDRESS (address))); break; default: g_assert_not_reached (); break; } } g_object_unref (address); } return ret; }