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); }
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); } }
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); }
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)); }
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); }
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; }