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;
}
Exemple #2
0
/* 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;
}