示例#1
0
static void
swfdec_test_swfdec_socket_finish (SwfdecTestPluginSocket *plugin, int error)
{
  SwfdecTestSwfdecSocket *sock = SWFDEC_TEST_SWFDEC_SOCKET_FROM_PLUGIN (plugin);

  if (error) {
    swfdec_stream_error (SWFDEC_STREAM (sock), "error %d", error);
  } else {
    swfdec_stream_close (SWFDEC_STREAM (sock));
  }
  g_object_unref (sock);
}
示例#2
0
static void
swfdec_load_object_load (SwfdecPlayer *player, gboolean allow, gpointer obj)
{
  SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (obj);

  if (!allow) {
    SWFDEC_WARNING ("SECURITY: no access to %s from %s",
	load->url, swfdec_url_get_url (load->sandbox->url));

    /* call finish */
    swfdec_sandbox_use (load->sandbox);
    load->finish (load->target, NULL);
    swfdec_sandbox_unuse (load->sandbox);

    /* unroot */
    swfdec_player_unroot (player, load);
    return;
  }

  load->loader = swfdec_player_load_with_headers (player, load->url,
      load->buffer, load->header_count, (const char **)load->header_names,
      (const char **)load->header_values);

  swfdec_stream_set_target (SWFDEC_STREAM (load->loader), SWFDEC_STREAM_TARGET (load));
  swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
}
void
swfdec_xml_socket_send (SwfdecAsContext *cx, SwfdecAsObject *object,
    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
  SwfdecXmlSocket *xml;
  SwfdecBuffer *buf;
  const char *send;
  gsize len;

  SWFDEC_AS_CHECK (0, NULL, "s", &send);
  if (argc < 1)
    return;

  xml = swfdec_xml_socket_get (object);
  if (xml == NULL)
    return;
  if (!swfdec_stream_is_open (SWFDEC_STREAM (xml->socket))) {
    SWFDEC_WARNING ("sending data down a closed stream");
    return;
  }

  len = strlen (send) + 1;
  buf = swfdec_buffer_new_for_data (g_memdup (send, len), len);

  if (swfdec_buffer_queue_get_depth (xml->send_queue) == 0) {
    swfdec_buffer_queue_push (xml->send_queue, buf);
    swfdec_xml_socket_do_write (xml);
  } else {
    swfdec_buffer_queue_push (xml->send_queue, buf);
  }
}
示例#4
0
static void
swfdec_test_swfdec_socket_receive (SwfdecTestPluginSocket *plugin,
    unsigned char *data, unsigned long length)
{
  SwfdecTestSwfdecSocket *sock = SWFDEC_TEST_SWFDEC_SOCKET_FROM_PLUGIN (plugin);
  SwfdecBuffer *buffer;

  buffer = swfdec_buffer_new_for_data (g_memdup (data, length), length);
  swfdec_stream_push (SWFDEC_STREAM (sock), buffer);
}
void
swfdec_xml_socket_close (SwfdecAsContext *cx, SwfdecAsObject *object,
    guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
  SwfdecXmlSocket *xml;

  xml = swfdec_xml_socket_get (object);
  if (xml == NULL)
    return;
  swfdec_stream_ensure_closed (SWFDEC_STREAM (xml->socket));
}
static void
swfdec_xml_socket_ensure_closed (SwfdecXmlSocket *xml)
{
  SwfdecPlayer *player = SWFDEC_PLAYER (swfdec_gc_object_get_context (xml));

  if (xml->socket == NULL)
    return;

  swfdec_buffer_queue_clear (xml->send_queue);
  swfdec_stream_set_target (SWFDEC_STREAM (xml->socket), NULL);
  g_object_unref (xml->socket);
  xml->socket = NULL;
  player->priv->xml_sockets = g_slist_remove (player->priv->xml_sockets, xml);
}
示例#7
0
static void
swfdec_test_swfdec_socket_connect (SwfdecSocket *sock_, SwfdecPlayer *player, 
    const char *hostname, guint port)
{
  SwfdecTestSwfdecSocket *sock = SWFDEC_TEST_SWFDEC_SOCKET (sock_);
  SwfdecTestPlugin *plugin = g_object_get_data (G_OBJECT (player), "plugin");

  g_assert (plugin);
  sock->plugin.host = g_strdup (hostname);
  sock->plugin.port = port;
  plugin->request_socket (plugin, &sock->plugin);
  g_object_ref (sock);
  /* FIXME: allow testing this, too? */
  swfdec_stream_open (SWFDEC_STREAM (sock));
}
示例#8
0
static void
swfdec_load_object_dispose (GObject *object)
{
  SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (object);

  if (load->loader) {
    swfdec_stream_set_target (SWFDEC_STREAM (load->loader), NULL);
    g_object_unref (load->loader);
    load->loader = NULL;
  }
  if (load->buffer) {
    swfdec_buffer_unref (load->buffer);
    load->buffer = NULL;
  }
  g_strfreev (load->header_names);
  g_strfreev (load->header_values);

  G_OBJECT_CLASS (swfdec_load_object_parent_class)->dispose (object);
}
示例#9
0
static void
swfdec_load_object_stream_target_error (SwfdecStreamTarget *target,
    SwfdecStream *stream)
{
  SwfdecLoader *loader = SWFDEC_LOADER (stream);
  SwfdecLoadObject *load_object = SWFDEC_LOAD_OBJECT (target);

  /* break reference to the loader */
  swfdec_stream_set_target (SWFDEC_STREAM (loader), NULL);
  load_object->loader = NULL;
  g_object_unref (loader);

  /* call finish */
  swfdec_sandbox_use (load_object->sandbox);
  load_object->finish (load_object->target, NULL);
  swfdec_sandbox_unuse (load_object->sandbox);

  /* unroot */
  swfdec_player_unroot (SWFDEC_PLAYER (
	swfdec_gc_object_get_context (load_object->sandbox)), load_object);
}
static SwfdecXmlSocket *
swfdec_xml_socket_create (SwfdecAsObject *target, SwfdecSandbox *sandbox, const char *hostname, guint port)
{
  SwfdecPlayer *player = SWFDEC_PLAYER (target->context);
  SwfdecXmlSocket *xml;
  SwfdecSocket *sock;

  SWFDEC_FIXME ("implement security checks please");
  sock = swfdec_player_create_socket (player, hostname, port);
  if (sock == NULL)
    return NULL;

  xml = g_object_new (SWFDEC_TYPE_XML_SOCKET, "context", player, NULL);
  /* we prepend here, so send etc find the newest socket */
  player->priv->xml_sockets = g_slist_prepend (player->priv->xml_sockets, xml);

  xml->target = target;
  xml->socket = sock;
  xml->sandbox = sandbox;
  swfdec_stream_set_target (SWFDEC_STREAM (sock), SWFDEC_STREAM_TARGET (xml));

  return xml;
}