[Swfdec-commits] 2 commits - src/plugin.c src/swfmoz_loader.c src/swfmoz_player.c src/swfmoz_player.h

Pekka Lampila medar at kemper.freedesktop.org
Mon Jun 16 04:26:47 PDT 2008


 src/plugin.c        |    9 +++++++-
 src/swfmoz_loader.c |   12 ++++++++--
 src/swfmoz_player.c |   58 +++++++++++++++++++++++++++++++++++++++++++++++++---
 src/swfmoz_player.h |    5 +++-
 4 files changed, 76 insertions(+), 8 deletions(-)

New commits:
commit 8743e32dd5490ade646c64dfe2d31ec64eac7e99
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jun 13 11:36:03 2008 +0300

    Add support for also sending headers for the launch requests

diff --git a/src/plugin.c b/src/plugin.c
index 5dee945..3d9bf88 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -417,7 +417,14 @@ plugin_handle_event (NPP instance, void *eventp)
 static void
 plugin_url_notify (NPP instance, const char* url, NPReason reason, void* notifyData)
 {
-  SwfdecStream *stream = SWFDEC_STREAM (notifyData);
+  SwfdecStream *stream;
+
+  // plugin_post_url_notify is used for launch so headers can be sent, but we
+  // don't actually care about the notify
+  if (notifyData == NULL)
+    return;
+
+  stream = SWFDEC_STREAM (notifyData);
 
   if (reason == NPRES_NETWORK_ERR) {
     swfdec_stream_error (stream, "Network error");
diff --git a/src/swfmoz_loader.c b/src/swfmoz_loader.c
index 9decb51..afe33af 100644
--- a/src/swfmoz_loader.c
+++ b/src/swfmoz_loader.c
@@ -47,28 +47,6 @@ swfmoz_loader_dispose (GObject *object)
   G_OBJECT_CLASS (swfmoz_loader_parent_class)->dispose (object);
 }
 
-static SwfdecBuffer *
-swfmoz_loader_format_headers (guint header_count, const char **header_names,
-    const char **header_values)
-{
-  GString *string;
-  guint i;
-  gsize len;
-
-  string = g_string_new ("");
-  for (i = 0; i < header_count; i++) {
-    g_string_append (string, header_names[i]);
-    g_string_append (string, ": ");
-    g_string_append (string, header_values[i]);
-    g_string_append (string, "\n");
-  }
-  g_string_append (string, "\n\n");
-
-  len = string->len;
-  return swfdec_buffer_new_for_data (
-      (unsigned char *)g_string_free (string, FALSE), len);
-}
-
 static void
 swfmoz_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
     const char *url, SwfdecBuffer *buffer, guint header_count,
@@ -85,21 +63,13 @@ swfmoz_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
   } else {
     g_object_ref (moz);
     if (buffer) {
-      SwfdecBufferQueue *queue;
       SwfdecBuffer *combined;
 
-      queue = swfdec_buffer_queue_new ();
-      swfdec_buffer_queue_push (queue, swfmoz_loader_format_headers (
-	    header_count, header_names, header_values));
-      swfdec_buffer_queue_push (queue, swfdec_buffer_ref (buffer));
-
-      combined = swfdec_buffer_queue_pull (queue,
-	  swfdec_buffer_queue_get_depth (queue));
+      combined = swfmoz_player_add_headers (buffer, header_count, header_names,
+	  header_values);
       plugin_post_url_notify (moz->instance, url, NULL, (char *)combined->data,
 	  combined->length, moz);
       swfdec_buffer_unref (combined);
-
-      swfdec_buffer_queue_unref (queue);
     } else {
       // FIXME: Impossible to set headers here?
       plugin_get_url_notify (moz->instance, url, NULL, moz);
diff --git a/src/swfmoz_player.c b/src/swfmoz_player.c
index a6aa801..69f5808 100644
--- a/src/swfmoz_player.c
+++ b/src/swfmoz_player.c
@@ -209,14 +209,66 @@ swfmoz_player_redraw (SwfmozPlayer *player, const SwfdecRectangle *extents,
   }
 }
 
+static SwfdecBuffer *
+swfmoz_player_format_headers (guint header_count, const char **header_names,
+    const char **header_values)
+{
+  GString *string;
+  guint i;
+  gsize len;
+
+  g_return_val_if_fail (header_count == 0 || header_names != NULL, NULL);
+  g_return_val_if_fail (header_count == 0 || header_values != NULL, NULL);
+
+  string = g_string_new ("");
+  for (i = 0; i < header_count; i++) {
+    g_string_append (string, header_names[i]);
+    g_string_append (string, ": ");
+    g_string_append (string, header_values[i]);
+    g_string_append (string, "\n");
+  }
+  g_string_append (string, "\n\n");
+
+  len = string->len;
+  return swfdec_buffer_new_for_data (
+      (unsigned char *)g_string_free (string, FALSE), len);
+}
+
+/* Returns a new buffer with the headers prepended, suitable for passing to
+ * plugin_post_url_notify */
+SwfdecBuffer *
+swfmoz_player_add_headers (SwfdecBuffer *data, guint header_count,
+    const char **header_names, const char **header_values)
+{
+  SwfdecBufferQueue *queue;
+  SwfdecBuffer *buffer;
+
+  g_return_val_if_fail (data != NULL, NULL);
+
+  queue = swfdec_buffer_queue_new ();
+  swfdec_buffer_queue_push (queue, swfmoz_player_format_headers (
+	header_count, header_names, header_values));
+  swfdec_buffer_queue_push (queue, swfdec_buffer_ref (data));
+
+  buffer = swfdec_buffer_queue_pull (queue,
+      swfdec_buffer_queue_get_depth (queue));
+  swfdec_buffer_queue_unref (queue);
+
+  return buffer;
+}
+
 static void
 swfmoz_player_launch (SwfmozPlayer *player, const char *url,
-    const char *target, SwfdecBuffer *data, gpointer unused)
+    const char *target, SwfdecBuffer *data, guint header_count,
+    const char **header_names, const char **header_values,  gpointer unused)
 {
   if (data) {
-    plugin_post_url (player->instance, url, target, (const char *)data->data,
-	data->length);
+  // use the notify version of the function so headers can be sent
+  // we don't actually care about the notify
+    plugin_post_url_notify (player->instance, url, target,
+	(const char *)data->data, data->length, NULL);
   } else {
+    // FIXME: no way to send headers here?
     plugin_get_url (player->instance, url, target);
   }
 }
diff --git a/src/swfmoz_player.h b/src/swfmoz_player.h
index 1e89995..1781344 100644
--- a/src/swfmoz_player.h
+++ b/src/swfmoz_player.h
@@ -112,7 +112,10 @@ gboolean	swfmoz_player_mouse_move	(SwfmozPlayer *		player,
 char *		swfmoz_player_get_filename	(SwfmozPlayer *		player);
 void		swfmoz_player_add_variables	(SwfmozPlayer *		player,
 						 const char *		variables);
-					 
+SwfdecBuffer *	swfmoz_player_add_headers	(SwfdecBuffer *		data,
+						 guint			header_count,
+						 const char **		header_names,
+						 const char **		header_values);
 
 G_END_DECLS
 #endif
commit 9610a4ccc0197154f15f6c261dd8361d885b6a57
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jun 13 10:17:43 2008 +0300

    Add support for sending headers to the loader

diff --git a/src/swfmoz_loader.c b/src/swfmoz_loader.c
index c7221a8..9decb51 100644
--- a/src/swfmoz_loader.c
+++ b/src/swfmoz_loader.c
@@ -47,10 +47,32 @@ swfmoz_loader_dispose (GObject *object)
   G_OBJECT_CLASS (swfmoz_loader_parent_class)->dispose (object);
 }
 
+static SwfdecBuffer *
+swfmoz_loader_format_headers (guint header_count, const char **header_names,
+    const char **header_values)
+{
+  GString *string;
+  guint i;
+  gsize len;
+
+  string = g_string_new ("");
+  for (i = 0; i < header_count; i++) {
+    g_string_append (string, header_names[i]);
+    g_string_append (string, ": ");
+    g_string_append (string, header_values[i]);
+    g_string_append (string, "\n");
+  }
+  g_string_append (string, "\n\n");
+
+  len = string->len;
+  return swfdec_buffer_new_for_data (
+      (unsigned char *)g_string_free (string, FALSE), len);
+}
+
 static void
 swfmoz_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
     const char *url, SwfdecBuffer *buffer, guint header_count,
-    const char **header_names, const char ** header_values)
+    const char **header_names, const char **header_values)
 {
   SwfmozPlayer *mozplay = SWFMOZ_PLAYER (player);
   SwfmozLoader *moz = SWFMOZ_LOADER (loader);
@@ -63,9 +85,23 @@ swfmoz_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
   } else {
     g_object_ref (moz);
     if (buffer) {
-      plugin_post_url_notify (moz->instance, url, NULL, (char *)buffer->data,
-	  buffer->length, moz);
+      SwfdecBufferQueue *queue;
+      SwfdecBuffer *combined;
+
+      queue = swfdec_buffer_queue_new ();
+      swfdec_buffer_queue_push (queue, swfmoz_loader_format_headers (
+	    header_count, header_names, header_values));
+      swfdec_buffer_queue_push (queue, swfdec_buffer_ref (buffer));
+
+      combined = swfdec_buffer_queue_pull (queue,
+	  swfdec_buffer_queue_get_depth (queue));
+      plugin_post_url_notify (moz->instance, url, NULL, (char *)combined->data,
+	  combined->length, moz);
+      swfdec_buffer_unref (combined);
+
+      swfdec_buffer_queue_unref (queue);
     } else {
+      // FIXME: Impossible to set headers here?
       plugin_get_url_notify (moz->instance, url, NULL, moz);
     }
   }


More information about the Swfdec-commits mailing list