[Swfdec-commits] 35 commits - test/custom test/.gitignore test/image test/Makefile.am test/swfdec_test_buffer.c test/swfdec_test_buffer.h test/swfdec_test.c test/swfdec_test_function.c test/swfdec_test_http_request.c test/swfdec_test_http_request.h test/swfdec_test_http_server.c test/swfdec_test_image.c test/swfdec_test_initialize.as test/swfdec_test_initialize.h test/swfdec_test_plugin.c test/swfdec_test_plugin.h test/swfdec_test_socket.c test/swfdec_test_socket.h test/swfdec_test_test.c test/swfdec_test_test.h test/swfdec_test_utils.c test/swfdec_test_utils.h test/trace

Benjamin Otte company at kemper.freedesktop.org
Sun Feb 3 13:15:12 PST 2008


 test/.gitignore                 |    2 
 test/Makefile.am                |   20 +-
 test/custom/Makefile.am         |    2 
 test/image/Makefile.am          |    2 
 test/swfdec_test.c              |    6 
 test/swfdec_test_buffer.c       |  251 +++++++++++++++++++++++++++++
 test/swfdec_test_buffer.h       |   60 ++++++
 test/swfdec_test_function.c     |    2 
 test/swfdec_test_http_request.c |  125 ++++++++++++--
 test/swfdec_test_http_request.h |    3 
 test/swfdec_test_http_server.c  |   58 ++++--
 test/swfdec_test_image.c        |    8 
 test/swfdec_test_initialize.as  |   19 +-
 test/swfdec_test_initialize.h   |  208 ++++++++++++++----------
 test/swfdec_test_plugin.c       |  137 +++++++++++++++
 test/swfdec_test_plugin.h       |   92 ++++++++++
 test/swfdec_test_socket.c       |  271 +++++++++++++++++++++++++++++++
 test/swfdec_test_socket.h       |   61 +++++++
 test/swfdec_test_test.c         |  344 ++++++++++++++++------------------------
 test/swfdec_test_test.h         |   21 +-
 test/swfdec_test_utils.c        |   44 +++++
 test/swfdec_test_utils.h        |   34 +++
 test/trace/Makefile.am          |    2 
 test/trace/default.stas         |    9 -
 test/trace/default.sts          |binary
 25 files changed, 1432 insertions(+), 349 deletions(-)

New commits:
commit 2b22e9fd14496fb6e8bb0b2911cd22979ce0132f
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 21:39:05 2008 +0100

    update gitignore for changed binary name

diff --git a/test/.gitignore b/test/.gitignore
index 4573b5b..16b89ee 100644
--- a/test/.gitignore
+++ b/test/.gitignore
@@ -5,4 +5,4 @@
 swfdec_test_function_list.h
 
 compiler
-test
+swfdec-test
commit a1782c570befead0cc61abda02dfb23f64735c41
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 21:38:21 2008 +0100

    rewrite socket class
    
    It works ok, but has races when sending data from one app to the other and I
    dislike that.

diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 7b10699..1737e6c 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -46,7 +46,10 @@ HTTPRequest.prototype.close = Native.HTTPRequest_close;
 
 Socket = Native.Socket;
 Socket.prototype = {};
-Socket.prototype.process = Native.Socket_process;
+Socket.prototype.getConnection = Native.Socket_getConnection;
+Socket.prototype.receive = Native.Socket_receive;
+Socket.prototype.send = Native.Socket_send;
+Socket.prototype.close = Native.Socket_close;
 
 Test = Native.Test;
 Test.prototype = {};
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 3bbea82..713a7c7 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,7 +2,7 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0x07, 0x03, 0x41,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0x43, 0x03, 0x45,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
   0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
@@ -35,89 +35,98 @@ static const unsigned char swfdec_test_initialize[] = {
   0x67, 0x00, 0x73, 0x65,  0x6E, 0x64, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
   0x73, 0x74, 0x5F, 0x73,  0x65, 0x6E, 0x64, 0x00,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x48, 0x54,
   0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x00,
-  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x00, 0x70,  0x72, 0x6F, 0x63, 0x65,  0x73, 0x73, 0x00, 0x53,
-  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x5F, 0x70, 0x72,  0x6F, 0x63, 0x65, 0x73,  0x73, 0x00, 0x54, 0x65,
-  0x73, 0x74, 0x00, 0x61,  0x64, 0x76, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
-  0x61, 0x64, 0x76, 0x61,  0x6E, 0x63, 0x65, 0x00,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,
-  0x76, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,
-  0x76, 0x65, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x54,
-  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x70, 0x72,  0x65, 0x73, 0x73, 0x00,
-  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x72, 0x65,  0x6C, 0x65, 0x61, 0x73,  0x65, 0x00, 0x54, 0x65,
-  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x72, 0x65, 0x6C,  0x65, 0x61, 0x73, 0x65,
-  0x00, 0x72, 0x65, 0x6E,  0x64, 0x65, 0x72, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x72, 0x65, 0x6E,
-  0x64, 0x65, 0x72, 0x00,  0x72, 0x65, 0x73, 0x65,  0x74, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,
-  0x65, 0x73, 0x65, 0x74,  0x00, 0x72, 0x61, 0x74,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,
-  0x65, 0x74, 0x5F, 0x72,  0x61, 0x74, 0x65, 0x00,  0x74, 0x72, 0x61, 0x63,  0x65, 0x00, 0x54, 0x65,
-  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x74,  0x72, 0x61, 0x63, 0x65,  0x00, 0x70, 0x72, 0x69,
-  0x6E, 0x74, 0x00, 0x73,  0x00, 0x49, 0x4E, 0x46,  0x4F, 0x3A, 0x20, 0x00,  0x65, 0x72, 0x72, 0x6F,
-  0x72, 0x00, 0x45, 0x52,  0x52, 0x4F, 0x52, 0x3A,  0x20, 0x00, 0x96, 0x04,  0x00, 0x08, 0x00, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x00, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,
-  0x04, 0x00, 0x08, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x03,  0x4E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x00, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x05, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x06, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x07,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x07,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,
+  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x00, 0x67,  0x65, 0x74, 0x43, 0x6F,  0x6E, 0x6E, 0x65, 0x63,
+  0x74, 0x69, 0x6F, 0x6E,  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x43,
+  0x6F, 0x6E, 0x6E, 0x65,  0x63, 0x74, 0x69, 0x6F,  0x6E, 0x00, 0x72, 0x65,  0x63, 0x65, 0x69, 0x76,
+  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x72, 0x65, 0x63,  0x65, 0x69, 0x76, 0x65,
+  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x73, 0x65, 0x6E, 0x64,  0x00, 0x53, 0x6F, 0x63,
+  0x6B, 0x65, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x00, 0x61,
+  0x64, 0x76, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x61, 0x64, 0x76, 0x61,
+  0x6E, 0x63, 0x65, 0x00,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,  0x76, 0x65, 0x00, 0x54,
+  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,  0x76, 0x65, 0x00, 0x6D,
+  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
+  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x70, 0x72,  0x65, 0x73, 0x73, 0x00,  0x6D, 0x6F, 0x75, 0x73,
+  0x65, 0x5F, 0x72, 0x65,  0x6C, 0x65, 0x61, 0x73,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,
+  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x72, 0x65, 0x6C,  0x65, 0x61, 0x73, 0x65,  0x00, 0x72, 0x65, 0x6E,
+  0x64, 0x65, 0x72, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x72, 0x65, 0x6E,  0x64, 0x65, 0x72, 0x00,
+  0x72, 0x65, 0x73, 0x65,  0x74, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,  0x65, 0x73, 0x65, 0x74,
+  0x00, 0x72, 0x61, 0x74,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x72,
+  0x61, 0x74, 0x65, 0x00,  0x74, 0x72, 0x61, 0x63,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,
+  0x65, 0x74, 0x5F, 0x74,  0x72, 0x61, 0x63, 0x65,  0x00, 0x70, 0x72, 0x69,  0x6E, 0x74, 0x00, 0x73,
+  0x00, 0x49, 0x4E, 0x46,  0x4F, 0x3A, 0x20, 0x00,  0x65, 0x72, 0x72, 0x6F,  0x72, 0x00, 0x45, 0x52,
+  0x52, 0x4F, 0x52, 0x3A,  0x20, 0x00, 0x96, 0x04,  0x00, 0x08, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x00, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x04, 0x00, 0x08, 0x02,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x03,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,
   0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x08, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x09, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x0A,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
-  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x0C, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x4E,
-  0x1D, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x0D,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x4E, 0x4F, 0x96, 0x03,
-  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x10, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x0F,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x09, 0x00,  0x08, 0x12, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x13, 0x40, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x15, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x14, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x17,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x16, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,
-  0x96, 0x09, 0x00, 0x08,  0x18, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1A,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x05, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x06, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x07,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x07,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,  0x96, 0x07, 0x00, 0x08,
+  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x08, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x09, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x0A,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,  0x4E, 0x4F, 0x96, 0x04,
+  0x00, 0x08, 0x0C, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x4E,  0x1D, 0x96, 0x02, 0x00,
+  0x08, 0x0C, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x0D,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x4E, 0x4F, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x10, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x0F,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x0C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,
+  0x17, 0x96, 0x09, 0x00,  0x08, 0x12, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,  0x13, 0x40, 0x1D, 0x96,
+  0x02, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,
+  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x15, 0x4E, 0x96, 0x09,
+  0x00, 0x08, 0x14, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x17,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x16, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,
+  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x96, 0x09, 0x00, 0x08,
+  0x18, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x1B, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1A,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x02, 0x00,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1E,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x1D,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1C, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x11, 0x52, 0x17, 0x96,
+  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1F,  0x07, 0x03, 0x00, 0x00,
   0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,
-  0x17, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1E,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1D,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1C, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1F,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x22, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x23, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x25, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x12,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x27,  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x28, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x28, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x29,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2A,
-  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x2B, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2B, 0x4E,
-  0x1D, 0x96, 0x02, 0x00,  0x08, 0x2B, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x2B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x2C,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2D,  0x4E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x2B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2E, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2F, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x2B, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x30, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x31, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x2B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x04, 0x00, 0x08,  0x32, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x33, 0x4E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x2B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x34,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x35,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2B, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x36, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x37, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x39, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x38, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x2B, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3B,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x3A, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x2B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x3C,  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x3D, 0x1C,  0x12, 0x9D, 0x02, 0x00,
-  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x3E, 0x08,  0x3D, 0x1C, 0x47, 0x96,  0x07, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3C, 0x52,  0x17, 0x1D, 0x96, 0x02,
-  0x00, 0x08, 0x3F, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x3D, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,
-  0x08, 0x40, 0x08, 0x3D,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3C, 0x52, 0x17,  0x1D, 0x00
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x22, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x23, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x24, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x25, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x27,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x28, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x28, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x29,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2A,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x28, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2B, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2C, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x24, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x2D, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x28, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x26, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x2E, 0x4E, 0x4F, 0x96,
+  0x04, 0x00, 0x08, 0x2F,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2F,  0x4E, 0x1D, 0x96, 0x02,
+  0x00, 0x08, 0x2F, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x2F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x30, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x31, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x2F,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x32,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x33,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2F, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x34, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x35, 0x4E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x2F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x36, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x37, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x2F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x38, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x39, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x2F,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x3A,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3B,
+  0x4E, 0x4F, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3D, 0x4E, 0x96,
+  0x09, 0x00, 0x08, 0x3C,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x2F, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x3F, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x3E, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x2F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,
+  0x96, 0x02, 0x00, 0x08,  0x40, 0x8E, 0x0B, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,
+  0x00, 0x27, 0x00, 0x96,  0x02, 0x00, 0x08, 0x41,  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x1B, 0x00, 0x96,
+  0x04, 0x00, 0x08, 0x42,  0x08, 0x41, 0x1C, 0x47,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x40,  0x52, 0x17, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x43,
+  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x41, 0x1C,  0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x44, 0x08,
+  0x41, 0x1C, 0x47, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x40, 0x52,  0x17, 0x1D, 0x00
 };
 
diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index 7cf921c..036bd7e 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -24,6 +24,7 @@
 #include <libsoup/soup-address.h>
 
 #include "swfdec_test_socket.h"
+#include "swfdec_test_buffer.h"
 #include "swfdec_test_function.h"
 
 static void
@@ -62,6 +63,9 @@ swfdec_test_socket_dispose (GObject *object)
     g_main_context_unref (sock->context);
     sock->context = NULL;
   }
+  g_slist_foreach (sock->connections, (GFunc) g_object_unref, NULL);
+  g_slist_free (sock->connections);
+  sock->connections = NULL;
 
   G_OBJECT_CLASS (swfdec_test_socket_parent_class)->dispose (object);
 }
@@ -82,53 +86,151 @@ swfdec_test_socket_init (SwfdecTestSocket *sock)
 
 /*** AS CODE ***/
 
-SWFDEC_TEST_FUNCTION ("Socket_process", swfdec_test_socket_process, 0)
-void
-swfdec_test_socket_process (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
-    SwfdecAsValue *argv, SwfdecAsValue *retval)
-{
-  SwfdecTestSocket *sock;
-  
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
+#define swfdec_test_socket_process(sock) do { \
+  g_usleep (1000); \
+} while (g_main_context_iteration ((sock)->context, FALSE))
 
-  while (g_main_context_iteration (sock->context, FALSE));
+static void
+swfdec_test_socket_new_connection (SoupSocket *server, SoupSocket *conn, SwfdecTestSocket *sock)
+{
+  g_object_ref (conn);
+  sock->connections = g_slist_append (sock->connections, conn);
 }
 
-static void swfdec_test_socket_attach (SwfdecTestSocket *sock, SoupSocket *ssock);
-
 static void
-swfdec_test_socket_new_connection (SoupSocket *server, SoupSocket *conn, SwfdecTestSocket *sock)
+swfdec_test_socket_attach (SwfdecTestSocket *sock, SoupSocket *ssock)
 {
-  SwfdecAsContext *context = SWFDEC_AS_OBJECT (sock)->context;
-  SwfdecAsValue val;
+  g_assert (sock->socket == NULL);
+
+  sock->socket = ssock;
+  g_signal_connect (ssock, "new-connection", 
+      G_CALLBACK (swfdec_test_socket_new_connection), sock);
+}
+
+SWFDEC_TEST_FUNCTION ("Socket_getConnection", swfdec_test_socket_getConnection, 0)
+void
+swfdec_test_socket_getConnection (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestSocket *sock;
   SwfdecAsObject *new;
+  SwfdecAsValue val;
 
-  if (!swfdec_as_context_use_mem (context, sizeof (SwfdecTestSocket)))
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
+
+  if (!sock->listening) {
+    swfdec_test_throw (cx, "only server sockets may call getConnection");
+    return;
+  }
+  swfdec_test_socket_process (sock);
+  if (sock->connections == NULL) {
+    SWFDEC_AS_VALUE_SET_NULL (retval);
+    return;
+  }
+
+  if (!swfdec_as_context_use_mem (cx, sizeof (SwfdecTestSocket)))
     return;
 
   new = g_object_new (SWFDEC_TYPE_TEST_SOCKET, NULL);
-  swfdec_as_object_add (new, context, sizeof (SwfdecTestSocket));
-  swfdec_as_object_get_variable (context->global, 
-      swfdec_as_context_get_string (context, "Socket"), &val);
+  swfdec_as_object_add (new, cx, sizeof (SwfdecTestSocket));
+  swfdec_as_object_get_variable (cx->global, 
+      swfdec_as_context_get_string (cx, "Socket"), &val);
   if (SWFDEC_AS_VALUE_IS_OBJECT (&val))
     swfdec_as_object_set_constructor (new, SWFDEC_AS_VALUE_GET_OBJECT (&val));
 
-  g_object_ref (conn);
-  swfdec_test_socket_attach (SWFDEC_TEST_SOCKET (new), conn);
-  SWFDEC_AS_VALUE_SET_OBJECT (&val, new);
-  swfdec_as_object_call (SWFDEC_AS_OBJECT (sock), 
-      swfdec_as_context_get_string (context, "onNewConnection"),
-      1, &val, NULL);
+  swfdec_test_socket_attach (SWFDEC_TEST_SOCKET (new), sock->connections->data);
+  sock->connections = g_slist_remove (sock->connections, sock->connections->data);
+  SWFDEC_AS_VALUE_SET_OBJECT (retval, new);
 }
 
-static void
-swfdec_test_socket_attach (SwfdecTestSocket *sock, SoupSocket *ssock)
+SWFDEC_TEST_FUNCTION ("Socket_send", swfdec_test_socket_send, 0)
+void
+swfdec_test_socket_send (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
-  g_assert (sock->socket == NULL);
+  SwfdecTestSocket *sock;
+  SwfdecBuffer *buffer;
+  GError *error = NULL;
+  gsize written;
 
-  sock->socket = ssock;
-  g_signal_connect (ssock, "new-connection", 
-      G_CALLBACK (swfdec_test_socket_new_connection), sock);
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
+
+  if (sock->listening) {
+    swfdec_test_throw (cx, "server sockets may not call send");
+    return;
+  }
+  swfdec_test_socket_process (sock);
+  buffer = swfdec_test_buffer_from_args (cx, argc, argv);
+  if (soup_socket_write (sock->socket, buffer->data, buffer->length, &written,
+	NULL, &error) != SOUP_SOCKET_OK) {
+    swfdec_test_throw (cx, "%s", error->message);
+    g_error_free (error);
+  } else if (buffer->length != written) {
+    swfdec_test_throw (cx, "only wrote %u bytes of %u", written, buffer->length);
+  }
+  swfdec_buffer_unref (buffer);
+  swfdec_test_socket_process (sock);
+}
+
+SWFDEC_TEST_FUNCTION ("Socket_receive", swfdec_test_socket_receive, 0)
+void
+swfdec_test_socket_receive (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestSocket *sock;
+  SwfdecBuffer *buffer;
+  GError *error = NULL;
+  gsize written;
+  guint len;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "|i", &len);
+
+  if (sock->listening) {
+    swfdec_test_throw (cx, "server sockets may not call receive");
+    return;
+  }
+  swfdec_test_socket_process (sock);
+  if (len > 0) {
+    buffer = swfdec_buffer_new_and_alloc (len);
+    if (soup_socket_read (sock->socket, buffer->data, buffer->length, &len,
+	  NULL, &error) != SOUP_SOCKET_OK) {
+      swfdec_test_throw (cx, "%s", error->message);
+      g_error_free (error);
+      swfdec_buffer_unref (buffer);
+      return;
+    } else if (buffer->length != len) {
+      swfdec_test_throw (cx, "only read %u bytes of %u", written, buffer->length);
+      swfdec_buffer_unref (buffer);
+      return;
+    }
+  } else {
+    SwfdecBufferQueue *queue = swfdec_buffer_queue_new ();
+    SoupSocketIOStatus status = SOUP_SOCKET_OK;
+    while (status == SOUP_SOCKET_OK) {
+      buffer = swfdec_buffer_new_and_alloc (128);
+      status = soup_socket_read (sock->socket, buffer->data, 128, &
+	  buffer->length, NULL, &error);
+      if (status != SOUP_SOCKET_OK && status != SOUP_SOCKET_WOULD_BLOCK) {
+	swfdec_test_throw (cx, "%s", error->message);
+	g_error_free (error);
+	swfdec_buffer_unref (buffer);
+	swfdec_buffer_queue_unref (queue);
+	return;
+      }
+      swfdec_buffer_queue_push (queue, buffer);
+    }
+    buffer = swfdec_buffer_queue_pull (queue, swfdec_buffer_queue_get_depth (queue));
+    swfdec_buffer_queue_unref (queue);
+  }
+  SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_test_buffer_new (cx, buffer));
+}
+
+SWFDEC_TEST_FUNCTION ("Socket_close", swfdec_test_socket_close, 0)
+void
+swfdec_test_socket_close (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  swfdec_test_throw (cx, "implement");
 }
 
 SWFDEC_TEST_FUNCTION ("Socket", swfdec_test_socket_create, swfdec_test_socket_get_type)
@@ -137,11 +239,16 @@ swfdec_test_socket_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
     SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
   SwfdecTestSocket *sock;
+  SoupSocket *ssock;
   int port;
   SoupAddress *addr;
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "i", &port);
 
+  if (!swfdec_as_context_is_constructing (cx))
+    return;
+
+  sock->listening = TRUE;
   /* FIXME: throw here? */
   if (port < 1024 || port >= 65535) {
     swfdec_test_throw (cx, "invalid port %d", port);
@@ -149,13 +256,14 @@ swfdec_test_socket_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
   }
 
   addr = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV4, port);
-  sock->socket = soup_socket_new (
+  ssock = soup_socket_new (
       SOUP_SOCKET_FLAG_NONBLOCKING, TRUE, 
       SOUP_SOCKET_ASYNC_CONTEXT, sock->context,
       SOUP_SOCKET_LOCAL_ADDRESS, addr,
       NULL);
   g_object_unref (addr);
-  if (!soup_socket_listen (sock->socket)) {
+  swfdec_test_socket_attach (sock, ssock);
+  if (!soup_socket_listen (ssock)) {
     swfdec_test_throw (cx, "failed to listen");
     return;
   }
diff --git a/test/swfdec_test_socket.h b/test/swfdec_test_socket.h
index c33fb3d..95a51de 100644
--- a/test/swfdec_test_socket.h
+++ b/test/swfdec_test_socket.h
@@ -42,6 +42,11 @@ struct _SwfdecTestSocket
 
   GMainContext *	context;	/* the main context we're running in */
   SoupSocket *		socket;		/* the socket we're servicing */
+  gboolean		listening;	/* TRUE if it's a listening socket */
+  gboolean		connected;	/* TRUE if the connection is still alive (valid for both types) */
+
+  /* for listening sockets */
+  GSList *		connections;	/* connections that still need to be given out */
 };
 
 struct _SwfdecTestSocketClass
commit 9779b43e3900003d3154938e1be900c9b8302482
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 21:29:20 2008 +0100

    add swfdec_test_buffer_from_args()

diff --git a/test/swfdec_test_buffer.c b/test/swfdec_test_buffer.c
index e637298..e05869b 100644
--- a/test/swfdec_test_buffer.c
+++ b/test/swfdec_test_buffer.c
@@ -195,17 +195,13 @@ swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
   SWFDEC_AS_VALUE_SET_OBJECT (retval, buffer);
 }
 
-SWFDEC_TEST_FUNCTION ("Buffer", swfdec_test_buffer_create, swfdec_test_buffer_get_type)
-void
-swfdec_test_buffer_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
-    SwfdecAsValue *argv, SwfdecAsValue *retval)
+SwfdecBuffer *
+swfdec_test_buffer_from_args (SwfdecAsContext *cx, guint argc, SwfdecAsValue *argv)
 {
   SwfdecBufferQueue *queue;
-  SwfdecTestBuffer *buffer;
+  SwfdecBuffer *buffer;
   guint i;
 
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "");
-
   queue = swfdec_buffer_queue_new ();
   for (i = 0; i < argc; i++) {
     SwfdecBuffer *b = NULL;
@@ -228,10 +224,28 @@ swfdec_test_buffer_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
   }
   i = swfdec_buffer_queue_get_depth (queue);
   if (i) {
-    buffer->buffer = swfdec_buffer_queue_pull (queue, i);
+    buffer = swfdec_buffer_queue_pull (queue, i);
   } else {
-    buffer->buffer = swfdec_buffer_new ();
+    buffer = swfdec_buffer_new ();
   }
   swfdec_buffer_queue_unref (queue);
+
+  return buffer;
+}
+
+SWFDEC_TEST_FUNCTION ("Buffer", swfdec_test_buffer_create, swfdec_test_buffer_get_type)
+void
+swfdec_test_buffer_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestBuffer *buffer;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "");
+
+  if (!swfdec_as_context_is_constructing (cx))
+    return;
+
+  buffer->buffer = swfdec_test_buffer_from_args (cx, argc, argv);
 }
 
+
diff --git a/test/swfdec_test_buffer.h b/test/swfdec_test_buffer.h
index d80a9f8..7e70f87 100644
--- a/test/swfdec_test_buffer.h
+++ b/test/swfdec_test_buffer.h
@@ -52,5 +52,9 @@ GType		swfdec_test_buffer_get_type	(void);
 SwfdecAsObject *swfdec_test_buffer_new		(SwfdecAsContext *	context,
 						 SwfdecBuffer *		buffer);
 
+SwfdecBuffer *	swfdec_test_buffer_from_args	(SwfdecAsContext *	cx,
+						 guint			argc,
+						 SwfdecAsValue *	argv);
+
 G_END_DECLS
 #endif
commit e44ef75c1357fe3e9d286755e572c83eb118bee3
Merge: df37812... 8769783...
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 12:48:03 2008 +0100

    Merge commit 'origin/test' into test

commit df378127d76d216789bb76ef46b68b5ebe0b4118
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 12:47:54 2008 +0100

    give absolute filenames to the plugin

diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index 71b5c1e..e056be6 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -74,7 +74,14 @@ swfdec_test_test_load_plugin (SwfdecTestTest *test, const char *filename)
 {
   memset (&test->plugin, 0, sizeof (SwfdecTestPlugin));
   /* initialize test->plugin */
-  test->plugin.filename = g_strdup (filename);
+  /* FIXME: This assumes filenames - do we wanna allow http? */
+  if (g_path_is_absolute (filename)) {
+    test->plugin.filename = g_strdup (filename);
+  } else {
+    char *cur = g_get_current_dir ();
+    test->plugin.filename = g_build_filename (cur, filename, NULL);
+    g_free (cur);
+  }
   test->plugin.trace = swfdec_test_test_trace;
   test->plugin.quit = swfdec_test_test_quit;
   test->plugin.error = swfdec_test_test_error;
commit e13780c8c04faaa7128b1d7db682e2b6201b7280
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 12:47:36 2008 +0100

    make sure callbacks aren't calling back into the script engine on dispose

diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index 0d6bd56..71b5c1e 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -127,6 +127,9 @@ swfdec_test_test_dispose (GObject *object)
 {
   SwfdecTestTest *test = SWFDEC_TEST_TEST (object);
 
+  test->plugin_error = TRUE; /* set to avoid callbacks into the engine */
+  swfdec_test_test_unload_plugin (test);
+
   if (test->trace) {
     swfdec_buffer_queue_unref (test->trace);
     test->trace = NULL;
@@ -134,7 +137,6 @@ swfdec_test_test_dispose (GObject *object)
 
   g_free (test->filename);
   test->filename = NULL;
-  swfdec_test_test_unload_plugin (test);
 
   G_OBJECT_CLASS (swfdec_test_test_parent_class)->dispose (object);
 }
commit 9b27e26665e521b216f0666ee9d53aea431d9bf4
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 12:46:48 2008 +0100

    advance (0) not useful anymore

diff --git a/test/trace/default.stas b/test/trace/default.stas
index 00b4b9a..5ddcddc 100644
--- a/test/trace/default.stas
+++ b/test/trace/default.stas
@@ -25,7 +25,7 @@ run_test = function (t, file) {
     var trace = Buffer.load (file + ".trace");
     t.advance (0);
     t.advance (Math.ceil (10000 / t.rate));
-    trace = t.trace.diff (trace);
+    trace = trace.diff (t.trace);
     if (trace) {
       error ("different trace output");
       Native.print (trace);
commit d2d0ac063aca6edc51820959579c276dd2aeea2c
Author: Benjamin Otte <otte at gnome.org>
Date:   Sun Feb 3 12:46:05 2008 +0100

    allow using an env var to set the player
    
    useful for make check

diff --git a/test/swfdec_test.c b/test/swfdec_test.c
index 0559c75..27fd554 100644
--- a/test/swfdec_test.c
+++ b/test/swfdec_test.c
@@ -107,6 +107,10 @@ main (int argc, char **argv)
     return EXIT_FAILURE;
   }
 
+  /* allow env vars instead of options - eases running make check with different settings */
+  if (swfdec_test_plugin_name == NULL)
+    swfdec_test_plugin_name = g_strdup (g_getenv ("SWFDEC_TEST_PLAYER"));
+
   script = load_script (script_filename);
   g_free (script_filename);
   if (script == NULL)
commit 87697834123d26e82125e720502ba1b4a0ee9659
Merge: bf6e150... c7a4757...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sat Feb 2 02:46:44 2008 +0200

    Merge branch 'test' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec into httptest

commit bf6e1505a60382c0478a7ab3e964128437ba3933
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 18:16:18 2008 +0200

    Add port property for HTTPServer

diff --git a/test/swfdec_test_http_server.c b/test/swfdec_test_http_server.c
index c30f0a0..27960bd 100644
--- a/test/swfdec_test_http_server.c
+++ b/test/swfdec_test_http_server.c
@@ -153,6 +153,18 @@ swfdec_test_http_server_init (SwfdecTestHTTPServer *server)
 
 /*** AS CODE ***/
 
+SWFDEC_TEST_FUNCTION ("HTTPServer_get_port", swfdec_test_http_server_get_port, 0)
+void
+swfdec_test_http_server_get_port (SwfdecAsContext *cx, SwfdecAsObject *object,
+    guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestHTTPServer *server;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &server, "");
+
+  SWFDEC_AS_VALUE_SET_INT (retval, server->port);
+}
+
 SWFDEC_TEST_FUNCTION ("HTTPServer_getRequest", swfdec_test_http_server_get_request, 0)
 void
 swfdec_test_http_server_get_request (SwfdecAsContext *cx,
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 018c56c..7b10699 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -30,6 +30,7 @@ Image.prototype.save = Native.Image_save;
 HTTPServer = Native.HTTPServer;
 HTTPServer.prototype = {};
 HTTPServer.prototype.getRequest = Native.HTTPServer_getRequest;
+HTTPServer.prototype.addProperty ("port", Native.HTTPServer_get_port, null);
 
 HTTPRequest = new Object ();
 HTTPRequest.prototype = {};
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index e0ebfd3..3bbea82 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,7 +2,7 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0xEE, 0x02, 0x3F,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0x07, 0x03, 0x41,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
   0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
@@ -11,109 +11,113 @@ static const unsigned char swfdec_test_initialize[] = {
   0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x73, 0x61,  0x76, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x53,
   0x65, 0x72, 0x76, 0x65,  0x72, 0x00, 0x67, 0x65,  0x74, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
   0x00, 0x48, 0x54, 0x54,  0x50, 0x53, 0x65, 0x72,  0x76, 0x65, 0x72, 0x5F,  0x67, 0x65, 0x74, 0x52,
-  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
-  0x73, 0x74, 0x00, 0x4F,  0x62, 0x6A, 0x65, 0x63,  0x74, 0x00, 0x73, 0x65,  0x72, 0x76, 0x65, 0x72,
+  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x00, 0x70,  0x6F, 0x72, 0x74, 0x00,  0x48, 0x54, 0x54, 0x50,
+  0x53, 0x65, 0x72, 0x76,  0x65, 0x72, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x70,  0x6F, 0x72, 0x74, 0x00,
+  0x61, 0x64, 0x64, 0x50,  0x72, 0x6F, 0x70, 0x65,  0x72, 0x74, 0x79, 0x00,  0x48, 0x54, 0x54, 0x50,
+  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x00,  0x4F, 0x62, 0x6A, 0x65,  0x63, 0x74, 0x00, 0x73,
+  0x65, 0x72, 0x76, 0x65,  0x72, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,
+  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x73, 0x65,  0x72, 0x76, 0x65, 0x72,  0x00, 0x75, 0x72, 0x6C,
   0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,
-  0x5F, 0x73, 0x65, 0x72,  0x76, 0x65, 0x72, 0x00,  0x61, 0x64, 0x64, 0x50,  0x72, 0x6F, 0x70, 0x65,
-  0x72, 0x74, 0x79, 0x00,  0x75, 0x72, 0x6C, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,
-  0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x75, 0x72, 0x6C, 0x00,  0x70, 0x61, 0x74, 0x68,
-  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,
-  0x5F, 0x70, 0x61, 0x74,  0x68, 0x00, 0x68, 0x65,  0x61, 0x64, 0x65, 0x72,  0x73, 0x00, 0x48, 0x54,
-  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x68, 0x65,
-  0x61, 0x64, 0x65, 0x72,  0x73, 0x00, 0x63, 0x6F,  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,
-  0x65, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,
-  0x74, 0x5F, 0x63, 0x6F,  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x48, 0x54,
-  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x73, 0x65,  0x74, 0x5F, 0x63, 0x6F,
-  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x73, 0x74,  0x61, 0x74, 0x75, 0x73,
-  0x43, 0x6F, 0x64, 0x65,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
-  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x73, 0x74, 0x61,  0x74, 0x75, 0x73, 0x43,  0x6F, 0x64, 0x65, 0x00,
-  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,  0x73, 0x65, 0x74, 0x5F,
-  0x73, 0x74, 0x61, 0x74,  0x75, 0x73, 0x43, 0x6F,  0x64, 0x65, 0x00, 0x74,  0x6F, 0x53, 0x74, 0x72,
-  0x69, 0x6E, 0x67, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,
-  0x74, 0x6F, 0x53, 0x74,  0x72, 0x69, 0x6E, 0x67,  0x00, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x48, 0x54,
-  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x73, 0x65,  0x6E, 0x64, 0x00, 0x63,
-  0x6C, 0x6F, 0x73, 0x65,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
-  0x5F, 0x63, 0x6C, 0x6F,  0x73, 0x65, 0x00, 0x53,  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x00, 0x70, 0x72,
-  0x6F, 0x63, 0x65, 0x73,  0x73, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x70, 0x72, 0x6F,
-  0x63, 0x65, 0x73, 0x73,  0x00, 0x54, 0x65, 0x73,  0x74, 0x00, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,
-  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x61,  0x64, 0x76, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x6D,
-  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,
-  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
-  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,
-  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x72, 0x65, 0x6C,
-  0x65, 0x61, 0x73, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
-  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,  0x72, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x00, 0x54,
-  0x65, 0x73, 0x74, 0x5F,  0x72, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x00, 0x72,  0x65, 0x73, 0x65, 0x74,
-  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,  0x72, 0x61, 0x74, 0x65,
-  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x72, 0x61,  0x74, 0x65, 0x00, 0x74,
-  0x72, 0x61, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x74, 0x72,
-  0x61, 0x63, 0x65, 0x00,  0x70, 0x72, 0x69, 0x6E,  0x74, 0x00, 0x73, 0x00,  0x49, 0x4E, 0x46, 0x4F,
-  0x3A, 0x20, 0x00, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x45, 0x52, 0x52,  0x4F, 0x52, 0x3A, 0x20,
-  0x00, 0x96, 0x04, 0x00,  0x08, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x00, 0x4E, 0x1D,
-  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x03, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x05,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x06,
-  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x07, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x07, 0x4E,
-  0x1D, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x08,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x09,  0x4E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0A, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x0C, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x07,
-  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0D, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x0E, 0x4E,  0x4F, 0x96, 0x09, 0x00,  0x08, 0x0F, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
-  0x10, 0x40, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
+  0x5F, 0x75, 0x72, 0x6C,  0x00, 0x70, 0x61, 0x74,  0x68, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,
+  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x70, 0x61,  0x74, 0x68, 0x00, 0x68,
+  0x65, 0x61, 0x64, 0x65,  0x72, 0x73, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
+  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x68,  0x65, 0x61, 0x64, 0x65,  0x72, 0x73, 0x00, 0x63,
+  0x6F, 0x6E, 0x74, 0x65,  0x6E, 0x74, 0x54, 0x79,  0x70, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,
+  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x63,  0x6F, 0x6E, 0x74, 0x65,
+  0x6E, 0x74, 0x54, 0x79,  0x70, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
+  0x73, 0x74, 0x5F, 0x73,  0x65, 0x74, 0x5F, 0x63,  0x6F, 0x6E, 0x74, 0x65,  0x6E, 0x74, 0x54, 0x79,
+  0x70, 0x65, 0x00, 0x73,  0x74, 0x61, 0x74, 0x75,  0x73, 0x43, 0x6F, 0x64,  0x65, 0x00, 0x48, 0x54,
+  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x73, 0x74,
+  0x61, 0x74, 0x75, 0x73,  0x43, 0x6F, 0x64, 0x65,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,
+  0x75, 0x65, 0x73, 0x74,  0x5F, 0x73, 0x65, 0x74,  0x5F, 0x73, 0x74, 0x61,  0x74, 0x75, 0x73, 0x43,
+  0x6F, 0x64, 0x65, 0x00,  0x74, 0x6F, 0x53, 0x74,  0x72, 0x69, 0x6E, 0x67,  0x00, 0x48, 0x54, 0x54,
+  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x74, 0x6F, 0x53,  0x74, 0x72, 0x69, 0x6E,
+  0x67, 0x00, 0x73, 0x65,  0x6E, 0x64, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
+  0x73, 0x74, 0x5F, 0x73,  0x65, 0x6E, 0x64, 0x00,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x48, 0x54,
+  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x00,
+  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x00, 0x70,  0x72, 0x6F, 0x63, 0x65,  0x73, 0x73, 0x00, 0x53,
+  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x5F, 0x70, 0x72,  0x6F, 0x63, 0x65, 0x73,  0x73, 0x00, 0x54, 0x65,
+  0x73, 0x74, 0x00, 0x61,  0x64, 0x76, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,
+  0x61, 0x64, 0x76, 0x61,  0x6E, 0x63, 0x65, 0x00,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,
+  0x76, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x6D, 0x6F,
+  0x76, 0x65, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x54,
+  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x70, 0x72,  0x65, 0x73, 0x73, 0x00,
+  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x72, 0x65,  0x6C, 0x65, 0x61, 0x73,  0x65, 0x00, 0x54, 0x65,
+  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x72, 0x65, 0x6C,  0x65, 0x61, 0x73, 0x65,
+  0x00, 0x72, 0x65, 0x6E,  0x64, 0x65, 0x72, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x72, 0x65, 0x6E,
+  0x64, 0x65, 0x72, 0x00,  0x72, 0x65, 0x73, 0x65,  0x74, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,
+  0x65, 0x73, 0x65, 0x74,  0x00, 0x72, 0x61, 0x74,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,
+  0x65, 0x74, 0x5F, 0x72,  0x61, 0x74, 0x65, 0x00,  0x74, 0x72, 0x61, 0x63,  0x65, 0x00, 0x54, 0x65,
+  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x74,  0x72, 0x61, 0x63, 0x65,  0x00, 0x70, 0x72, 0x69,
+  0x6E, 0x74, 0x00, 0x73,  0x00, 0x49, 0x4E, 0x46,  0x4F, 0x3A, 0x20, 0x00,  0x65, 0x72, 0x72, 0x6F,
+  0x72, 0x00, 0x45, 0x52,  0x52, 0x4F, 0x52, 0x3A,  0x20, 0x00, 0x96, 0x04,  0x00, 0x08, 0x00, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x00, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,
+  0x04, 0x00, 0x08, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x03,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x00, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x05, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x06, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x07,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x07,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,
+  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x08, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x09, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x0A,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0B,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x0C, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x0D,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x4E, 0x4F, 0x96, 0x03,
+  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x10, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x0F,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0C, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x09, 0x00,  0x08, 0x12, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
+  0x13, 0x40, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
   0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x12, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x11, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x0F, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x15,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x14, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x17, 0x4E,
-  0x96, 0x09, 0x00, 0x08,  0x16, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x19, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x18,  0x07, 0x03, 0x00, 0x00,
-  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x13, 0x52,
-  0x17, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x4E, 0x96, 0x02, 0x00,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1A, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x13, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1F, 0x4E, 0x96,
-  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1E, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1D,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x20, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x22, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x23, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0F,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x24,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x25,  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x26, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x26, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x26, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x26,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x27,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x28,
-  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x29, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x29, 0x4E,
-  0x1D, 0x96, 0x02, 0x00,  0x08, 0x29, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
-  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x29,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x2A,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2B,  0x4E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x29, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2C, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2D, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x29, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x2E, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x2F, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x29, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x04, 0x00, 0x08,  0x30, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x31, 0x4E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x29,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x32,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x33,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x29, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x34, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x35, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x37, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x36, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x29, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x39,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x38, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x29, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x13, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x3A,  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x3B, 0x1C,  0x12, 0x9D, 0x02, 0x00,
-  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x3C, 0x08,  0x3B, 0x1C, 0x47, 0x96,  0x07, 0x00, 0x07, 0x01,
-  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3A, 0x52,  0x17, 0x1D, 0x96, 0x02,
-  0x00, 0x08, 0x3D, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x3B, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,
-  0x08, 0x3E, 0x08, 0x3B,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3A, 0x52, 0x17,  0x1D, 0x00
+  0x15, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x14, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x12, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x17,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x16, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x11, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,
+  0x96, 0x09, 0x00, 0x08,  0x18, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x12,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1A,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x11, 0x52,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1E,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1D,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1C, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1F,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x12, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x11, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x12, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x04, 0x00,  0x08, 0x22, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x23, 0x4E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x12, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x25, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x12,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x27,  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x28, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x28, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x28, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x29,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2A,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x2B, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2B, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x2B, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x2B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x2C,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2D,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x2B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2E, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2F, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x2B, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x30, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x31, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x2B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x32, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x33, 0x4E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x2B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x34,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x35,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x2B, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x36, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x37, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x39, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x38, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x2B, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x11, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3B,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x3A, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x2B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x11, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x3C,  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x3D, 0x1C,  0x12, 0x9D, 0x02, 0x00,
+  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x3E, 0x08,  0x3D, 0x1C, 0x47, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3C, 0x52,  0x17, 0x1D, 0x96, 0x02,
+  0x00, 0x08, 0x3F, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x3D, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0x40, 0x08, 0x3D,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3C, 0x52, 0x17,  0x1D, 0x00
 };
 
commit 3a7b5ccc4b7987f77cbe872906ac18afa0de075b
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 18:13:49 2008 +0200

    Always require a port number when creating new HTTPServer

diff --git a/test/swfdec_test_http_server.c b/test/swfdec_test_http_server.c
index 0400501..c30f0a0 100644
--- a/test/swfdec_test_http_server.c
+++ b/test/swfdec_test_http_server.c
@@ -191,10 +191,10 @@ swfdec_test_http_server_create (SwfdecAsContext *cx, SwfdecAsObject *object, gui
   SwfdecTestHTTPServer *server;
   int port;
 
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_SERVER, &server, "|i", &port);
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_SERVER, &server, "i", &port);
 
   if (port <= 0)
-    port = 12345;
+    return;
 
   server->port = port;
 
commit 8457a9cc58a177521a2efb52302fdce92722b7e7
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 18:10:47 2008 +0200

    Simplify the statusCode handling

diff --git a/test/swfdec_test_http_request.c b/test/swfdec_test_http_request.c
index fdeca46..5541e02 100644
--- a/test/swfdec_test_http_request.c
+++ b/test/swfdec_test_http_request.c
@@ -55,8 +55,7 @@ swfdec_test_http_request_new (SwfdecAsContext *context,
   soup_message_headers_set_encoding (message->response_headers,
       SOUP_ENCODING_CHUNKED);
   soup_message_set_flags (message, SOUP_MESSAGE_OVERWRITE_CHUNKS);
-  soup_message_set_status (request->message,
-      SOUP_STATUS_INTERNAL_SERVER_ERROR);
+  soup_message_set_status (message, SOUP_STATUS_OK);
 
   SWFDEC_TEST_HTTP_REQUEST (ret)->server = server;
   SWFDEC_TEST_HTTP_REQUEST (ret)->message = message;
@@ -266,11 +265,7 @@ swfdec_test_http_request_get_statusCode (SwfdecAsContext *cx,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "");
 
-  if (request->status_set) {
-    SWFDEC_AS_VALUE_SET_INT (retval, request->message->status_code);
-  } else {
-    SWFDEC_AS_VALUE_SET_NULL (retval);
-  }
+  SWFDEC_AS_VALUE_SET_INT (retval, request->message->status_code);
 }
 
 SWFDEC_TEST_FUNCTION ("HTTPRequest_set_statusCode", swfdec_test_http_request_set_statusCode, 0)
@@ -280,26 +275,19 @@ swfdec_test_http_request_set_statusCode (SwfdecAsContext *cx,
     SwfdecAsValue *retval)
 {
   SwfdecTestHTTPRequest *request;
-  SwfdecAsValue val;
+  int status_code;
 
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "v", &val);
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "i", &status_code);
+
+  if (status_code < 0)
+    return;
 
   if (request->state > SWFDEC_TEST_HTTP_REQUEST_STATE_WAITING) {
     swfdec_test_throw (cx, "Headers have already been sent");
     return;
   }
 
-  if (SWFDEC_AS_VALUE_IS_NULL (&val) || SWFDEC_AS_VALUE_IS_UNDEFINED (&val)) {
-    soup_message_set_status (request->message,
-	SOUP_STATUS_INTERNAL_SERVER_ERROR);
-    request->status_set = FALSE;
-  } else {
-    int status_code = swfdec_as_value_to_integer (cx, &val);
-    if (status_code < 0)
-      return;
-    soup_message_set_status (request->message, status_code);
-    request->status_set = TRUE;
-  }
+  soup_message_set_status (request->message, status_code);
 }
 
 SWFDEC_TEST_FUNCTION ("HTTPRequest_send", swfdec_test_http_request_send, 0)
@@ -317,11 +305,6 @@ swfdec_test_http_request_send (SwfdecAsContext *cx, SwfdecAsObject *object,
     return;
   }
 
-  if (!request->status_set) {
-    soup_message_set_status (request->message, SOUP_STATUS_OK);
-    request->status_set = TRUE;
-  }
-
   if (SWFDEC_AS_VALUE_IS_OBJECT (&val) &&
       SWFDEC_IS_TEST_BUFFER (SWFDEC_AS_VALUE_GET_OBJECT (&val))) {
     SwfdecTestBuffer *buffer =
@@ -355,11 +338,6 @@ swfdec_test_http_request_close (SwfdecAsContext *cx, SwfdecAsObject *object,
     return;
   }
 
-  if (!request->status_set) {
-    soup_message_set_status (request->message, SOUP_STATUS_OK);
-    request->status_set = TRUE;
-  }
-
   soup_message_body_complete (request->message->response_body);
   soup_server_unpause_message (request->server->server, request->message);
 
diff --git a/test/swfdec_test_http_request.h b/test/swfdec_test_http_request.h
index e4b08ae..892f079 100644
--- a/test/swfdec_test_http_request.h
+++ b/test/swfdec_test_http_request.h
@@ -51,9 +51,8 @@ struct _SwfdecTestHTTPRequest
 
   SwfdecTestHTTPServer *	server;
   SoupMessage *			message;
-  gboolean			status_set;
-  SwfdecTestHTTPRequestState	state;
 
+  SwfdecTestHTTPRequestState	state;
   SwfdecAsObject *		headers;
 };
 
commit de8d0437dfbc973c6b92c63251cf1a8e587d596f
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 18:07:39 2008 +0200

    Add statusCode property for HTTPRequest

diff --git a/test/swfdec_test_http_request.c b/test/swfdec_test_http_request.c
index 51a4757..fdeca46 100644
--- a/test/swfdec_test_http_request.c
+++ b/test/swfdec_test_http_request.c
@@ -55,11 +55,11 @@ swfdec_test_http_request_new (SwfdecAsContext *context,
   soup_message_headers_set_encoding (message->response_headers,
       SOUP_ENCODING_CHUNKED);
   soup_message_set_flags (message, SOUP_MESSAGE_OVERWRITE_CHUNKS);
+  soup_message_set_status (request->message,
+      SOUP_STATUS_INTERNAL_SERVER_ERROR);
 
   SWFDEC_TEST_HTTP_REQUEST (ret)->server = server;
   SWFDEC_TEST_HTTP_REQUEST (ret)->message = message;
-  SWFDEC_TEST_HTTP_REQUEST (ret)->state =
-    SWFDEC_TEST_HTTP_REQUEST_STATE_WAITING;
 
   return ret;
 }
@@ -256,6 +256,52 @@ swfdec_test_http_request_set_contentType (SwfdecAsContext *cx,
   }
 }
 
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_statusCode", swfdec_test_http_request_get_statusCode, 0)
+void
+swfdec_test_http_request_get_statusCode (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *retval)
+{
+  SwfdecTestHTTPRequest *request;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "");
+
+  if (request->status_set) {
+    SWFDEC_AS_VALUE_SET_INT (retval, request->message->status_code);
+  } else {
+    SWFDEC_AS_VALUE_SET_NULL (retval);
+  }
+}
+
+SWFDEC_TEST_FUNCTION ("HTTPRequest_set_statusCode", swfdec_test_http_request_set_statusCode, 0)
+void
+swfdec_test_http_request_set_statusCode (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *retval)
+{
+  SwfdecTestHTTPRequest *request;
+  SwfdecAsValue val;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "v", &val);
+
+  if (request->state > SWFDEC_TEST_HTTP_REQUEST_STATE_WAITING) {
+    swfdec_test_throw (cx, "Headers have already been sent");
+    return;
+  }
+
+  if (SWFDEC_AS_VALUE_IS_NULL (&val) || SWFDEC_AS_VALUE_IS_UNDEFINED (&val)) {
+    soup_message_set_status (request->message,
+	SOUP_STATUS_INTERNAL_SERVER_ERROR);
+    request->status_set = FALSE;
+  } else {
+    int status_code = swfdec_as_value_to_integer (cx, &val);
+    if (status_code < 0)
+      return;
+    soup_message_set_status (request->message, status_code);
+    request->status_set = TRUE;
+  }
+}
+
 SWFDEC_TEST_FUNCTION ("HTTPRequest_send", swfdec_test_http_request_send, 0)
 void
 swfdec_test_http_request_send (SwfdecAsContext *cx, SwfdecAsObject *object,
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 1843080..018c56c 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -38,6 +38,7 @@ HTTPRequest.prototype.addProperty ("url", Native.HTTPRequest_get_url, null);
 HTTPRequest.prototype.addProperty ("path", Native.HTTPRequest_get_path, null);
 HTTPRequest.prototype.addProperty ("headers", Native.HTTPRequest_get_headers, null);
 HTTPRequest.prototype.addProperty ("contentType", Native.HTTPRequest_get_contentType, Native.HTTPRequest_set_contentType);
+HTTPRequest.prototype.addProperty ("statusCode", Native.HTTPRequest_get_statusCode, Native.HTTPRequest_set_statusCode);
 HTTPRequest.prototype.toString = Native.HTTPRequest_toString;
 HTTPRequest.prototype.send = Native.HTTPRequest_send;
 HTTPRequest.prototype.close = Native.HTTPRequest_close;
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 0a2476a..e0ebfd3 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,7 +2,7 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0xAD, 0x02, 0x3C,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0xEE, 0x02, 0x3F,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
   0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
@@ -24,89 +24,96 @@ static const unsigned char swfdec_test_initialize[] = {
   0x65, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,
   0x74, 0x5F, 0x63, 0x6F,  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x48, 0x54,
   0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x73, 0x65,  0x74, 0x5F, 0x63, 0x6F,
-  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,
-  0x6E, 0x67, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x74,
-  0x6F, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,  0x73, 0x65, 0x6E, 0x64,  0x00, 0x48, 0x54, 0x54,
-  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x63, 0x6C,
-  0x6F, 0x73, 0x65, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,
-  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x70, 0x72, 0x6F,
-  0x63, 0x65, 0x73, 0x73,  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x70, 0x72, 0x6F, 0x63,
-  0x65, 0x73, 0x73, 0x00,  0x54, 0x65, 0x73, 0x74,  0x00, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,
-  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x6D, 0x6F,
-  0x75, 0x73, 0x65, 0x5F,  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,
-  0x75, 0x73, 0x65, 0x5F,  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,
-  0x72, 0x65, 0x73, 0x73,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
-  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,
-  0x61, 0x73, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,
-  0x65, 0x6C, 0x65, 0x61,  0x73, 0x65, 0x00, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x54, 0x65,
-  0x73, 0x74, 0x5F, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x5F, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x72,  0x61, 0x74, 0x65, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x72, 0x61, 0x74,  0x65, 0x00, 0x74, 0x72,
-  0x61, 0x63, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x74, 0x72, 0x61,
-  0x63, 0x65, 0x00, 0x70,  0x72, 0x69, 0x6E, 0x74,  0x00, 0x73, 0x00, 0x49,  0x4E, 0x46, 0x4F, 0x3A,
-  0x20, 0x00, 0x65, 0x72,  0x72, 0x6F, 0x72, 0x00,  0x45, 0x52, 0x52, 0x4F,  0x52, 0x3A, 0x20, 0x00,
-  0x96, 0x04, 0x00, 0x08,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x00, 0x4E, 0x1D, 0x96,
-  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x03, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,
-  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x05, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x06, 0x4E,
-  0x4F, 0x96, 0x04, 0x00,  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x07, 0x4E, 0x1D,
-  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x08, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x07, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0A, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x0C, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x0C, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x07, 0x00,
-  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0E, 0x4E, 0x4F,  0x96, 0x09, 0x00, 0x08,  0x0F, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x10,
-  0x40, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x43, 0x4F,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x12,
-  0x4E, 0x96, 0x09, 0x00,  0x08, 0x11, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x15, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x14, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,
-  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x17, 0x4E, 0x96,
-  0x09, 0x00, 0x08, 0x16,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x18, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,
-  0x96, 0x02, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x1A, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,
-  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x1D, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1E, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x1F, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x21, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x22, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x23,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x23,
-  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x23, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,
-  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x04, 0x00, 0x08,  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x25, 0x4E, 0x4F, 0x96,
-  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x26,  0x4E, 0x1D, 0x96, 0x02,
-  0x00, 0x08, 0x26, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x26, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x27, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x28, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x26,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x29,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x2A,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x26, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2B, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2C, 0x4E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x26, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
-  0x08, 0x2D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2E, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x26, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x2F, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x26,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x31,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x32,
-  0x4E, 0x4F, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x34, 0x4E, 0x96,
-  0x09, 0x00, 0x08, 0x33,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x26, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x36, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x35, 0x07,  0x03, 0x00, 0x00, 0x00,
-  0x08, 0x26, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,
-  0x96, 0x02, 0x00, 0x08,  0x37, 0x8E, 0x0B, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,
-  0x00, 0x27, 0x00, 0x96,  0x02, 0x00, 0x08, 0x38,  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x1B, 0x00, 0x96,
-  0x04, 0x00, 0x08, 0x39,  0x08, 0x38, 0x1C, 0x47,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x37,  0x52, 0x17, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x3A,
-  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,
-  0x00, 0x08, 0x38, 0x1C,  0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x3B, 0x08,
-  0x38, 0x1C, 0x47, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x37, 0x52,  0x17, 0x1D, 0x00
+  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x73, 0x74,  0x61, 0x74, 0x75, 0x73,
+  0x43, 0x6F, 0x64, 0x65,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
+  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x73, 0x74, 0x61,  0x74, 0x75, 0x73, 0x43,  0x6F, 0x64, 0x65, 0x00,
+  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,  0x73, 0x65, 0x74, 0x5F,
+  0x73, 0x74, 0x61, 0x74,  0x75, 0x73, 0x43, 0x6F,  0x64, 0x65, 0x00, 0x74,  0x6F, 0x53, 0x74, 0x72,
+  0x69, 0x6E, 0x67, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,
+  0x74, 0x6F, 0x53, 0x74,  0x72, 0x69, 0x6E, 0x67,  0x00, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x48, 0x54,
+  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x73, 0x65,  0x6E, 0x64, 0x00, 0x63,
+  0x6C, 0x6F, 0x73, 0x65,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
+  0x5F, 0x63, 0x6C, 0x6F,  0x73, 0x65, 0x00, 0x53,  0x6F, 0x63, 0x6B, 0x65,  0x74, 0x00, 0x70, 0x72,
+  0x6F, 0x63, 0x65, 0x73,  0x73, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x5F, 0x70, 0x72, 0x6F,
+  0x63, 0x65, 0x73, 0x73,  0x00, 0x54, 0x65, 0x73,  0x74, 0x00, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,
+  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x61,  0x64, 0x76, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x6D,
+  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,
+  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
+  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,
+  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x72, 0x65, 0x6C,
+  0x65, 0x61, 0x73, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
+  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,  0x72, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x00, 0x54,
+  0x65, 0x73, 0x74, 0x5F,  0x72, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x00, 0x72,  0x65, 0x73, 0x65, 0x74,
+  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,  0x72, 0x61, 0x74, 0x65,
+  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x72, 0x61,  0x74, 0x65, 0x00, 0x74,
+  0x72, 0x61, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x74, 0x72,
+  0x61, 0x63, 0x65, 0x00,  0x70, 0x72, 0x69, 0x6E,  0x74, 0x00, 0x73, 0x00,  0x49, 0x4E, 0x46, 0x4F,
+  0x3A, 0x20, 0x00, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x45, 0x52, 0x52,  0x4F, 0x52, 0x3A, 0x20,
+  0x00, 0x96, 0x04, 0x00,  0x08, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x00, 0x4E, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x03, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x05,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x06,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x07, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x07, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x08,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x09,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0A, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x0C, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x07,
+  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0D, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0E, 0x4E,  0x4F, 0x96, 0x09, 0x00,  0x08, 0x0F, 0x07, 0x00,  0x00, 0x00, 0x00, 0x08,
+  0x10, 0x40, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x12, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x11, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x0F, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x15,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x14, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x17, 0x4E,
+  0x96, 0x09, 0x00, 0x08,  0x16, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x19, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x18,  0x07, 0x03, 0x00, 0x00,
+  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x13, 0x52,
+  0x17, 0x96, 0x02, 0x00,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1C,  0x4E, 0x96, 0x02, 0x00,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1A, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x13, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1F, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1E, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x1D,
+  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
+  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x02, 0x00,  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x04, 0x00,  0x08, 0x20, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x4E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x22, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x23, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0F,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x24,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x25,  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x26, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x26, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x26, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x26,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x27,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x28,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x29, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x29, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x29, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x29,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x2A,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x2B,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x29, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2C, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2D, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x29, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x2E, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x2F, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x29, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x30, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x31, 0x4E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x29,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x32,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x33,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x29, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x34, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x35, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x37, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x36, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x29, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,  0x96, 0x03, 0x00, 0x02,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x39,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x38, 0x07, 0x03,
+  0x00, 0x00, 0x00, 0x08,  0x29, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x13, 0x52, 0x17, 0x96,  0x02, 0x00, 0x08, 0x3A,  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x3B, 0x1C,  0x12, 0x9D, 0x02, 0x00,
+  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x3C, 0x08,  0x3B, 0x1C, 0x47, 0x96,  0x07, 0x00, 0x07, 0x01,
+  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x3A, 0x52,  0x17, 0x1D, 0x96, 0x02,
+  0x00, 0x08, 0x3D, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x3B, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0x3E, 0x08, 0x3B,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3A, 0x52, 0x17,  0x1D, 0x00
 };
 
commit 2a26f0db298bf90330d4e91f71837ea87ed0a934
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 17:39:30 2008 +0200

    Rename HTTPRequest.push to send

diff --git a/test/swfdec_test_http_request.c b/test/swfdec_test_http_request.c
index 8067369..51a4757 100644
--- a/test/swfdec_test_http_request.c
+++ b/test/swfdec_test_http_request.c
@@ -256,9 +256,9 @@ swfdec_test_http_request_set_contentType (SwfdecAsContext *cx,
   }
 }
 
-SWFDEC_TEST_FUNCTION ("HTTPRequest_push", swfdec_test_http_request_push, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_send", swfdec_test_http_request_send, 0)
 void
-swfdec_test_http_request_push (SwfdecAsContext *cx, SwfdecAsObject *object,
+swfdec_test_http_request_send (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
   SwfdecTestHTTPRequest *request;
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 36f090d..1843080 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -39,7 +39,7 @@ HTTPRequest.prototype.addProperty ("path", Native.HTTPRequest_get_path, null);
 HTTPRequest.prototype.addProperty ("headers", Native.HTTPRequest_get_headers, null);
 HTTPRequest.prototype.addProperty ("contentType", Native.HTTPRequest_get_contentType, Native.HTTPRequest_set_contentType);
 HTTPRequest.prototype.toString = Native.HTTPRequest_toString;
-HTTPRequest.prototype.push = Native.HTTPRequest_push;
+HTTPRequest.prototype.send = Native.HTTPRequest_send;
 HTTPRequest.prototype.close = Native.HTTPRequest_close;
 
 Socket = Native.Socket;
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 77e9e5e..0a2476a 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -26,8 +26,8 @@ static const unsigned char swfdec_test_initialize[] = {
   0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x73, 0x65,  0x74, 0x5F, 0x63, 0x6F,
   0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,
   0x6E, 0x67, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x74,
-  0x6F, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,  0x70, 0x75, 0x73, 0x68,  0x00, 0x48, 0x54, 0x54,
-  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x70, 0x75, 0x73,  0x68, 0x00, 0x63, 0x6C,
+  0x6F, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,  0x73, 0x65, 0x6E, 0x64,  0x00, 0x48, 0x54, 0x54,
+  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x73, 0x65, 0x6E,  0x64, 0x00, 0x63, 0x6C,
   0x6F, 0x73, 0x65, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,
   0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x70, 0x72, 0x6F,
   0x63, 0x65, 0x73, 0x73,  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x70, 0x72, 0x6F, 0x63,
commit 2eca9de48c8f2d928b56876b97438a84826c477c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 17:25:27 2008 +0200

    Add support for pushing Buffers in HTTPRequest

diff --git a/test/swfdec_test_http_request.c b/test/swfdec_test_http_request.c
index 0977e18..8067369 100644
--- a/test/swfdec_test_http_request.c
+++ b/test/swfdec_test_http_request.c
@@ -26,6 +26,7 @@
 
 #include "swfdec_test_http_request.h"
 #include "swfdec_test_http_server.h"
+#include "swfdec_test_buffer.h"
 #include "swfdec_test_function.h"
 #include "swfdec_test_utils.h"
 
@@ -261,9 +262,9 @@ swfdec_test_http_request_push (SwfdecAsContext *cx, SwfdecAsObject *object,
     guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
   SwfdecTestHTTPRequest *request;
-  const char *data;
+  SwfdecAsValue val;
 
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "s", &data);
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "v", &val);
 
   if (request->state > SWFDEC_TEST_HTTP_REQUEST_STATE_SENDING) {
     swfdec_test_throw (cx, "Reply has already been sent");
@@ -275,8 +276,18 @@ swfdec_test_http_request_push (SwfdecAsContext *cx, SwfdecAsObject *object,
     request->status_set = TRUE;
   }
 
-  soup_message_body_append (request->message->response_body, SOUP_MEMORY_COPY,
-      data, strlen (data));
+  if (SWFDEC_AS_VALUE_IS_OBJECT (&val) &&
+      SWFDEC_IS_TEST_BUFFER (SWFDEC_AS_VALUE_GET_OBJECT (&val))) {
+    SwfdecTestBuffer *buffer =
+      SWFDEC_TEST_BUFFER (SWFDEC_AS_VALUE_GET_OBJECT (&val));
+    soup_message_body_append (request->message->response_body,
+	SOUP_MEMORY_COPY, buffer->buffer->data, buffer->buffer->length);
+  } else {
+    const char *data = swfdec_as_value_to_string (cx, &val);
+    soup_message_body_append (request->message->response_body,
+	SOUP_MEMORY_COPY, data, strlen (data));
+  }
+
   soup_server_unpause_message (request->server->server, request->message);
 
   swfdec_test_http_server_run (request->server);
commit c7a4757dbd3d155e6a9eeb7db91e49c300967130
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 16:22:13 2008 +0100

    add screenshot support

diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index 9129ae0..bea718d 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -43,6 +43,22 @@ swfdec_test_plugin_swfdec_advance (SwfdecTestPlugin *plugin, unsigned int msecs)
 }
 
 static void
+swfdec_test_plugin_swfdec_screenshot (SwfdecTestPlugin *plugin, unsigned char *data,
+    guint x, guint y, guint width, guint height)
+{
+  cairo_surface_t *surface;
+  cairo_t *cr;
+
+  surface = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_ARGB32, 
+      width, height, width * 4);
+  cr = cairo_create (surface);
+  cairo_translate (cr, -x, -y);
+  swfdec_player_render (plugin->data, cr, x, y, width, height);
+  cairo_destroy (cr);
+  cairo_surface_destroy (surface);
+}
+
+static void
 swfdec_test_plugin_swfdec_mouse_move (SwfdecTestPlugin *plugin, double x, double y)
 {
   swfdec_player_mouse_move (plugin->data, x, y);
@@ -104,10 +120,11 @@ swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
   SwfdecURL *url;
 
   plugin->advance = swfdec_test_plugin_swfdec_advance;
-  plugin->finish = swfdec_test_plugin_swfdec_finish;
+  plugin->screenshot = swfdec_test_plugin_swfdec_screenshot;
   plugin->mouse_move = swfdec_test_plugin_swfdec_mouse_move;
   plugin->mouse_press = swfdec_test_plugin_swfdec_mouse_press;
   plugin->mouse_release = swfdec_test_plugin_swfdec_mouse_release;
+  plugin->finish = swfdec_test_plugin_swfdec_finish;
   plugin->data = player = swfdec_player_new (NULL);
 
   g_signal_connect (player, "fscommand", G_CALLBACK (swfdec_test_plugin_swfdec_fscommand), plugin);
diff --git a/test/swfdec_test_plugin.h b/test/swfdec_test_plugin.h
index 83bd3cb..e7a68e9 100644
--- a/test/swfdec_test_plugin.h
+++ b/test/swfdec_test_plugin.h
@@ -54,6 +54,14 @@ struct _SwfdecTestPlugin {
   unsigned int	rate; /* in 256th of a second */
   void		(* advance)	(SwfdecTestPlugin *	plugin,
 				 unsigned int		msecs);
+  /* data nulled is ARGB for (provided) width * height with rowstride = width * 4 */
+  /* size is guaranteed to fit into 0,0 x width,height */
+  void		(* screenshot)	(SwfdecTestPlugin *	plugin,
+				 unsigned char *	data,
+				 unsigned int		x,
+				 unsigned int		y,
+				 unsigned int		width,
+				 unsigned int		height);
   void		(* mouse_move)	(SwfdecTestPlugin *     plugin,
 				 double			x,
 				 double			y);
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index 322ef8a..0d6bd56 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -266,31 +266,31 @@ void
 swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
     SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
-#if 0
   SwfdecTestTest *test;
   SwfdecAsObject *image;
+  int x, y, w, h;
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "|iiii", &x, &y, &w, &h);
 
-  if (!swfdec_test_test_ensure_player (test))
+  if (!test->plugin_loaded || test->plugin_error || test->plugin_quit)
     return;
 
   if (argc == 0) {
-    swfdec_player_get_size (test->player, &w, &h);
-    if (w < 0 || h < 0)
-      swfdec_player_get_default_size (test->player, (guint *) &w, (guint *) &h);
+    w = test->plugin.width;
+    h = test->plugin.height;
   }
   image = swfdec_test_image_new (cx, w, h);
   if (image == NULL)
     return;
-  cr = cairo_create (SWFDEC_TEST_IMAGE (image)->surface);
-  cairo_translate (cr, -x, -y);
-  swfdec_player_render (test->player, cr, x, y, w, h);
-  cairo_destroy (cr);
-  SWFDEC_AS_VALUE_SET_OBJECT (retval, image);
-#else
-  swfdec_test_throw (cx, "implement");
-#endif
+
+  if (test->plugin.screenshot) {
+    test->plugin.screenshot (&test->plugin, 
+	cairo_image_surface_get_data (SWFDEC_TEST_IMAGE (image)->surface),
+	x, y, w, h);
+    SWFDEC_AS_VALUE_SET_OBJECT (retval, image);
+  } else {
+    swfdec_test_throw (cx, "plugin doesn't implement mouse_press");
+  }
 }
 
 SWFDEC_TEST_FUNCTION ("Test", swfdec_test_test_new, swfdec_test_test_get_type)
commit e36ac8c072d9fb2f8379ceb74f7cf188dbc0147f
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 16:22:06 2008 +0100

    throw if saving fails

diff --git a/test/swfdec_test_image.c b/test/swfdec_test_image.c
index 26282ba..3d3a60e 100644
--- a/test/swfdec_test_image.c
+++ b/test/swfdec_test_image.c
@@ -23,6 +23,7 @@
 
 #include "swfdec_test_image.h"
 #include "swfdec_test_function.h"
+#include "swfdec_test_utils.h"
 
 #define SWFDEC_TEST_IMAGE_IS_VALID(image) ((image)->surface && \
     cairo_surface_status ((image)->surface) == CAIRO_STATUS_SUCCESS)
@@ -190,6 +191,7 @@ swfdec_test_image_save (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
 {
   SwfdecTestImage *image;
   const char *filename;
+  cairo_status_t status;
   
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_IMAGE, &image, "s", &filename);
 
@@ -197,8 +199,10 @@ swfdec_test_image_save (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
   if (!SWFDEC_TEST_IMAGE_IS_VALID (image))
     return;
 
-  if (cairo_surface_write_to_png (image->surface, filename) != CAIRO_STATUS_SUCCESS)
-    return;
+  status = cairo_surface_write_to_png (image->surface, filename);
+  if (status != CAIRO_STATUS_SUCCESS) {
+    swfdec_test_throw (cx, "Couldn't save to %s: %s", filename, cairo_status_to_string (status));
+  }
 
   SWFDEC_AS_VALUE_SET_BOOLEAN (retval, TRUE);
 }
commit 40b3bd50194fba1a4889b95e74d02c157ff453bb
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 16:54:47 2008 +0200

    Some cleanups for HTTPServer/Request code. Add contentType property

diff --git a/test/swfdec_test_http_request.c b/test/swfdec_test_http_request.c
index 15ab90a..0977e18 100644
--- a/test/swfdec_test_http_request.c
+++ b/test/swfdec_test_http_request.c
@@ -51,6 +51,10 @@ swfdec_test_http_request_new (SwfdecAsContext *context,
   if (SWFDEC_AS_VALUE_IS_OBJECT (&val))
     swfdec_as_object_set_constructor (ret, SWFDEC_AS_VALUE_GET_OBJECT (&val));
 
+  soup_message_headers_set_encoding (message->response_headers,
+      SOUP_ENCODING_CHUNKED);
+  soup_message_set_flags (message, SOUP_MESSAGE_OVERWRITE_CHUNKS);
+
   SWFDEC_TEST_HTTP_REQUEST (ret)->server = server;
   SWFDEC_TEST_HTTP_REQUEST (ret)->message = message;
   SWFDEC_TEST_HTTP_REQUEST (ret)->state =
@@ -204,6 +208,53 @@ swfdec_test_http_request_get_headers (SwfdecAsContext *cx,
   SWFDEC_AS_VALUE_SET_OBJECT (retval, request->headers);
 }
 
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_contentType", swfdec_test_http_request_get_contentType, 0)
+void
+swfdec_test_http_request_get_contentType (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *retval)
+{
+  SwfdecTestHTTPRequest *request;
+  const char *value;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "");
+
+  value = soup_message_headers_get (request->message->response_headers,
+      "Content-Type");
+
+  if (value != NULL) {
+    SWFDEC_AS_VALUE_SET_STRING (retval,
+	swfdec_as_context_get_string (cx, value));
+  } else {
+    SWFDEC_AS_VALUE_SET_NULL (retval);
+  }
+}
+
+SWFDEC_TEST_FUNCTION ("HTTPRequest_set_contentType", swfdec_test_http_request_set_contentType, 0)
+void
+swfdec_test_http_request_set_contentType (SwfdecAsContext *cx,
+    SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
+    SwfdecAsValue *retval)
+{
+  SwfdecTestHTTPRequest *request;
+  SwfdecAsValue val;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "v", &val);
+
+  if (request->state > SWFDEC_TEST_HTTP_REQUEST_STATE_WAITING) {
+    swfdec_test_throw (cx, "Headers have already been sent");
+    return;
+  }
+
+  if (SWFDEC_AS_VALUE_IS_NULL (&val) || SWFDEC_AS_VALUE_IS_UNDEFINED (&val)) {
+    soup_message_headers_remove (request->message->response_headers,
+	"Content-Type");
+  } else {
+    soup_message_headers_replace (request->message->response_headers,
+	"Content-Type", swfdec_as_value_to_string (cx, &val));
+  }
+}
+
 SWFDEC_TEST_FUNCTION ("HTTPRequest_push", swfdec_test_http_request_push, 0)
 void
 swfdec_test_http_request_push (SwfdecAsContext *cx, SwfdecAsObject *object,
diff --git a/test/swfdec_test_http_server.c b/test/swfdec_test_http_server.c
index fc03c0f..0400501 100644
--- a/test/swfdec_test_http_server.c
+++ b/test/swfdec_test_http_server.c
@@ -22,7 +22,6 @@
 #include "config.h"
 #endif
 
-#include <unistd.h>
 #include <libsoup/soup.h>
 
 #include "swfdec_test_http_server.h"
@@ -39,8 +38,7 @@ swfdec_test_http_server_callback (SoupServer *soup_server,
 
   g_return_if_fail (server->server == soup_server);
 
-  soup_message_headers_set_encoding (message->response_headers,
-      SOUP_ENCODING_CHUNKED);
+  soup_server_pause_message (server->server, message);
 
   g_queue_push_head (server->messages, g_object_ref (message));
 }
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 37cb827..36f090d 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -37,6 +37,7 @@ HTTPRequest.prototype.addProperty ("server", Native.HTTPRequest_get_server, null
 HTTPRequest.prototype.addProperty ("url", Native.HTTPRequest_get_url, null);
 HTTPRequest.prototype.addProperty ("path", Native.HTTPRequest_get_path, null);
 HTTPRequest.prototype.addProperty ("headers", Native.HTTPRequest_get_headers, null);
+HTTPRequest.prototype.addProperty ("contentType", Native.HTTPRequest_get_contentType, Native.HTTPRequest_set_contentType);
 HTTPRequest.prototype.toString = Native.HTTPRequest_toString;
 HTTPRequest.prototype.push = Native.HTTPRequest_push;
 HTTPRequest.prototype.close = Native.HTTPRequest_close;
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 783d316..77e9e5e 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,7 +2,7 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0x69, 0x02, 0x39,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0xAD, 0x02, 0x3C,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
   0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
@@ -20,86 +20,93 @@ static const unsigned char swfdec_test_initialize[] = {
   0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,
   0x5F, 0x70, 0x61, 0x74,  0x68, 0x00, 0x68, 0x65,  0x61, 0x64, 0x65, 0x72,  0x73, 0x00, 0x48, 0x54,
   0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x68, 0x65,
-  0x61, 0x64, 0x65, 0x72,  0x73, 0x00, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,  0x6E, 0x67, 0x00, 0x48,
-  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x74,  0x6F, 0x53, 0x74, 0x72,
-  0x69, 0x6E, 0x67, 0x00,  0x70, 0x75, 0x73, 0x68,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,
-  0x75, 0x65, 0x73, 0x74,  0x5F, 0x70, 0x75, 0x73,  0x68, 0x00, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x00,
-  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,
-  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x70, 0x72, 0x6F,  0x63, 0x65, 0x73, 0x73,
-  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x70, 0x72, 0x6F, 0x63,  0x65, 0x73, 0x73, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x00, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,
-  0x74, 0x5F, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
-  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
-  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,  0x72, 0x65, 0x73, 0x73,
-  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,
-  0x73, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,  0x65, 0x6C, 0x65, 0x61,
-  0x73, 0x65, 0x00, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,
-  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,  0x54, 0x65, 0x73, 0x74,
-  0x5F, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x72,  0x61, 0x74, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,
-  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x72, 0x61, 0x74,  0x65, 0x00, 0x74, 0x72,  0x61, 0x63, 0x65, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x74, 0x72, 0x61,  0x63, 0x65, 0x00, 0x70,
-  0x72, 0x69, 0x6E, 0x74,  0x00, 0x73, 0x00, 0x49,  0x4E, 0x46, 0x4F, 0x3A,  0x20, 0x00, 0x65, 0x72,
-  0x72, 0x6F, 0x72, 0x00,  0x45, 0x52, 0x52, 0x4F,  0x52, 0x3A, 0x20, 0x00,  0x96, 0x04, 0x00, 0x08,
-  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x00, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x00,
-  0x1C, 0x96, 0x04, 0x00,  0x08, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x03, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
-  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x05, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x06, 0x4E,  0x4F, 0x96, 0x04, 0x00,
-  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x07, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,
-  0x07, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x08, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0A, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0B, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x0C, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0C, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x4E, 0x4F,
-  0x96, 0x09, 0x00, 0x08,  0x0F, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x10,  0x40, 0x1D, 0x96, 0x02,
-  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
-  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x12,  0x4E, 0x96, 0x09, 0x00,
-  0x08, 0x11, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
-  0x96, 0x02, 0x00, 0x08,  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x15, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x14, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0F,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,  0x52, 0x17, 0x96, 0x03,
-  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x17, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x16,
-  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
-  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x19, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x18, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x0F, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
-  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x1A, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x1B, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x1C,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1D,
-  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x1E, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1F, 0x4E,  0x4F, 0x96, 0x04, 0x00,
-  0x08, 0x20, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,
-  0x20, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x20, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x21, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x22, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x23, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x23, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x07,
-  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x23, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x24, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x25, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x23, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x26, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x27, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x28, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x29, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x23,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x2A,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x2B,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x23, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2C, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2D, 0x4E,
-  0x4F, 0x96, 0x02, 0x00,  0x08, 0x23, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
-  0x08, 0x2E, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2F, 0x4E, 0x4F,  0x96, 0x03, 0x00, 0x02,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x31,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x30, 0x07, 0x03,
-  0x00, 0x00, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
-  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x33, 0x4E,
-  0x96, 0x09, 0x00, 0x08,  0x32, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x23,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x34, 0x8E,
-  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,
-  0x08, 0x35, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x36, 0x08, 0x35,
-  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x34, 0x52, 0x17,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x37, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,
-  0x00, 0x00, 0x00, 0x00,  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x35, 0x1C, 0x12, 0x9D,
-  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x38, 0x08, 0x35, 0x1C,  0x47, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x34, 0x52, 0x17, 0x1D,
-  0x00
+  0x61, 0x64, 0x65, 0x72,  0x73, 0x00, 0x63, 0x6F,  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,
+  0x65, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,
+  0x74, 0x5F, 0x63, 0x6F,  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x48, 0x54,
+  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x73, 0x65,  0x74, 0x5F, 0x63, 0x6F,
+  0x6E, 0x74, 0x65, 0x6E,  0x74, 0x54, 0x79, 0x70,  0x65, 0x00, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,
+  0x6E, 0x67, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x74,
+  0x6F, 0x53, 0x74, 0x72,  0x69, 0x6E, 0x67, 0x00,  0x70, 0x75, 0x73, 0x68,  0x00, 0x48, 0x54, 0x54,
+  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x70, 0x75, 0x73,  0x68, 0x00, 0x63, 0x6C,
+  0x6F, 0x73, 0x65, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,
+  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x70, 0x72, 0x6F,
+  0x63, 0x65, 0x73, 0x73,  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x70, 0x72, 0x6F, 0x63,
+  0x65, 0x73, 0x73, 0x00,  0x54, 0x65, 0x73, 0x74,  0x00, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,
+  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x6D, 0x6F,
+  0x75, 0x73, 0x65, 0x5F,  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,
+  0x75, 0x73, 0x65, 0x5F,  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,
+  0x72, 0x65, 0x73, 0x73,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
+  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,
+  0x61, 0x73, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,
+  0x65, 0x6C, 0x65, 0x61,  0x73, 0x65, 0x00, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x54, 0x65,
+  0x73, 0x74, 0x5F, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,
+  0x54, 0x65, 0x73, 0x74,  0x5F, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x72,  0x61, 0x74, 0x65, 0x00,
+  0x54, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x72, 0x61, 0x74,  0x65, 0x00, 0x74, 0x72,
+  0x61, 0x63, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x74, 0x72, 0x61,
+  0x63, 0x65, 0x00, 0x70,  0x72, 0x69, 0x6E, 0x74,  0x00, 0x73, 0x00, 0x49,  0x4E, 0x46, 0x4F, 0x3A,
+  0x20, 0x00, 0x65, 0x72,  0x72, 0x6F, 0x72, 0x00,  0x45, 0x52, 0x52, 0x4F,  0x52, 0x3A, 0x20, 0x00,
+  0x96, 0x04, 0x00, 0x08,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x00, 0x4E, 0x1D, 0x96,
+  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x04, 0x00,  0x08, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x03, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x05, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x06, 0x4E,
+  0x4F, 0x96, 0x04, 0x00,  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x07, 0x4E, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
+  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x08, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x07, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0A, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0B, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x0C, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x0C, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x07, 0x00,
+  0x08, 0x04, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0E, 0x4E, 0x4F,  0x96, 0x09, 0x00, 0x08,  0x0F, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x10,
+  0x40, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x43, 0x4F,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x12,
+  0x4E, 0x96, 0x09, 0x00,  0x08, 0x11, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x15, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x14, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,
+  0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x17, 0x4E, 0x96,
+  0x09, 0x00, 0x08, 0x16,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x19, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x18, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,
+  0x96, 0x02, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x4E,  0x96, 0x02, 0x00, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x1A, 0x07, 0x03, 0x00,
+  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,
+  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x1D, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1E, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x1F, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x21, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x22, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x23,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x23,
+  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x23, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,
+  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x24, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x25, 0x4E, 0x4F, 0x96,
+  0x04, 0x00, 0x08, 0x26,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x26,  0x4E, 0x1D, 0x96, 0x02,
+  0x00, 0x08, 0x26, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x26, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x27, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x28, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x26,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x29,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x2A,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x26, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2B, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2C, 0x4E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x26, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x2D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2E, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x26, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x2F, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x30, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x26,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x31,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x32,
+  0x4E, 0x4F, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x34, 0x4E, 0x96,
+  0x09, 0x00, 0x08, 0x33,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x26, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x36, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x35, 0x07,  0x03, 0x00, 0x00, 0x00,
+  0x08, 0x26, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,
+  0x96, 0x02, 0x00, 0x08,  0x37, 0x8E, 0x0B, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,
+  0x00, 0x27, 0x00, 0x96,  0x02, 0x00, 0x08, 0x38,  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x1B, 0x00, 0x96,
+  0x04, 0x00, 0x08, 0x39,  0x08, 0x38, 0x1C, 0x47,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x37,  0x52, 0x17, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x3A,
+  0x8E, 0x0B, 0x00, 0x00,  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,
+  0x00, 0x08, 0x38, 0x1C,  0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x3B, 0x08,
+  0x38, 0x1C, 0x47, 0x96,  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x37, 0x52,  0x17, 0x1D, 0x00
 };
 
commit 1bffe8a4ac6cbe18f8b5af7e82dfa4a52c992058
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 15:54:18 2008 +0100

    implement mouse events again

diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index abbd653..9129ae0 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -43,6 +43,24 @@ swfdec_test_plugin_swfdec_advance (SwfdecTestPlugin *plugin, unsigned int msecs)
 }
 
 static void
+swfdec_test_plugin_swfdec_mouse_move (SwfdecTestPlugin *plugin, double x, double y)
+{
+  swfdec_player_mouse_move (plugin->data, x, y);
+}
+
+static void
+swfdec_test_plugin_swfdec_mouse_press (SwfdecTestPlugin *plugin, double x, double y, guint button)
+{
+  swfdec_player_mouse_press (plugin->data, x, y, button);
+}
+
+static void
+swfdec_test_plugin_swfdec_mouse_release (SwfdecTestPlugin *plugin, double x, double y, guint button)
+{
+  swfdec_player_mouse_release (plugin->data, x, y, button);
+}
+
+static void
 swfdec_test_plugin_swfdec_finish (SwfdecTestPlugin *plugin)
 {
   if (plugin->data) {
@@ -87,6 +105,9 @@ swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
 
   plugin->advance = swfdec_test_plugin_swfdec_advance;
   plugin->finish = swfdec_test_plugin_swfdec_finish;
+  plugin->mouse_move = swfdec_test_plugin_swfdec_mouse_move;
+  plugin->mouse_press = swfdec_test_plugin_swfdec_mouse_press;
+  plugin->mouse_release = swfdec_test_plugin_swfdec_mouse_release;
   plugin->data = player = swfdec_player_new (NULL);
 
   g_signal_connect (player, "fscommand", G_CALLBACK (swfdec_test_plugin_swfdec_fscommand), plugin);
diff --git a/test/swfdec_test_plugin.h b/test/swfdec_test_plugin.h
index d7861f9..83bd3cb 100644
--- a/test/swfdec_test_plugin.h
+++ b/test/swfdec_test_plugin.h
@@ -54,6 +54,17 @@ struct _SwfdecTestPlugin {
   unsigned int	rate; /* in 256th of a second */
   void		(* advance)	(SwfdecTestPlugin *	plugin,
 				 unsigned int		msecs);
+  void		(* mouse_move)	(SwfdecTestPlugin *     plugin,
+				 double			x,
+				 double			y);
+  void		(* mouse_press)	(SwfdecTestPlugin *	plugin,
+				 double			x,
+				 double			y,
+				 unsigned int		button); /* 1 - 32 */
+  void		(* mouse_release) (SwfdecTestPlugin *   plugin,
+				 double			x,
+				 double			y,
+				 unsigned int		button); /* 1 - 32 */
   void		(* finish)	(SwfdecTestPlugin *	plugin);
   void *	data;
 };
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index bee1e7a..322ef8a 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -177,7 +177,11 @@ swfdec_test_test_advance (SwfdecAsContext *cx, SwfdecAsObject *object, guint arg
   if (msecs < 0 || !test->plugin_loaded || test->plugin_error || test->plugin_quit)
     return;
 
-  test->plugin.advance (&test->plugin, msecs);
+  if (test->plugin.advance) {
+    test->plugin.advance (&test->plugin, msecs);
+  } else {
+    swfdec_test_throw (cx, "plugin doesn't implement advance");
+  }
 }
 
 SWFDEC_TEST_FUNCTION ("Test_reset", swfdec_test_test_reset, 0)
@@ -203,14 +207,14 @@ swfdec_test_test_mouse_move (SwfdecAsContext *cx, SwfdecAsObject *object, guint
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "nn", &x, &y);
 
-#if 0
-  if (!swfdec_test_test_ensure_player (test))
+  if (!test->plugin_loaded || test->plugin_error || test->plugin_quit)
     return;
 
-  swfdec_player_mouse_move (test->player, x, y);
-#else
-  swfdec_test_throw (cx, "implement");
-#endif
+  if (test->plugin.advance) {
+    test->plugin.mouse_move (&test->plugin, x, y);
+  } else {
+    swfdec_test_throw (cx, "plugin doesn't implement mouse_move");
+  }
 }
 
 SWFDEC_TEST_FUNCTION ("Test_mouse_press", swfdec_test_test_mouse_press, 0)
@@ -224,15 +228,15 @@ swfdec_test_test_mouse_press (SwfdecAsContext *cx, SwfdecAsObject *object, guint
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "nn|i", &x, &y, &button);
 
-#if 0
-  if (!swfdec_test_test_ensure_player (test))
+  if (!test->plugin_loaded || test->plugin_error || test->plugin_quit)
     return;
 
   button = CLAMP (button, 1, 32);
-  swfdec_player_mouse_press (test->player, x, y, button);
-#else
-  swfdec_test_throw (cx, "implement");
-#endif
+  if (test->plugin.advance) {
+    test->plugin.mouse_press (&test->plugin, x, y, button);
+  } else {
+    swfdec_test_throw (cx, "plugin doesn't implement mouse_press");
+  }
 }
 
 SWFDEC_TEST_FUNCTION ("Test_mouse_release", swfdec_test_test_mouse_release, 0)
@@ -246,15 +250,15 @@ swfdec_test_test_mouse_release (SwfdecAsContext *cx, SwfdecAsObject *object, gui
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "nn|i", &x, &y, &button);
 
-#if 0
-  if (!swfdec_test_test_ensure_player (test))
+  if (!test->plugin_loaded || test->plugin_error || test->plugin_quit)
     return;
 
   button = CLAMP (button, 1, 32);
-  swfdec_player_mouse_release (test->player, x, y, button);
-#else
-  swfdec_test_throw (cx, "implement");
-#endif
+  if (test->plugin.advance) {
+    test->plugin.mouse_release (&test->plugin, x, y, button);
+  } else {
+    swfdec_test_throw (cx, "plugin doesn't implement mouse_press");
+  }
 }
 
 SWFDEC_TEST_FUNCTION ("Test_render", swfdec_test_test_render, 0)
commit 6b0a346c5bba0b26944e5860f1a156599906c14d
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 15:39:35 2008 +0100

    switch to plugin usage
    
    trace directory already works, the rest is broken.

diff --git a/test/swfdec_test.c b/test/swfdec_test.c
index 35e99d1..0559c75 100644
--- a/test/swfdec_test.c
+++ b/test/swfdec_test.c
@@ -31,6 +31,7 @@
 
 #include "swfdec_test_function.h"
 #include "swfdec_test_initialize.h"
+#include "swfdec_test_test.h"
 
 
 /* Start of script file */
@@ -81,6 +82,7 @@ main (int argc, char **argv)
 
   GOptionEntry options[] = {
     { "dump", 'd', 0, G_OPTION_ARG_NONE, &dump, "dump images on failure", FALSE },
+    { "player", 'p', 0, G_OPTION_ARG_STRING, &swfdec_test_plugin_name, "player to test", "NAME" },
     { "script", 's', 0, G_OPTION_ARG_STRING, &script_filename, "script to execute if not ./default.sts", "FILENAME" },
     { NULL }
   };
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index c263bed..bee1e7a 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -30,6 +30,94 @@
 #include "swfdec_test_image.h"
 #include "swfdec_test_utils.h"
 
+/*** PLUGIN HANDLING ***/
+
+#define SWFDEC_TEST_TEST_FROM_PLUGIN(x) \
+  SWFDEC_TEST_TEST ((gpointer) ((guint8 *) (x) - G_STRUCT_OFFSET (SwfdecTestTest, plugin)))
+
+char *swfdec_test_plugin_name = NULL;
+
+static void
+swfdec_test_test_quit (SwfdecTestPlugin *plugin)
+{
+  SwfdecTestTest *test = SWFDEC_TEST_TEST_FROM_PLUGIN (plugin);
+
+  test->plugin_quit = TRUE;
+}
+
+static void
+swfdec_test_test_error (SwfdecTestPlugin *plugin, const char *description)
+{
+  SwfdecTestTest *test = SWFDEC_TEST_TEST_FROM_PLUGIN (plugin);
+
+  if (test->plugin_error)
+    return;
+  test->plugin_error = TRUE;
+  swfdec_test_throw (SWFDEC_AS_OBJECT (test)->context, description);
+}
+
+static void
+swfdec_test_test_trace (SwfdecTestPlugin *plugin, const char *message)
+{
+  SwfdecTestTest *test = SWFDEC_TEST_TEST_FROM_PLUGIN (plugin);
+  gsize len = strlen (message);
+  SwfdecBuffer *buffer;
+
+  buffer = swfdec_buffer_new_and_alloc (len + 1);
+  memcpy (buffer->data, message, len);
+  buffer->data[len] = '\n';
+  swfdec_buffer_queue_push (test->trace, buffer);
+}
+
+static void
+swfdec_test_test_load_plugin (SwfdecTestTest *test, const char *filename)
+{
+  memset (&test->plugin, 0, sizeof (SwfdecTestPlugin));
+  /* initialize test->plugin */
+  test->plugin.filename = g_strdup (filename);
+  test->plugin.trace = swfdec_test_test_trace;
+  test->plugin.quit = swfdec_test_test_quit;
+  test->plugin.error = swfdec_test_test_error;
+
+  /* load the right values */
+  if (swfdec_test_plugin_name) {
+    void (*init) (SwfdecTestPlugin *plugin);
+    char *dir = g_build_filename (g_get_home_dir (), ".swfdec-test", NULL);
+    char *name = g_module_build_path (dir, swfdec_test_plugin_name);
+    g_free (dir);
+    test->module = g_module_open (name, G_MODULE_BIND_LOCAL);
+    if (test->module == NULL) {
+      swfdec_test_throw (SWFDEC_AS_OBJECT (test)->context, "could not find player \"%s\"",
+	  swfdec_test_plugin_name);
+      return;
+    }
+    if (!g_module_symbol (test->module, "swfdec_test_plugin_init", (gpointer) &init)) {
+      g_module_close (test->module);
+      test->module = NULL;
+    }
+    init (&test->plugin);
+  } else {
+    swfdec_test_plugin_swfdec_new (&test->plugin);
+  }
+  test->plugin_loaded = TRUE;
+}
+
+static void
+swfdec_test_test_unload_plugin (SwfdecTestTest *test)
+{
+  if (!test->plugin_loaded)
+    return;
+  test->plugin.finish (&test->plugin);
+  g_free (test->plugin.filename);
+  if (test->module) {
+    g_module_close (test->module);
+    test->module = NULL;
+  }
+  test->plugin_quit = FALSE;
+  test->plugin_error = FALSE;
+  test->plugin_loaded = FALSE;
+}
+
 /*** SWFDEC_TEST_TEST ***/
 
 G_DEFINE_TYPE (SwfdecTestTest, swfdec_test_test, SWFDEC_TYPE_AS_OBJECT)
@@ -46,11 +134,7 @@ swfdec_test_test_dispose (GObject *object)
 
   g_free (test->filename);
   test->filename = NULL;
-  if (test->player) {
-    g_signal_handlers_disconnect_matched (test, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, test);
-    g_object_unref (test->player);
-    test->player = NULL;
-  }
+  swfdec_test_test_unload_plugin (test);
 
   G_OBJECT_CLASS (swfdec_test_test_parent_class)->dispose (object);
 }
@@ -70,61 +154,14 @@ swfdec_test_test_init (SwfdecTestTest *test)
 }
 
 static void
-swfdec_test_test_fscommand (SwfdecPlayer *player, const char *command, 
-    const char *para, SwfdecTestTest *test)
-{
-  if (g_ascii_strcasecmp (command, "quit") == 0) {
-    test->player_quit = TRUE;
-  }
-}
-
-static void
-swfdec_test_test_trace_cb (SwfdecPlayer *player, const char *message, SwfdecTestTest *test)
-{
-  gsize len = strlen (message);
-  SwfdecBuffer *buffer;
-
-  buffer = swfdec_buffer_new_and_alloc (len + 1);
-  memcpy (buffer->data, message, len);
-  buffer->data[len] = '\n';
-  swfdec_buffer_queue_push (test->trace, buffer);
-}
-
-static gboolean
-swfdec_test_test_ensure_player (SwfdecTestTest *test)
-{
-  SwfdecURL *url;
-
-  if (test->filename == NULL)
-    return FALSE;
-  if (test->player)
-    return TRUE;
-
-  g_assert (test->player_quit == FALSE);
-  test->player = swfdec_player_new (NULL);
-  url = swfdec_url_new_from_input (test->filename);
-  swfdec_player_set_url (test->player, url);
-  swfdec_url_free (url);
-  g_signal_connect (test->player, "fscommand", G_CALLBACK (swfdec_test_test_fscommand), test);
-  g_signal_connect (test->player, "trace", G_CALLBACK (swfdec_test_test_trace_cb), test);
-  return TRUE;
-}
-
-static void
 swfdec_test_do_reset (SwfdecTestTest *test, const char *filename)
 {
-  if (test->player) {
-    g_signal_handlers_disconnect_matched (test, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, test);
-    g_object_unref (test->player);
-    test->player = NULL;
-  }
+  swfdec_test_test_unload_plugin (test);
   swfdec_buffer_queue_clear (test->trace);
   if (filename == NULL)
     return;
 
-  g_free (test->filename);
-  test->filename = g_strdup (filename);
-  test->player_quit = FALSE;
+  swfdec_test_test_load_plugin (test, filename);
 }
 
 SWFDEC_TEST_FUNCTION ("Test_advance", swfdec_test_test_advance, 0)
@@ -137,23 +174,10 @@ swfdec_test_test_advance (SwfdecAsContext *cx, SwfdecAsObject *object, guint arg
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "i", &msecs);
 
-  if (msecs < 0 || test->player_quit)
-    return;
-  if (!swfdec_test_test_ensure_player (test))
+  if (msecs < 0 || !test->plugin_loaded || test->plugin_error || test->plugin_quit)
     return;
-  if (msecs == 0) {
-    if (!test->player_quit)
-      swfdec_player_advance (test->player, 0);
-  } else {
-    while (msecs > 0 && !test->player_quit) {
-      int next_event = swfdec_player_get_next_event (test->player);
-      if (next_event < 0)
-	break;
-      next_event = MIN (next_event, msecs);
-      swfdec_player_advance (test->player, next_event);
-      msecs -= next_event;
-    }
-  }
+
+  test->plugin.advance (&test->plugin, msecs);
 }
 
 SWFDEC_TEST_FUNCTION ("Test_reset", swfdec_test_test_reset, 0)
@@ -179,10 +203,14 @@ swfdec_test_test_mouse_move (SwfdecAsContext *cx, SwfdecAsObject *object, guint
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "nn", &x, &y);
 
+#if 0
   if (!swfdec_test_test_ensure_player (test))
     return;
 
   swfdec_player_mouse_move (test->player, x, y);
+#else
+  swfdec_test_throw (cx, "implement");
+#endif
 }
 
 SWFDEC_TEST_FUNCTION ("Test_mouse_press", swfdec_test_test_mouse_press, 0)
@@ -196,11 +224,15 @@ swfdec_test_test_mouse_press (SwfdecAsContext *cx, SwfdecAsObject *object, guint
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "nn|i", &x, &y, &button);
 
+#if 0
   if (!swfdec_test_test_ensure_player (test))
     return;
 
   button = CLAMP (button, 1, 32);
   swfdec_player_mouse_press (test->player, x, y, button);
+#else
+  swfdec_test_throw (cx, "implement");
+#endif
 }
 
 SWFDEC_TEST_FUNCTION ("Test_mouse_release", swfdec_test_test_mouse_release, 0)
@@ -214,11 +246,15 @@ swfdec_test_test_mouse_release (SwfdecAsContext *cx, SwfdecAsObject *object, gui
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "nn|i", &x, &y, &button);
 
+#if 0
   if (!swfdec_test_test_ensure_player (test))
     return;
 
   button = CLAMP (button, 1, 32);
   swfdec_player_mouse_release (test->player, x, y, button);
+#else
+  swfdec_test_throw (cx, "implement");
+#endif
 }
 
 SWFDEC_TEST_FUNCTION ("Test_render", swfdec_test_test_render, 0)
@@ -226,10 +262,9 @@ void
 swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
     SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
+#if 0
   SwfdecTestTest *test;
   SwfdecAsObject *image;
-  int x, y, w, h;
-  cairo_t *cr;
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "|iiii", &x, &y, &w, &h);
 
@@ -249,6 +284,9 @@ swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
   swfdec_player_render (test->player, cr, x, y, w, h);
   cairo_destroy (cr);
   SWFDEC_AS_VALUE_SET_OBJECT (retval, image);
+#else
+  swfdec_test_throw (cx, "implement");
+#endif
 }
 
 SWFDEC_TEST_FUNCTION ("Test", swfdec_test_test_new, swfdec_test_test_get_type)
@@ -293,6 +331,9 @@ swfdec_test_test_get_rate (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "");
 
-  SWFDEC_AS_VALUE_SET_NUMBER (retval, test->player ? swfdec_player_get_rate (test->player) : 0);
+  if (!test->plugin_loaded)
+    return;
+  
+  SWFDEC_AS_VALUE_SET_NUMBER (retval, test->plugin.rate / 256.0);
 }
 
diff --git a/test/swfdec_test_test.h b/test/swfdec_test_test.h
index 110aecc..f074108 100644
--- a/test/swfdec_test_test.h
+++ b/test/swfdec_test_test.h
@@ -21,6 +21,7 @@
 #define _SWFDEC_TEST_TEST_H_
 
 #include "swfdec_test_plugin.h"
+#include <gmodule.h>
 #include <swfdec/swfdec.h>
 
 G_BEGIN_DECLS
@@ -40,9 +41,13 @@ struct _SwfdecTestTest
 {
   SwfdecAsObject	as_object;
 
+  SwfdecTestPlugin	plugin;		/* the plugin we use */
+  GModule *		module;		/* module we loaded the plugin from or NULL */
+  gboolean		plugin_loaded;	/* the plugin is loaded and ready to rumble */
+  gboolean		plugin_quit;	/* the plugin has called quit */
+  gboolean		plugin_error;	/* the plugin has called error */
+
   char *		filename;	/* file the player should be loaded from */
-  SwfdecPlayer *	player;		/* the player or %NULL if none */
-  gboolean		player_quit;	/* the player has called fscommand:quit */
   SwfdecBufferQueue *	trace;		/* all captured trace output */
 };
 
@@ -51,6 +56,8 @@ struct _SwfdecTestTestClass
   SwfdecAsObjectClass	as_object_class;
 };
 
+extern char *swfdec_test_plugin_name;
+
 GType		swfdec_test_test_get_type	(void);
 
 void		swfdec_test_plugin_swfdec_new	(SwfdecTestPlugin *	plugin);
commit cd93f6d47db6d5ae0a7a28a44b86cc74ec523a70
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 15:39:08 2008 +0100

    provide width/height/rate

diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index 6a641fb..abbd653 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -28,13 +28,27 @@
 static void
 swfdec_test_plugin_swfdec_advance (SwfdecTestPlugin *plugin, unsigned int msecs)
 {
-  swfdec_player_advance (plugin->data, msecs);
+  if (msecs == 0) {
+    swfdec_player_advance (plugin->data, 0);
+  } else {
+    while (msecs > 0 && plugin->data) {
+      long next_event = swfdec_player_get_next_event (plugin->data);
+      if (next_event < 0)
+	break;
+      next_event = MIN (next_event, (long) msecs);
+      swfdec_player_advance (plugin->data, next_event);
+      msecs -= next_event;
+    }
+  }
 }
 
 static void
 swfdec_test_plugin_swfdec_finish (SwfdecTestPlugin *plugin)
 {
-  g_object_unref (plugin->data);
+  if (plugin->data) {
+    g_object_unref (plugin->data);
+    plugin->data = NULL;
+  }
 }
 
 static void
@@ -50,6 +64,18 @@ swfdec_test_plugin_swfdec_fscommand (SwfdecPlayer *player, const char *command,
 {
   if (g_ascii_strcasecmp (command, "quit") == 0) {
     plugin->quit (plugin);
+    swfdec_test_plugin_swfdec_finish (plugin);
+  }
+}
+
+static void
+swfdec_test_plugin_swfdec_notify (SwfdecPlayer *player, GParamSpec *pspec, SwfdecTestPlugin *plugin)
+{
+  if (g_str_equal (pspec->name, "default-width") ||
+      g_str_equal (pspec->name, "default-height")) {
+    swfdec_player_get_default_size (player, &plugin->width, &plugin->height);
+  } else if (g_str_equal (pspec->name, "rate")) {
+    plugin->rate = swfdec_player_get_rate (player) * 256;
   }
 }
 
@@ -65,6 +91,7 @@ swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
 
   g_signal_connect (player, "fscommand", G_CALLBACK (swfdec_test_plugin_swfdec_fscommand), plugin);
   g_signal_connect (player, "trace", G_CALLBACK (swfdec_test_plugin_swfdec_trace), plugin);
+  g_signal_connect (player, "notify", G_CALLBACK (swfdec_test_plugin_swfdec_notify), plugin);
   url = swfdec_url_new_from_input (plugin->filename);
   swfdec_player_set_url (player, url);
   swfdec_url_free (url);
commit bb149cc0becbb9f6338169d8acc69c7175d9bf01
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 15:38:57 2008 +0100

    let the plugin provide width/height/rate

diff --git a/test/swfdec_test_plugin.h b/test/swfdec_test_plugin.h
index 86b7f91..d7861f9 100644
--- a/test/swfdec_test_plugin.h
+++ b/test/swfdec_test_plugin.h
@@ -49,6 +49,9 @@ struct _SwfdecTestPlugin {
   void		(* error)	(SwfdecTestPlugin *	plugin,
 				 const char *		description);
   /* initialized by the plugin during swfdec_test_plugin_new() */
+  unsigned int	width;
+  unsigned int	height;
+  unsigned int	rate; /* in 256th of a second */
   void		(* advance)	(SwfdecTestPlugin *	plugin,
 				 unsigned int		msecs);
   void		(* finish)	(SwfdecTestPlugin *	plugin);
commit b2715c1971b8e06cc7f2a501bccc71a194e6ec53
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 15:38:03 2008 +0100

    s/test/swfdec-test/

diff --git a/test/custom/Makefile.am b/test/custom/Makefile.am
index f596de7..11b2d82 100644
--- a/test/custom/Makefile.am
+++ b/test/custom/Makefile.am
@@ -1,6 +1,6 @@
 check-local:
 	for file in $(srcdir)/*.sts; do \
-	  ../test --script $$file $(srcdir)/`basename $$file .sts`*.swf; \
+	  ../swfdec-test --script $$file $(srcdir)/`basename $$file .sts`*.swf; \
 	done
 
 EXTRA_DIST = \
diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index 7fef43b..59e8119 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -1,5 +1,5 @@
 check-local:
-	../test --script $(srcdir)/default.sts $(srcdir)/*.swf
+	../swfdec-test --script $(srcdir)/default.sts $(srcdir)/*.swf
 
 EXTRA_DIST = \
 	README \
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index d2173df..df407cd 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1,5 +1,5 @@
 check-local:
-	../test --script $(srcdir)/default.sts $(srcdir)/*.swf
+	../swfdec-test --script $(srcdir)/default.sts $(srcdir)/*.swf
 
 EXTRA_DIST = \
 	README \
commit 161fb327d6012512877bc78061a2192ed25732cf
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 13:52:19 2008 +0200

    Throw errors in HTTPRequest

diff --git a/test/swfdec_test_http_request.c b/test/swfdec_test_http_request.c
index 9c204a1..15ab90a 100644
--- a/test/swfdec_test_http_request.c
+++ b/test/swfdec_test_http_request.c
@@ -27,6 +27,7 @@
 #include "swfdec_test_http_request.h"
 #include "swfdec_test_http_server.h"
 #include "swfdec_test_function.h"
+#include "swfdec_test_utils.h"
 
 SwfdecAsObject *
 swfdec_test_http_request_new (SwfdecAsContext *context,
@@ -213,8 +214,10 @@ swfdec_test_http_request_push (SwfdecAsContext *cx, SwfdecAsObject *object,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "s", &data);
 
-  if (request->state > SWFDEC_TEST_HTTP_REQUEST_STATE_SENDING)
+  if (request->state > SWFDEC_TEST_HTTP_REQUEST_STATE_SENDING) {
+    swfdec_test_throw (cx, "Reply has already been sent");
     return;
+  }
 
   if (!request->status_set) {
     soup_message_set_status (request->message, SOUP_STATUS_OK);
@@ -239,8 +242,10 @@ swfdec_test_http_request_close (SwfdecAsContext *cx, SwfdecAsObject *object,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_REQUEST, &request, "");
 
-  if (request->state == SWFDEC_TEST_HTTP_REQUEST_STATE_SENT)
+  if (request->state == SWFDEC_TEST_HTTP_REQUEST_STATE_SENT) {
+    swfdec_test_throw (cx, "Reply has already been sent");
     return;
+  }
 
   if (!request->status_set) {
     soup_message_set_status (request->message, SOUP_STATUS_OK);
commit c2a3f848ea386c52932a90c5e48b3751f906c992
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 13:48:33 2008 +0200

    Make HTTPServer throw errors, remove debug code, fix a bug when startup failed

diff --git a/test/swfdec_test_http_server.c b/test/swfdec_test_http_server.c
index be54991..fc03c0f 100644
--- a/test/swfdec_test_http_server.c
+++ b/test/swfdec_test_http_server.c
@@ -28,8 +28,7 @@
 #include "swfdec_test_http_server.h"
 #include "swfdec_test_http_request.h"
 #include "swfdec_test_function.h"
-
-#define SWFDEC_TEST_HTTP_SERVER_IS_VALID(server) ((server)->server)
+#include "swfdec_test_utils.h"
 
 static void
 swfdec_test_http_server_callback (SoupServer *soup_server,
@@ -69,7 +68,7 @@ swfdec_test_http_server_start (SwfdecTestHTTPServer *server)
   server->server = soup_server_new (SOUP_SERVER_PORT, server->port,
       SOUP_SERVER_INTERFACE, address, SOUP_SERVER_ASYNC_CONTEXT,
       server->context, NULL);
-  if (!server) {
+  if (!server->server) {
     g_main_context_unref (server->context);
     server->context = NULL;
     return FALSE;
@@ -102,7 +101,11 @@ swfdec_test_http_server_new (SwfdecAsContext *context, guint port)
 
   SWFDEC_TEST_HTTP_SERVER (ret)->port = port;
 
-  swfdec_test_http_server_start (SWFDEC_TEST_HTTP_SERVER (ret));
+  if (!swfdec_test_http_server_start (SWFDEC_TEST_HTTP_SERVER (ret))) {
+    swfdec_test_throw (context, "Failed to start web server for port %i",
+	port);
+    return NULL;
+  }
 
   return ret;
 }
@@ -162,19 +165,17 @@ swfdec_test_http_server_get_request (SwfdecAsContext *cx,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_HTTP_SERVER, &server, "");
 
-  SWFDEC_AS_VALUE_SET_NULL (retval);
-
-  if (!SWFDEC_TEST_HTTP_SERVER_IS_VALID (server))
+  if (!server->server) {
+    swfdec_test_throw (cx, "Webserver not running");
     return;
+  }
 
-  if (g_queue_is_empty (server->messages)) {
-    g_print ("waiting\n");
-    usleep (1000000);
-    g_print ("checking\n");
+  if (g_queue_is_empty (server->messages))
     swfdec_test_http_server_run (server);
-  }
 
-  if (!g_queue_is_empty (server->messages)) {
+  if (g_queue_is_empty (server->messages)) {
+    SWFDEC_AS_VALUE_SET_NULL (retval);
+  } else {
     SwfdecAsObject *request;
 
     request = swfdec_test_http_request_new (cx, server,
@@ -199,5 +200,6 @@ swfdec_test_http_server_create (SwfdecAsContext *cx, SwfdecAsObject *object, gui
 
   server->port = port;
 
-  swfdec_test_http_server_start (server);
+  if (!swfdec_test_http_server_start (server))
+    swfdec_test_throw (cx, "Failed to start web server for port %i", port);
 }
commit b173b6b1c711dd228573129366b08235af3982e6
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 13:35:19 2008 +0200

    Free messages that where never requested in HTTPServer

diff --git a/test/swfdec_test_http_server.c b/test/swfdec_test_http_server.c
index d6b65be..be54991 100644
--- a/test/swfdec_test_http_server.c
+++ b/test/swfdec_test_http_server.c
@@ -116,6 +116,12 @@ swfdec_test_http_server_dispose (GObject *object)
 {
   SwfdecTestHTTPServer *server = SWFDEC_TEST_HTTP_SERVER (object);
 
+  while (!g_queue_is_empty (server->messages)) {
+    g_object_unref (g_queue_pop_tail (server->messages));
+  }
+  g_queue_free (server->messages);
+  server->messages = NULL;
+
   if (server->server) {
     soup_server_quit (server->server);
     g_object_unref (server->server);
@@ -127,8 +133,6 @@ swfdec_test_http_server_dispose (GObject *object)
     server->context = NULL;
   }
 
-  g_queue_free (server->messages);
-
   G_OBJECT_CLASS (swfdec_test_http_server_parent_class)->dispose (object);
 }
 
commit 4c29367c1b1e4dd7000a122fa6a128d2a2595b69
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 13:31:54 2008 +0200

    Fix a typo in swfdec_test_socket_process

diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index a0382f6..7cf921c 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -89,7 +89,7 @@ swfdec_test_socket_process (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
 {
   SwfdecTestSocket *sock;
   
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &socket, "");
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
 
   while (g_main_context_iteration (sock->context, FALSE));
 }
commit 77ce79d179ed289bff2035feb9efc5c7ddb526b0
Merge: ec81057... 43d8d7d...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Feb 1 13:30:02 2008 +0200

    Merge commit 'origin/test' into httptest
    
    Conflicts:
    
    	test/swfdec_test_function.c
    	test/swfdec_test_initialize.as
    	test/swfdec_test_initialize.h

diff --cc test/Makefile.am
index 398f442,bb79d49..bdc0196
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@@ -4,12 -4,14 +4,16 @@@ noinst_PROGRAMS = swfdec-tes
  
  swfdec_test_sources = \
  	swfdec_test.c \
+ 	swfdec_test_buffer.c \
  	swfdec_test_function.c \
  	swfdec_test_global.c \
 +	swfdec_test_http_request.c \
 +	swfdec_test_http_server.c \
  	swfdec_test_image.c \
- 	swfdec_test_test.c
+ 	swfdec_test_plugin.c \
+ 	swfdec_test_socket.c \
+ 	swfdec_test_test.c \
+ 	swfdec_test_utils.c
  
  BUILT_SOURCES = \
  	swfdec_test_function_list.h
@@@ -25,16 -27,18 +29,20 @@@ EXTRA_DIST = 
  	swfdec_test_initialize.as
  
  noinst_HEADERS = \
+ 	swfdec_test_buffer.h \
  	swfdec_test_function.h \
  	swfdec_test_function_list.h \
 +	swfdec_test_http_request.h \
 +	swfdec_test_http_server.h \
  	swfdec_test_image.h \
  	swfdec_test_initialize.h \
- 	swfdec_test_test.h
+ 	swfdec_test_plugin.h \
+ 	swfdec_test_socket.h \
+ 	swfdec_test_test.h \
+ 	swfdec_test_utils.h
  	
- test_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
- test_LDFLAGS = $(SWFDEC_LIBS) $(GTK_LIBS) $(CAIRO_LIBS)
+ swfdec_test_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
+ swfdec_test_LDFLAGS = $(SWFDEC_LIBS) $(GTK_LIBS) $(CAIRO_LIBS)
  
  swfdec_test_function_list.h: $(swfdec_test_sources)
  	(cd $(srcdir) \
diff --cc test/swfdec_test_function.c
index 9c5a510,6f13bbb..e29707b
--- a/test/swfdec_test_function.c
+++ b/test/swfdec_test_function.c
@@@ -25,9 -25,9 +25,11 @@@
  #include "swfdec_test_function_list.h"
  
  /* needed by the function list */
 +#include "swfdec_test_http_request.h"
 +#include "swfdec_test_http_server.h"
+ #include "swfdec_test_buffer.h"
  #include "swfdec_test_image.h"
+ #include "swfdec_test_socket.h"
  #include "swfdec_test_test.h"
  
  
diff --cc test/swfdec_test_initialize.as
index 7f94b83,b496163..37cb827
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@@ -22,20 -27,10 +27,24 @@@ Image.prototype = {}
  Image.prototype.compare = Native.Image_compare;
  Image.prototype.save = Native.Image_save;
  
 +HTTPServer = Native.HTTPServer;
 +HTTPServer.prototype = {};
 +HTTPServer.prototype.getRequest = Native.HTTPServer_getRequest;
 +
 +HTTPRequest = new Object ();
 +HTTPRequest.prototype = {};
 +HTTPRequest.prototype.addProperty ("server", Native.HTTPRequest_get_server, null);
 +HTTPRequest.prototype.addProperty ("url", Native.HTTPRequest_get_url, null);
 +HTTPRequest.prototype.addProperty ("path", Native.HTTPRequest_get_path, null);
 +HTTPRequest.prototype.addProperty ("headers", Native.HTTPRequest_get_headers, null);
 +HTTPRequest.prototype.toString = Native.HTTPRequest_toString;
 +HTTPRequest.prototype.push = Native.HTTPRequest_push;
 +HTTPRequest.prototype.close = Native.HTTPRequest_close;
 +
+ Socket = Native.Socket;
+ Socket.prototype = {};
+ Socket.prototype.process = Native.Socket_process;
+ 
  Test = Native.Test;
  Test.prototype = {};
  Test.prototype.advance = Native.Test_advance;
diff --cc test/swfdec_test_initialize.h
index 9b6c0c8,a8e5023..783d316
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@@ -2,89 -2,67 +2,104 @@@
  
  /* compiled from swfdec_test_initialize.as */
  static const unsigned char swfdec_test_initialize[] = {
-   0x88, 0x1E, 0x02, 0x31,  0x00, 0x49, 0x6D, 0x61,  0x67, 0x65, 0x00, 0x4E,  0x61, 0x74, 0x69, 0x76,
-   0x65, 0x00, 0x70, 0x72,  0x6F, 0x74, 0x6F, 0x74,  0x79, 0x70, 0x65, 0x00,  0x63, 0x6F, 0x6D, 0x70,
-   0x61, 0x72, 0x65, 0x00,  0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x63, 0x6F,  0x6D, 0x70, 0x61, 0x72,
-   0x65, 0x00, 0x73, 0x61,  0x76, 0x65, 0x00, 0x49,  0x6D, 0x61, 0x67, 0x65,  0x5F, 0x73, 0x61, 0x76,
-   0x65, 0x00, 0x48, 0x54,  0x54, 0x50, 0x53, 0x65,  0x72, 0x76, 0x65, 0x72,  0x00, 0x67, 0x65, 0x74,
-   0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x00,  0x48, 0x54, 0x54, 0x50,  0x53, 0x65, 0x72, 0x76,
-   0x65, 0x72, 0x5F, 0x67,  0x65, 0x74, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x00, 0x48, 0x54,
-   0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x00, 0x4F, 0x62,  0x6A, 0x65, 0x63, 0x74,
-   0x00, 0x73, 0x65, 0x72,  0x76, 0x65, 0x72, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,
-   0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x73, 0x65, 0x72, 0x76,  0x65, 0x72, 0x00, 0x61,
-   0x64, 0x64, 0x50, 0x72,  0x6F, 0x70, 0x65, 0x72,  0x74, 0x79, 0x00, 0x75,  0x72, 0x6C, 0x00, 0x48,
-   0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x75,
-   0x72, 0x6C, 0x00, 0x70,  0x61, 0x74, 0x68, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,
-   0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x70, 0x61, 0x74, 0x68,  0x00, 0x68, 0x65, 0x61,
-   0x64, 0x65, 0x72, 0x73,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
-   0x5F, 0x67, 0x65, 0x74,  0x5F, 0x68, 0x65, 0x61,  0x64, 0x65, 0x72, 0x73,  0x00, 0x74, 0x6F, 0x53,
-   0x74, 0x72, 0x69, 0x6E,  0x67, 0x00, 0x48, 0x54,  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,
-   0x74, 0x5F, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,  0x6E, 0x67, 0x00, 0x70,  0x75, 0x73, 0x68, 0x00,
-   0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,  0x70, 0x75, 0x73, 0x68,
-   0x00, 0x63, 0x6C, 0x6F,  0x73, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
-   0x73, 0x74, 0x5F, 0x63,  0x6C, 0x6F, 0x73, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x00, 0x61, 0x64,
-   0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x61,  0x64, 0x76, 0x61, 0x6E,
-   0x63, 0x65, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x54, 0x65,
-   0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x6D, 0x6F,
-   0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,
-   0x6F, 0x75, 0x73, 0x65,  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,
-   0x5F, 0x72, 0x65, 0x6C,  0x65, 0x61, 0x73, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,
-   0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,  0x72, 0x65, 0x6E, 0x64,
-   0x65, 0x72, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x72, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x00, 0x72,
-   0x65, 0x73, 0x65, 0x74,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,
-   0x74, 0x72, 0x61, 0x63,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x74,  0x72, 0x61, 0x63, 0x65,
-   0x00, 0x72, 0x61, 0x74,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x67,  0x65, 0x74, 0x5F, 0x72,
-   0x61, 0x74, 0x65, 0x00,  0x70, 0x72, 0x69, 0x6E,  0x74, 0x00, 0x73, 0x00,  0x49, 0x4E, 0x46, 0x4F,
-   0x3A, 0x20, 0x00, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x45, 0x52, 0x52,  0x4F, 0x52, 0x3A, 0x20,
-   0x00, 0x96, 0x04, 0x00,  0x08, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x00, 0x4E, 0x1D,
-   0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x02, 0x07,  0x00, 0x00, 0x00, 0x00,
-   0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,
-   0x00, 0x08, 0x03, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-   0x08, 0x00, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x05, 0x08, 0x01,
-   0x1C, 0x96, 0x02, 0x00,  0x08, 0x06, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x07, 0x08, 0x01, 0x1C,
-   0x96, 0x02, 0x00, 0x08,  0x07, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x07, 0x00,
-   0x08, 0x02, 0x07, 0x00,  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,
-   0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x08, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-   0x08, 0x09, 0x4E, 0x4F,  0x96, 0x09, 0x00, 0x08,  0x0A, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x0B,
-   0x40, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x02, 0x07, 0x00, 0x00,
-   0x00, 0x00, 0x43, 0x4F,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0D,
-   0x4E, 0x96, 0x09, 0x00,  0x08, 0x0C, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
-   0x00, 0x08, 0x02, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x0E, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,
-   0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x10, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x0F, 0x07, 0x03, 0x00,
-   0x00, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x0E,
-   0x52, 0x17, 0x96, 0x03,  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x12, 0x4E, 0x96,
-   0x09, 0x00, 0x08, 0x11,  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-   0x02, 0x4E, 0x96, 0x02,  0x00, 0x08, 0x0E, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,
-   0x96, 0x02, 0x00, 0x08,  0x14, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x13, 0x07,  0x03, 0x00, 0x00, 0x00,
-   0x08, 0x0A, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x52, 0x17,
-   0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,
-   0x15, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x16, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,
-   0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x17,  0x08, 0x01, 0x1C, 0x96,
-   0x02, 0x00, 0x08, 0x18,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,
-   0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x19, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1A, 0x4E,
-   0x4F, 0x96, 0x04, 0x00,  0x08, 0x1B, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x4E, 0x1D,
-   0x96, 0x02, 0x00, 0x08,  0x1B, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x02, 0x07,  0x00, 0x00, 0x00, 0x00,
-   0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x1B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,
-   0x00, 0x08, 0x1C, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1D, 0x4E,  0x4F, 0x96, 0x02, 0x00,
-   0x08, 0x1B, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x1E, 0x08, 0x01,
-   0x1C, 0x96, 0x02, 0x00,  0x08, 0x1F, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x1B, 0x1C, 0x96, 0x02,
-   0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x20, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-   0x21, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x1B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,
-   0x04, 0x00, 0x08, 0x22,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x23,  0x4E, 0x4F, 0x96, 0x02,
-   0x00, 0x08, 0x1B, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x24, 0x08,
-   0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x25, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x1C, 0x96,
-   0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x26, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-   0x08, 0x27, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x1B, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,
-   0x96, 0x04, 0x00, 0x08,  0x28, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x29, 0x4E, 0x4F, 0x96,
-   0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2B, 0x4E,  0x96, 0x09, 0x00, 0x08,
-   0x2A, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x1B,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,
-   0x02, 0x00, 0x08, 0x0E,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x2C, 0x8E,  0x0B, 0x00, 0x00, 0x01,
-   0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x2D, 0x1C, 0x12,
-   0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x2E, 0x08, 0x2D,  0x1C, 0x47, 0x96, 0x07,
-   0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2C, 0x52, 0x17,
-   0x1D, 0x96, 0x02, 0x00,  0x08, 0x2F, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
-   0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x2D, 0x1C, 0x12, 0x9D,  0x02, 0x00, 0x1B, 0x00,
-   0x96, 0x04, 0x00, 0x08,  0x30, 0x08, 0x2D, 0x1C,  0x47, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
-   0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x2C, 0x52, 0x17, 0x1D,  0x00
 -  0x88, 0x6E, 0x01, 0x26,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
++  0x88, 0x69, 0x02, 0x39,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+   0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
+   0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
+   0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
+   0x6D, 0x61, 0x67, 0x65,  0x00, 0x63, 0x6F, 0x6D,  0x70, 0x61, 0x72, 0x65,  0x00, 0x49, 0x6D, 0x61,
+   0x67, 0x65, 0x5F, 0x63,  0x6F, 0x6D, 0x70, 0x61,  0x72, 0x65, 0x00, 0x73,  0x61, 0x76, 0x65, 0x00,
 -  0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x73, 0x61,  0x76, 0x65, 0x00, 0x53,  0x6F, 0x63, 0x6B, 0x65,
 -  0x74, 0x00, 0x70, 0x72,  0x6F, 0x63, 0x65, 0x73,  0x73, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
 -  0x5F, 0x70, 0x72, 0x6F,  0x63, 0x65, 0x73, 0x73,  0x00, 0x54, 0x65, 0x73,  0x74, 0x00, 0x61, 0x64,
 -  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x61,  0x64, 0x76, 0x61, 0x6E,
 -  0x63, 0x65, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x54, 0x65,
 -  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x6D, 0x6F,
 -  0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,
 -  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,
 -  0x5F, 0x72, 0x65, 0x6C,  0x65, 0x61, 0x73, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,
 -  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,  0x72, 0x65, 0x6E, 0x64,
 -  0x65, 0x72, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x72, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x00, 0x72,
 -  0x65, 0x73, 0x65, 0x74,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,
 -  0x72, 0x61, 0x74, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x72, 0x61,
 -  0x74, 0x65, 0x00, 0x61,  0x64, 0x64, 0x50, 0x72,  0x6F, 0x70, 0x65, 0x72,  0x74, 0x79, 0x00, 0x74,
 -  0x72, 0x61, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x74, 0x72,
 -  0x61, 0x63, 0x65, 0x00,  0x70, 0x72, 0x69, 0x6E,  0x74, 0x00, 0x73, 0x00,  0x49, 0x4E, 0x46, 0x4F,
 -  0x3A, 0x20, 0x00, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x45, 0x52, 0x52,  0x4F, 0x52, 0x3A, 0x20,
 -  0x00, 0x96, 0x04, 0x00,  0x08, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x00, 0x4E, 0x1D,
 -  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
 -  0x00, 0x08, 0x03, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
 -  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x02, 0x00,
 -  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x05,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x06,
 -  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x07, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x07, 0x4E,
 -  0x1D, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
 -  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
 -  0x04, 0x00, 0x08, 0x08,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x09,  0x4E, 0x4F, 0x96, 0x02,
 -  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0A, 0x08,
 -  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x0C, 0x08, 0x01,
 -  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x07,
 -  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x1C,
 -  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0D, 0x08,  0x01, 0x1C, 0x96, 0x02,
 -  0x00, 0x08, 0x0E, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x0F, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
 -  0x08, 0x0F, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,
 -  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,
 -  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x10, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x11, 0x4E,
 -  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
 -  0x08, 0x12, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
 -  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x14, 0x08, 0x01, 0x1C,
 -  0x96, 0x02, 0x00, 0x08,  0x15, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,
 -  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x16,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x17,
++  0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x73, 0x61,  0x76, 0x65, 0x00, 0x48,  0x54, 0x54, 0x50, 0x53,
++  0x65, 0x72, 0x76, 0x65,  0x72, 0x00, 0x67, 0x65,  0x74, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,
++  0x00, 0x48, 0x54, 0x54,  0x50, 0x53, 0x65, 0x72,  0x76, 0x65, 0x72, 0x5F,  0x67, 0x65, 0x74, 0x52,
++  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x00, 0x48,  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,
++  0x73, 0x74, 0x00, 0x4F,  0x62, 0x6A, 0x65, 0x63,  0x74, 0x00, 0x73, 0x65,  0x72, 0x76, 0x65, 0x72,
++  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,
++  0x5F, 0x73, 0x65, 0x72,  0x76, 0x65, 0x72, 0x00,  0x61, 0x64, 0x64, 0x50,  0x72, 0x6F, 0x70, 0x65,
++  0x72, 0x74, 0x79, 0x00,  0x75, 0x72, 0x6C, 0x00,  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,
++  0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x75, 0x72, 0x6C, 0x00,  0x70, 0x61, 0x74, 0x68,
++  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,  0x75, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,
++  0x5F, 0x70, 0x61, 0x74,  0x68, 0x00, 0x68, 0x65,  0x61, 0x64, 0x65, 0x72,  0x73, 0x00, 0x48, 0x54,
++  0x54, 0x50, 0x52, 0x65,  0x71, 0x75, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x68, 0x65,
++  0x61, 0x64, 0x65, 0x72,  0x73, 0x00, 0x74, 0x6F,  0x53, 0x74, 0x72, 0x69,  0x6E, 0x67, 0x00, 0x48,
++  0x54, 0x54, 0x50, 0x52,  0x65, 0x71, 0x75, 0x65,  0x73, 0x74, 0x5F, 0x74,  0x6F, 0x53, 0x74, 0x72,
++  0x69, 0x6E, 0x67, 0x00,  0x70, 0x75, 0x73, 0x68,  0x00, 0x48, 0x54, 0x54,  0x50, 0x52, 0x65, 0x71,
++  0x75, 0x65, 0x73, 0x74,  0x5F, 0x70, 0x75, 0x73,  0x68, 0x00, 0x63, 0x6C,  0x6F, 0x73, 0x65, 0x00,
++  0x48, 0x54, 0x54, 0x50,  0x52, 0x65, 0x71, 0x75,  0x65, 0x73, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,
++  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x70, 0x72, 0x6F,  0x63, 0x65, 0x73, 0x73,
++  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x70, 0x72, 0x6F, 0x63,  0x65, 0x73, 0x73, 0x00,
++  0x54, 0x65, 0x73, 0x74,  0x00, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,
++  0x74, 0x5F, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
++  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
++  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,  0x72, 0x65, 0x73, 0x73,
++  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,
++  0x73, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,
++  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,  0x65, 0x6C, 0x65, 0x61,
++  0x73, 0x65, 0x00, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,
++  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,  0x54, 0x65, 0x73, 0x74,
++  0x5F, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x72,  0x61, 0x74, 0x65, 0x00,  0x54, 0x65, 0x73, 0x74,
++  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x72, 0x61, 0x74,  0x65, 0x00, 0x74, 0x72,  0x61, 0x63, 0x65, 0x00,
++  0x54, 0x65, 0x73, 0x74,  0x5F, 0x67, 0x65, 0x74,  0x5F, 0x74, 0x72, 0x61,  0x63, 0x65, 0x00, 0x70,
++  0x72, 0x69, 0x6E, 0x74,  0x00, 0x73, 0x00, 0x49,  0x4E, 0x46, 0x4F, 0x3A,  0x20, 0x00, 0x65, 0x72,
++  0x72, 0x6F, 0x72, 0x00,  0x45, 0x52, 0x52, 0x4F,  0x52, 0x3A, 0x20, 0x00,  0x96, 0x04, 0x00, 0x08,
++  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x00, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x00,
++  0x1C, 0x96, 0x04, 0x00,  0x08, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x03, 0x4E, 0x4F,
++  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,
++  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
++  0x00, 0x08, 0x05, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x06, 0x4E,  0x4F, 0x96, 0x04, 0x00,
++  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x07, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,
++  0x07, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
++  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x08, 0x08,
++  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,
++  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0A, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
++  0x08, 0x0B, 0x4E, 0x4F,  0x96, 0x04, 0x00, 0x08,  0x0C, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
++  0x0C, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x0C,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x04, 0x07, 0x00,
++  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
++  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0D, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0E, 0x4E, 0x4F,
++  0x96, 0x09, 0x00, 0x08,  0x0F, 0x07, 0x00, 0x00,  0x00, 0x00, 0x08, 0x10,  0x40, 0x1D, 0x96, 0x02,
++  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x07, 0x00, 0x08,  0x04, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,
++  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x12,  0x4E, 0x96, 0x09, 0x00,
++  0x08, 0x11, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,
++  0x96, 0x02, 0x00, 0x08,  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
++  0x00, 0x08, 0x15, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x14, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0F,
++  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,  0x52, 0x17, 0x96, 0x03,
++  0x00, 0x02, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x17, 0x4E, 0x96,  0x09, 0x00, 0x08, 0x16,
++  0x07, 0x03, 0x00, 0x00,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x02,
++  0x00, 0x08, 0x13, 0x52,  0x17, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
++  0x19, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x18, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x0F, 0x1C, 0x96,
++  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x13, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
++  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x1A, 0x08, 0x01, 0x1C,
++  0x96, 0x02, 0x00, 0x08,  0x1B, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,
++  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x1C,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x1D,
+   0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
 -  0x00, 0x08, 0x18, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x4F, 0x96, 0x02, 0x00,
 -  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x1A, 0x08, 0x01,
 -  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x4E, 0x4F,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,
 -  0x02, 0x00, 0x08, 0x1D,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1C, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
 -  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x1E, 0x52, 0x17, 0x96,
 -  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x20, 0x4E,  0x96, 0x09, 0x00, 0x08,
 -  0x1F, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
 -  0x02, 0x00, 0x08, 0x1E,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x21, 0x8E,  0x0B, 0x00, 0x00, 0x01,
 -  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x22, 0x1C, 0x12,
 -  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x23, 0x08, 0x22,  0x1C, 0x47, 0x96, 0x07,
 -  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x52, 0x17,
 -  0x1D, 0x96, 0x02, 0x00,  0x08, 0x24, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
 -  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x22, 0x1C, 0x12, 0x9D,  0x02, 0x00, 0x1B, 0x00,
 -  0x96, 0x04, 0x00, 0x08,  0x25, 0x08, 0x22, 0x1C,  0x47, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
 -  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x21, 0x52, 0x17, 0x1D,  0x00
++  0x00, 0x08, 0x1E, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1F, 0x4E,  0x4F, 0x96, 0x04, 0x00,
++  0x08, 0x20, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x20, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,
++  0x20, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
++  0x00, 0x08, 0x20, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x21, 0x08,
++  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x22, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x23, 0x08, 0x01,
++  0x1C, 0x96, 0x02, 0x00,  0x08, 0x23, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x07,
++  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x23, 0x1C,
++  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x24, 0x08,  0x01, 0x1C, 0x96, 0x02,
++  0x00, 0x08, 0x25, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x23, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
++  0x4E, 0x96, 0x04, 0x00,  0x08, 0x26, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x27, 0x4E, 0x4F,
++  0x96, 0x02, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,
++  0x28, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x29, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x23,
++  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x2A,  0x08, 0x01, 0x1C, 0x96,
++  0x02, 0x00, 0x08, 0x2B,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x23, 0x1C,  0x96, 0x02, 0x00, 0x08,
++  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x2C, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x2D, 0x4E,
++  0x4F, 0x96, 0x02, 0x00,  0x08, 0x23, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
++  0x08, 0x2E, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x2F, 0x4E, 0x4F,  0x96, 0x03, 0x00, 0x02,
++  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x31,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x30, 0x07, 0x03,
++  0x00, 0x00, 0x00, 0x08,  0x23, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,
++  0x13, 0x52, 0x17, 0x96,  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x33, 0x4E,
++  0x96, 0x09, 0x00, 0x08,  0x32, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x23,  0x1C, 0x96, 0x02, 0x00,
++  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x13,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x34, 0x8E,
++  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,
++  0x08, 0x35, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x36, 0x08, 0x35,
++  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
++  0x08, 0x34, 0x52, 0x17,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x37, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,
++  0x00, 0x00, 0x00, 0x00,  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x35, 0x1C, 0x12, 0x9D,
++  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x38, 0x08, 0x35, 0x1C,  0x47, 0x96, 0x07, 0x00,
++  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x34, 0x52, 0x17, 0x1D,
++  0x00
  };
  
commit 43d8d7d5965b76f254b625a71932ab5a2a7e1fcf
Merge: a5890de... 3f4498b...
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 12:21:11 2008 +0100

    Merge branch 'master' into test

commit a5890de4725defa52b39760e67db9a280917ea88
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 11:51:36 2008 +0100

    rename test to swfdec-test

diff --git a/test/Makefile.am b/test/Makefile.am
index d5e6903..bb79d49 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,6 +1,6 @@
 SUBDIRS = custom image sound trace various
 
-noinst_PROGRAMS = test
+noinst_PROGRAMS = swfdec-test
 
 swfdec_test_sources = \
 	swfdec_test.c \
@@ -19,7 +19,7 @@ BUILT_SOURCES = \
 CLEANFILES = \
 	$(BUILT_SOURCES)
 
-test_SOURCES = \
+swfdec_test_SOURCES = \
 	$(swfdec_test_sources) \
 	$(BUILT_SOURCES)
 
@@ -37,8 +37,8 @@ noinst_HEADERS = \
 	swfdec_test_test.h \
 	swfdec_test_utils.h
 	
-test_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
-test_LDFLAGS = $(SWFDEC_LIBS) $(GTK_LIBS) $(CAIRO_LIBS)
+swfdec_test_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
+swfdec_test_LDFLAGS = $(SWFDEC_LIBS) $(GTK_LIBS) $(CAIRO_LIBS)
 
 swfdec_test_function_list.h: $(swfdec_test_sources)
 	(cd $(srcdir) \
commit fcfe7dab1cfd4872074c46dbb82398f6f42e6655
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 11:46:43 2008 +0100

    do a memcmp first and only spawn diff if that fails
    
    5-10% performance gain

diff --git a/test/swfdec_test_buffer.c b/test/swfdec_test_buffer.c
index 76f8d8c..e637298 100644
--- a/test/swfdec_test_buffer.c
+++ b/test/swfdec_test_buffer.c
@@ -87,6 +87,11 @@ swfdec_test_diff_buffers (SwfdecBuffer *buf1, SwfdecBuffer *buf2, GError **error
   char *file1, *file2, *diff;
   int fd;
 
+  /* shortcut the (hopefully) common case of equality */
+  if (buf1->length == buf2->length && 
+      memcmp (buf1->data, buf2->data, buf1->length) == 0)
+    return NULL;
+
   /* write the first buffer to a temporary file */
   fd = g_file_open_tmp (NULL, &file1, error);
   if (fd < 0)
commit a0ef9d4717b21b83625cbe2e7c565c4ae0555931
Author: Benjamin Otte <otte at gnome.org>
Date:   Fri Feb 1 11:29:29 2008 +0100

    rewrite tracing API
    
    - There's now a Buffer class for holding binary buffers. It contains a
      "diff" method.
    - test.trace gives you a binary buffer containing trace output (FIXME: Should
      this be a string instead?)
    - test rewritten to use this

diff --git a/test/Makefile.am b/test/Makefile.am
index 6c07c3c..d5e6903 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -4,6 +4,7 @@ noinst_PROGRAMS = test
 
 swfdec_test_sources = \
 	swfdec_test.c \
+	swfdec_test_buffer.c \
 	swfdec_test_function.c \
 	swfdec_test_global.c \
 	swfdec_test_image.c \
@@ -26,6 +27,7 @@ EXTRA_DIST = \
 	swfdec_test_initialize.as
 
 noinst_HEADERS = \
+	swfdec_test_buffer.h \
 	swfdec_test_function.h \
 	swfdec_test_function_list.h \
 	swfdec_test_image.h \
diff --git a/test/swfdec_test_buffer.c b/test/swfdec_test_buffer.c
new file mode 100644
index 0000000..76f8d8c
--- /dev/null
+++ b/test/swfdec_test_buffer.c
@@ -0,0 +1,232 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <unistd.h>
+
+#include "swfdec_test_buffer.h"
+#include "swfdec_test_function.h"
+#include "swfdec_test_utils.h"
+
+SwfdecAsObject *
+swfdec_test_buffer_new (SwfdecAsContext *context, SwfdecBuffer *buffer)
+{
+  SwfdecAsValue val;
+  SwfdecAsObject *ret;
+
+  if (!swfdec_as_context_use_mem (context, sizeof (SwfdecTestBuffer)))
+    return NULL;
+
+  ret = g_object_new (SWFDEC_TYPE_TEST_BUFFER, NULL);
+  swfdec_as_object_add (ret, context, sizeof (SwfdecTestBuffer));
+  swfdec_as_object_get_variable (context->global, 
+      swfdec_as_context_get_string (context, "Buffer"), &val);
+  if (SWFDEC_AS_VALUE_IS_OBJECT (&val))
+    swfdec_as_object_set_constructor (ret, SWFDEC_AS_VALUE_GET_OBJECT (&val));
+
+  SWFDEC_TEST_BUFFER (ret)->buffer = buffer;
+  return ret;
+}
+
+/*** SWFDEC_TEST_BUFFER ***/
+
+G_DEFINE_TYPE (SwfdecTestBuffer, swfdec_test_buffer, SWFDEC_TYPE_AS_OBJECT)
+
+static void
+swfdec_test_buffer_dispose (GObject *object)
+{
+  SwfdecTestBuffer *buffer = SWFDEC_TEST_BUFFER (object);
+
+  if (buffer->buffer) {
+    swfdec_buffer_unref (buffer->buffer);
+    buffer->buffer = NULL;
+  }
+
+  G_OBJECT_CLASS (swfdec_test_buffer_parent_class)->dispose (object);
+}
+
+static void
+swfdec_test_buffer_class_init (SwfdecTestBufferClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->dispose = swfdec_test_buffer_dispose;
+}
+
+static void
+swfdec_test_buffer_init (SwfdecTestBuffer *buffer)
+{
+}
+
+/*** AS CODE ***/
+
+static char *
+swfdec_test_diff_buffers (SwfdecBuffer *buf1, SwfdecBuffer *buf2, GError **error)
+{
+  const char *command[] = { "diff", "-u", NULL, NULL, NULL };
+  char *file1, *file2, *diff;
+  int fd;
+
+  /* write the first buffer to a temporary file */
+  fd = g_file_open_tmp (NULL, &file1, error);
+  if (fd < 0)
+    return NULL;
+  if (write (fd, buf1->data, buf1->length) != (int) buf1->length) {
+    close (fd);
+    g_free (file1);
+    g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+	"Could not write data to temporary file");
+    return NULL;
+  }
+  close (fd);
+
+  /* write the second buffer to a temporary file */
+  fd = g_file_open_tmp (NULL, &file2, error);
+  if (fd < 0) {
+    g_free (file1);
+    return NULL;
+  }
+  if (write (fd, buf2->data, buf2->length) != (int) buf2->length) {
+    close (fd);
+    g_free (file1);
+    g_free (file2);
+    g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+	"Could not write data to temporary file");
+    return NULL;
+  }
+  close (fd);
+
+  /* run diff command */
+  command[2] = file1;
+  command[3] = file2;
+  if (!g_spawn_sync (NULL, (char **) command, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
+	&diff, NULL, NULL, error)) {
+    unlink (file1);
+    unlink (file2);
+    g_free (file1);
+    g_free (file2);
+    return NULL;
+  }
+  unlink (file1);
+  unlink (file2);
+  g_free (file1);
+  g_free (file2);
+  return diff;
+}
+
+SWFDEC_TEST_FUNCTION ("Buffer_diff", swfdec_test_buffer_diff, 0)
+void
+swfdec_test_buffer_diff (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestBuffer *buffer, *compare;
+  GError *error = NULL;
+  char *ret;
+  
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "|o", &compare);
+
+  if (!SWFDEC_IS_TEST_BUFFER (compare)) {
+    swfdec_test_throw (cx, "must pass a buffer to Buffer.diff");
+    return;
+  }
+
+  ret = swfdec_test_diff_buffers (buffer->buffer, compare->buffer, &error);
+  if (ret) {
+    SWFDEC_AS_VALUE_SET_STRING (retval, 
+	swfdec_as_context_give_string (cx, ret));
+  } else {
+    if (error) {
+      swfdec_test_throw (cx, "s", error->message);
+      g_error_free (error);
+    } else {
+      SWFDEC_AS_VALUE_SET_STRING (retval, 
+	  swfdec_as_context_get_string (cx, ""));
+    }
+  }
+}
+
+SWFDEC_TEST_FUNCTION ("Buffer_load", swfdec_test_buffer_load, 0)
+void
+swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecBuffer *b;
+  SwfdecAsObject *buffer;
+  const char *filename;
+  GError *error = NULL;
+  
+  SWFDEC_AS_CHECK (0, NULL, "s", &filename);
+
+  b = swfdec_buffer_new_from_file (filename, &error);
+  if (b == NULL) {
+    swfdec_test_throw (cx, "%s", error->message);
+    g_error_free (error);
+    return;
+  }
+
+  buffer = swfdec_test_buffer_new (cx, b);
+  if (buffer == NULL)
+    return;
+  SWFDEC_AS_VALUE_SET_OBJECT (retval, buffer);
+}
+
+SWFDEC_TEST_FUNCTION ("Buffer", swfdec_test_buffer_create, swfdec_test_buffer_get_type)
+void
+swfdec_test_buffer_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecBufferQueue *queue;
+  SwfdecTestBuffer *buffer;
+  guint i;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "");
+
+  queue = swfdec_buffer_queue_new ();
+  for (i = 0; i < argc; i++) {
+    SwfdecBuffer *b = NULL;
+    if (SWFDEC_AS_VALUE_IS_OBJECT (&argv[i])) {
+      SwfdecAsObject *o = SWFDEC_AS_VALUE_GET_OBJECT (&argv[i]);
+      if (SWFDEC_IS_TEST_BUFFER (o))
+	b = swfdec_buffer_ref (SWFDEC_TEST_BUFFER (o)->buffer);
+    } else if (SWFDEC_AS_VALUE_IS_NUMBER (&argv[i])) {
+      b = swfdec_buffer_new_and_alloc (1);
+      b->data[0] = swfdec_as_value_to_integer (cx, &argv[i]);
+    }
+    if (b == NULL) {
+      const char *s = swfdec_as_value_to_string (cx, &argv[i]);
+      gsize len = strlen (s);
+      /* no terminating 0 byte on purpose here - use new Buffer (string, 0); to get that */
+      b = swfdec_buffer_new_and_alloc (len);
+      memcpy (b->data, s, len);
+    }
+    swfdec_buffer_queue_push (queue, b);
+  }
+  i = swfdec_buffer_queue_get_depth (queue);
+  if (i) {
+    buffer->buffer = swfdec_buffer_queue_pull (queue, i);
+  } else {
+    buffer->buffer = swfdec_buffer_new ();
+  }
+  swfdec_buffer_queue_unref (queue);
+}
+
diff --git a/test/swfdec_test_buffer.h b/test/swfdec_test_buffer.h
new file mode 100644
index 0000000..d80a9f8
--- /dev/null
+++ b/test/swfdec_test_buffer.h
@@ -0,0 +1,56 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_TEST_BUFFER_H_
+#define _SWFDEC_TEST_BUFFER_H_
+
+#include <swfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecTestBuffer SwfdecTestBuffer;
+typedef struct _SwfdecTestBufferClass SwfdecTestBufferClass;
+
+#define SWFDEC_TYPE_TEST_BUFFER                    (swfdec_test_buffer_get_type())
+#define SWFDEC_IS_TEST_BUFFER(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_TEST_BUFFER))
+#define SWFDEC_IS_TEST_BUFFER_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_TEST_BUFFER))
+#define SWFDEC_TEST_BUFFER(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_TEST_BUFFER, SwfdecTestBuffer))
+#define SWFDEC_TEST_BUFFER_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_TEST_BUFFER, SwfdecTestBufferClass))
+#define SWFDEC_TEST_BUFFER_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_TEST_BUFFER, SwfdecTestBufferClass))
+
+struct _SwfdecTestBuffer
+{
+  SwfdecAsObject	as_object;
+
+  SwfdecBuffer *	buffer;
+};
+
+struct _SwfdecTestBufferClass
+{
+  SwfdecAsObjectClass	as_object_class;
+};
+
+GType		swfdec_test_buffer_get_type	(void);
+
+SwfdecAsObject *swfdec_test_buffer_new		(SwfdecAsContext *	context,
+						 SwfdecBuffer *		buffer);
+
+G_END_DECLS
+#endif
diff --git a/test/swfdec_test_function.c b/test/swfdec_test_function.c
index 5f04136..6f13bbb 100644
--- a/test/swfdec_test_function.c
+++ b/test/swfdec_test_function.c
@@ -25,6 +25,7 @@
 #include "swfdec_test_function_list.h"
 
 /* needed by the function list */
+#include "swfdec_test_buffer.h"
 #include "swfdec_test_image.h"
 #include "swfdec_test_socket.h"
 #include "swfdec_test_test.h"
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 3c094c7..b496163 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -17,6 +17,11 @@
  * Boston, MA  02110-1301  USA
  */
 
+Buffer = Native.Buffer;
+Buffer.load = Native.Buffer_load;
+Buffer.prototype = {};
+Buffer.prototype.diff = Native.Buffer_diff;
+
 Image = Native.Image;
 Image.prototype = {};
 Image.prototype.compare = Native.Image_compare;
@@ -34,8 +39,8 @@ Test.prototype.mouse_press = Native.Test_mouse_press;
 Test.prototype.mouse_release = Native.Test_mouse_release;
 Test.prototype.render = Native.Test_render;
 Test.prototype.reset = Native.Test_reset;
-Test.prototype.trace = Native.Test_trace;
 Test.prototype.addProperty ("rate", Native.Test_get_rate, null);
+Test.prototype.addProperty ("trace", Native.Test_get_trace, null);
 
 print = function (s) {
   if (s)
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index e5ceb65..a8e5023 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,59 +2,67 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0x41, 0x01, 0x21,  0x00, 0x49, 0x6D, 0x61,  0x67, 0x65, 0x00, 0x4E,  0x61, 0x74, 0x69, 0x76,
-  0x65, 0x00, 0x70, 0x72,  0x6F, 0x74, 0x6F, 0x74,  0x79, 0x70, 0x65, 0x00,  0x63, 0x6F, 0x6D, 0x70,
-  0x61, 0x72, 0x65, 0x00,  0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x63, 0x6F,  0x6D, 0x70, 0x61, 0x72,
-  0x65, 0x00, 0x73, 0x61,  0x76, 0x65, 0x00, 0x49,  0x6D, 0x61, 0x67, 0x65,  0x5F, 0x73, 0x61, 0x76,
-  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x70, 0x72, 0x6F,  0x63, 0x65, 0x73, 0x73,
-  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x70, 0x72, 0x6F, 0x63,  0x65, 0x73, 0x73, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x00, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,
-  0x74, 0x5F, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
-  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
-  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,  0x72, 0x65, 0x73, 0x73,
-  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,
-  0x73, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,
-  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,  0x65, 0x6C, 0x65, 0x61,
-  0x73, 0x65, 0x00, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,
-  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,  0x54, 0x65, 0x73, 0x74,
-  0x5F, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x74,  0x72, 0x61, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,
-  0x74, 0x5F, 0x74, 0x72,  0x61, 0x63, 0x65, 0x00,  0x72, 0x61, 0x74, 0x65,  0x00, 0x54, 0x65, 0x73,
-  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x72, 0x61,  0x74, 0x65, 0x00, 0x61,  0x64, 0x64, 0x50, 0x72,
-  0x6F, 0x70, 0x65, 0x72,  0x74, 0x79, 0x00, 0x70,  0x72, 0x69, 0x6E, 0x74,  0x00, 0x73, 0x00, 0x49,
-  0x4E, 0x46, 0x4F, 0x3A,  0x20, 0x00, 0x65, 0x72,  0x72, 0x6F, 0x72, 0x00,  0x45, 0x52, 0x52, 0x4F,
-  0x52, 0x3A, 0x20, 0x00,  0x96, 0x04, 0x00, 0x08,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x00, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x02, 0x07, 0x00,
-  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x02,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x03, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x05, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x06, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x07,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x07,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,
-  0x96, 0x07, 0x00, 0x08,  0x02, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
-  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x08, 0x08, 0x01, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x09, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x0A,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x08,
-  0x02, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x0B, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x0C, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,
-  0x04, 0x00, 0x08, 0x0D,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x4E, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0F, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x10, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x11, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x12, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,
-  0x96, 0x04, 0x00, 0x08,  0x13, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x14, 0x4E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x15,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x16,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x17, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x18, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
-  0x1A, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x19, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
-  0x1C, 0x8E, 0x0B, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,  0x00, 0x27, 0x00, 0x96,
-  0x02, 0x00, 0x08, 0x1D,  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x1B, 0x00, 0x96,  0x04, 0x00, 0x08, 0x1E,
-  0x08, 0x1D, 0x1C, 0x47,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x01, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x1C,  0x52, 0x17, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x1F,  0x8E, 0x0B, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x1D, 0x1C,
-  0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x20, 0x08,  0x1D, 0x1C, 0x47, 0x96,
-  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x52,
-  0x17, 0x1D, 0x00
+  0x88, 0x6E, 0x01, 0x26,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x76, 0x65, 0x00, 0x6C,  0x6F, 0x61, 0x64, 0x00,  0x42, 0x75, 0x66, 0x66,  0x65, 0x72, 0x5F, 0x6C,
+  0x6F, 0x61, 0x64, 0x00,  0x70, 0x72, 0x6F, 0x74,  0x6F, 0x74, 0x79, 0x70,  0x65, 0x00, 0x64, 0x69,
+  0x66, 0x66, 0x00, 0x42,  0x75, 0x66, 0x66, 0x65,  0x72, 0x5F, 0x64, 0x69,  0x66, 0x66, 0x00, 0x49,
+  0x6D, 0x61, 0x67, 0x65,  0x00, 0x63, 0x6F, 0x6D,  0x70, 0x61, 0x72, 0x65,  0x00, 0x49, 0x6D, 0x61,
+  0x67, 0x65, 0x5F, 0x63,  0x6F, 0x6D, 0x70, 0x61,  0x72, 0x65, 0x00, 0x73,  0x61, 0x76, 0x65, 0x00,
+  0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x73, 0x61,  0x76, 0x65, 0x00, 0x53,  0x6F, 0x63, 0x6B, 0x65,
+  0x74, 0x00, 0x70, 0x72,  0x6F, 0x63, 0x65, 0x73,  0x73, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
+  0x5F, 0x70, 0x72, 0x6F,  0x63, 0x65, 0x73, 0x73,  0x00, 0x54, 0x65, 0x73,  0x74, 0x00, 0x61, 0x64,
+  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x61,  0x64, 0x76, 0x61, 0x6E,
+  0x63, 0x65, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x54, 0x65,
+  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x6D, 0x6F, 0x76,  0x65, 0x00, 0x6D, 0x6F,
+  0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,  0x73, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,
+  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x70, 0x72, 0x65,  0x73, 0x73, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,
+  0x5F, 0x72, 0x65, 0x6C,  0x65, 0x61, 0x73, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,
+  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,  0x72, 0x65, 0x6E, 0x64,
+  0x65, 0x72, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x72, 0x65, 0x6E, 0x64,  0x65, 0x72, 0x00, 0x72,
+  0x65, 0x73, 0x65, 0x74,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,
+  0x72, 0x61, 0x74, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x72, 0x61,
+  0x74, 0x65, 0x00, 0x61,  0x64, 0x64, 0x50, 0x72,  0x6F, 0x70, 0x65, 0x72,  0x74, 0x79, 0x00, 0x74,
+  0x72, 0x61, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x74, 0x72,
+  0x61, 0x63, 0x65, 0x00,  0x70, 0x72, 0x69, 0x6E,  0x74, 0x00, 0x73, 0x00,  0x49, 0x4E, 0x46, 0x4F,
+  0x3A, 0x20, 0x00, 0x65,  0x72, 0x72, 0x6F, 0x72,  0x00, 0x45, 0x52, 0x52,  0x4F, 0x52, 0x3A, 0x20,
+  0x00, 0x96, 0x04, 0x00,  0x08, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x00, 0x4E, 0x1D,
+  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x04,  0x00, 0x08, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x03, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,
+  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x05,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x06,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x07, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x07, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x08,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x09,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0A, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x0B, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x0C, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x0C, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x0C, 0x1C, 0x96, 0x07,
+  0x00, 0x08, 0x04, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0C, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0D, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x0E, 0x4E,  0x4F, 0x96, 0x04, 0x00,  0x08, 0x0F, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x0F, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,  0x0F, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x04, 0x07,
+  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x10, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x11, 0x4E,
+  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,
+  0x08, 0x12, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x14, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x15, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x16,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x17,
+  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0F, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,
+  0x00, 0x08, 0x18, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x19, 0x4E,  0x4F, 0x96, 0x02, 0x00,
+  0x08, 0x0F, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x1A, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x4E, 0x4F,  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x1D,  0x4E, 0x96, 0x09, 0x00,  0x08, 0x1C, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,
+  0x0F, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x04, 0x4E,  0x96, 0x02, 0x00, 0x08,  0x1E, 0x52, 0x17, 0x96,
+  0x03, 0x00, 0x02, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x20, 0x4E,  0x96, 0x09, 0x00, 0x08,
+  0x1F, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x0F,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,
+  0x02, 0x00, 0x08, 0x1E,  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x21, 0x8E,  0x0B, 0x00, 0x00, 0x01,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,  0x00, 0x96, 0x02, 0x00,  0x08, 0x22, 0x1C, 0x12,
+  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,  0x08, 0x23, 0x08, 0x22,  0x1C, 0x47, 0x96, 0x07,
+  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x21, 0x52, 0x17,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x24, 0x8E, 0x0B,  0x00, 0x00, 0x01, 0x00,  0x00, 0x00, 0x00, 0x00,
+  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x22, 0x1C, 0x12, 0x9D,  0x02, 0x00, 0x1B, 0x00,
+  0x96, 0x04, 0x00, 0x08,  0x25, 0x08, 0x22, 0x1C,  0x47, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,
+  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x21, 0x52, 0x17, 0x1D,  0x00
 };
 
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index 0daa055..c263bed 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -25,141 +25,11 @@
 #include <unistd.h>
 
 #include "swfdec_test_test.h"
+#include "swfdec_test_buffer.h"
 #include "swfdec_test_function.h"
 #include "swfdec_test_image.h"
 #include "swfdec_test_utils.h"
 
-/*** trace capturing ***/
-
-static char *
-swfdec_test_test_trace_diff (SwfdecTestTest *test)
-{
-  const char *command[] = { "diff", "-u", test->trace_filename, NULL, NULL };
-  char *tmp, *diff;
-  int fd;
-  GSList *walk;
-
-  fd = g_file_open_tmp (NULL, &tmp, NULL);
-  if (fd < 0)
-    return FALSE;
-
-  test->trace_captured = g_slist_reverse (test->trace_captured);
-  for (walk = test->trace_captured; walk; walk = walk->next) {
-    const char *s = walk->data;
-    ssize_t len = strlen (s);
-    if (write (fd, s, len) != len ||
-        write (fd, "\n", 1) != 1) {
-      close (fd);
-      unlink (tmp);
-      g_free (tmp);
-      return NULL;
-    }
-  }
-  close (fd);
-  command[3] = tmp;
-  if (!g_spawn_sync (NULL, (char **) command, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
-	&diff, NULL, NULL, NULL)) {
-    unlink (tmp);
-    g_free (tmp);
-    return NULL;
-  }
-  unlink (tmp);
-  g_free (tmp);
-  return diff;
-}
-
-static void
-swfdec_test_test_trace_stop (SwfdecTestTest *test)
-{
-  if (test->trace_filename == NULL)
-    return;
-
-  if (test->trace_buffer &&
-      test->trace_offset != test->trace_buffer->data + test->trace_buffer->length)
-    test->trace_failed = TRUE;
-
-  if (test->trace_failed) {
-    char *diff = swfdec_test_test_trace_diff (test);
-    /* FIXME: produce a diff here */
-    swfdec_test_throw (SWFDEC_AS_OBJECT (test)->context, "invalid trace output:\n%s", diff);
-    g_free (diff);
-  }
-
-  if (test->trace_buffer) {
-    swfdec_buffer_unref (test->trace_buffer);
-    test->trace_buffer = NULL;
-  }
-  g_free (test->trace_filename);
-  test->trace_filename = NULL;
-  g_slist_foreach (test->trace_captured, (GFunc) g_free, NULL);
-  g_slist_free (test->trace_captured);
-  test->trace_captured = NULL;
-}
-
-static void
-swfdec_test_test_trace_start (SwfdecTestTest *test, const char *filename)
-{
-  GError *error = NULL;
-
-  g_assert (test->trace_filename == NULL);
-  g_assert (test->trace_captured == NULL);
-
-  test->trace_filename = g_strdup (filename);
-  test->trace_failed = FALSE;
-  test->trace_buffer = swfdec_buffer_new_from_file (filename, &error);
-  if (test->trace_buffer == NULL) {
-    swfdec_test_throw (SWFDEC_AS_OBJECT (test)->context, "Could not start trace: %s", error->message);
-    g_error_free (error);
-    return;
-  }
-  test->trace_offset = test->trace_buffer->data;
-}
-
-static void
-swfdec_test_test_trace_cb (SwfdecPlayer *player, const char *message, SwfdecTestTest *test)
-{
-  gsize len;
-
-  if (test->trace_buffer == NULL)
-    return;
-  
-  test->trace_captured = g_slist_prepend (test->trace_captured, g_strdup (message));
-  if (test->trace_failed)
-    return;
-
-  len = strlen (message);
-  if (len + 1 > test->trace_buffer->length - (test->trace_offset -test->trace_buffer->data)) {
-    test->trace_failed = TRUE;
-    return;
-  }
-  if (memcmp (message, test->trace_offset, len) != 0) {
-    test->trace_failed = TRUE;
-    return;
-  }
-  test->trace_offset += len;
-  if (test->trace_offset[0] != '\n') {
-    test->trace_failed = TRUE;
-    return;
-  }
-  test->trace_offset++;
-}
-
-SWFDEC_TEST_FUNCTION ("Test_trace", swfdec_test_test_trace, 0)
-void
-swfdec_test_test_trace (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
-    SwfdecAsValue *argv, SwfdecAsValue *retval)
-{
-  SwfdecTestTest *test;
-  const char *filename;
-
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "|s", &filename);
-
-  swfdec_test_test_trace_stop (test);
-  if (filename[0] == '\0')
-    return;
-  swfdec_test_test_trace_start (test, filename);
-}
-
 /*** SWFDEC_TEST_TEST ***/
 
 G_DEFINE_TYPE (SwfdecTestTest, swfdec_test_test, SWFDEC_TYPE_AS_OBJECT)
@@ -169,8 +39,10 @@ swfdec_test_test_dispose (GObject *object)
 {
   SwfdecTestTest *test = SWFDEC_TEST_TEST (object);
 
-  /* FIXME: this can throw, is that ok? */
-  swfdec_test_test_trace_stop (test);
+  if (test->trace) {
+    swfdec_buffer_queue_unref (test->trace);
+    test->trace = NULL;
+  }
 
   g_free (test->filename);
   test->filename = NULL;
@@ -192,8 +64,9 @@ swfdec_test_test_class_init (SwfdecTestTestClass *klass)
 }
 
 static void
-swfdec_test_test_init (SwfdecTestTest *this)
+swfdec_test_test_init (SwfdecTestTest *test)
 {
+  test->trace = swfdec_buffer_queue_new ();
 }
 
 static void
@@ -205,6 +78,18 @@ swfdec_test_test_fscommand (SwfdecPlayer *player, const char *command,
   }
 }
 
+static void
+swfdec_test_test_trace_cb (SwfdecPlayer *player, const char *message, SwfdecTestTest *test)
+{
+  gsize len = strlen (message);
+  SwfdecBuffer *buffer;
+
+  buffer = swfdec_buffer_new_and_alloc (len + 1);
+  memcpy (buffer->data, message, len);
+  buffer->data[len] = '\n';
+  swfdec_buffer_queue_push (test->trace, buffer);
+}
+
 static gboolean
 swfdec_test_test_ensure_player (SwfdecTestTest *test)
 {
@@ -233,6 +118,7 @@ swfdec_test_do_reset (SwfdecTestTest *test, const char *filename)
     g_object_unref (test->player);
     test->player = NULL;
   }
+  swfdec_buffer_queue_clear (test->trace);
   if (filename == NULL)
     return;
 
@@ -378,6 +264,26 @@ swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
   swfdec_test_do_reset (test, filename[0] ? filename : NULL);
 }
 
+SWFDEC_TEST_FUNCTION ("Test_get_trace", swfdec_test_test_get_trace, 0)
+void
+swfdec_test_test_get_trace (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestTest *test;
+  SwfdecAsObject *o;
+  SwfdecBuffer *buffer;
+  gsize len;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "");
+
+  len = swfdec_buffer_queue_get_depth (test->trace);
+  buffer = swfdec_buffer_queue_peek (test->trace, len);
+  o = swfdec_test_buffer_new (cx, buffer);
+  if (o == NULL)
+    return;
+  SWFDEC_AS_VALUE_SET_OBJECT (retval, o);
+}
+
 SWFDEC_TEST_FUNCTION ("Test_get_rate", swfdec_test_test_get_rate, 0)
 void
 swfdec_test_test_get_rate (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
diff --git a/test/swfdec_test_test.h b/test/swfdec_test_test.h
index b5c7e4f..110aecc 100644
--- a/test/swfdec_test_test.h
+++ b/test/swfdec_test_test.h
@@ -43,13 +43,7 @@ struct _SwfdecTestTest
   char *		filename;	/* file the player should be loaded from */
   SwfdecPlayer *	player;		/* the player or %NULL if none */
   gboolean		player_quit;	/* the player has called fscommand:quit */
-
-  /* trace stuff */
-  char *		trace_filename;	/* file we're parsing */
-  SwfdecBuffer *	trace_buffer;	/* buffer containing the file */
-  guchar *		trace_offset;	/* how far we've parsed the trace data */
-  gboolean		trace_failed;	/* TRUE if the tacing failed */
-  GSList *		trace_captured;	/* captured trace strings (newest first) */
+  SwfdecBufferQueue *	trace;		/* all captured trace output */
 };
 
 struct _SwfdecTestTestClass
diff --git a/test/trace/default.stas b/test/trace/default.stas
index 3f31797..00b4b9a 100644
--- a/test/trace/default.stas
+++ b/test/trace/default.stas
@@ -22,10 +22,15 @@ run_test = function (t, file) {
   print ("Testing " + file);
   try {
     t.reset (file);
-    t.trace (file + ".trace");
+    var trace = Buffer.load (file + ".trace");
     t.advance (0);
     t.advance (Math.ceil (10000 / t.rate));
-    t.trace ();
+    trace = t.trace.diff (trace);
+    if (trace) {
+      error ("different trace output");
+      Native.print (trace);
+      return false;
+    }
   } catch (e) {
     if (e) {
       error (e);
diff --git a/test/trace/default.sts b/test/trace/default.sts
index 5e8dbaa..6945a22 100644
Binary files a/test/trace/default.sts and b/test/trace/default.sts differ
commit 427209eff1b38b89a3db05aac5607faa5f5934d5
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 31 16:07:26 2008 +0100

    put swfdec_test_throw() into its own header

diff --git a/test/Makefile.am b/test/Makefile.am
index 0a6c9db..6c07c3c 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -9,7 +9,8 @@ swfdec_test_sources = \
 	swfdec_test_image.c \
 	swfdec_test_plugin.c \
 	swfdec_test_socket.c \
-	swfdec_test_test.c
+	swfdec_test_test.c \
+	swfdec_test_utils.c
 
 BUILT_SOURCES = \
 	swfdec_test_function_list.h
@@ -31,7 +32,8 @@ noinst_HEADERS = \
 	swfdec_test_initialize.h \
 	swfdec_test_plugin.h \
 	swfdec_test_socket.h \
-	swfdec_test_test.h
+	swfdec_test_test.h \
+	swfdec_test_utils.h
 	
 test_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
 test_LDFLAGS = $(SWFDEC_LIBS) $(GTK_LIBS) $(CAIRO_LIBS)
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index d5de83c..0daa055 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -27,25 +27,7 @@
 #include "swfdec_test_test.h"
 #include "swfdec_test_function.h"
 #include "swfdec_test_image.h"
-
-static void
-swfdec_test_throw (SwfdecAsContext *cx, const char *message, ...)
-{
-  SwfdecAsValue val;
-
-  if (!swfdec_as_context_catch (cx, &val)) {
-    va_list varargs;
-    char *s;
-
-    va_start (varargs, message);
-    s = g_strdup_vprintf (message, varargs);
-    va_end (varargs);
-
-    /* FIXME: Throw a real object here? */
-    SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (cx, s));
-  }
-  swfdec_as_context_throw (cx, &val);
-}
+#include "swfdec_test_utils.h"
 
 /*** trace capturing ***/
 
diff --git a/test/swfdec_test_utils.c b/test/swfdec_test_utils.c
new file mode 100644
index 0000000..ba8731f
--- /dev/null
+++ b/test/swfdec_test_utils.c
@@ -0,0 +1,44 @@
+/* Swfdec
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_test_utils.h"
+
+void
+swfdec_test_throw (SwfdecAsContext *cx, const char *message, ...)
+{
+  SwfdecAsValue val;
+
+  if (!swfdec_as_context_catch (cx, &val)) {
+    va_list varargs;
+    char *s;
+
+    va_start (varargs, message);
+    s = g_strdup_vprintf (message, varargs);
+    va_end (varargs);
+
+    /* FIXME: Throw a real object here? */
+    SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (cx, s));
+  }
+  swfdec_as_context_throw (cx, &val);
+}
+
diff --git a/test/swfdec_test_utils.h b/test/swfdec_test_utils.h
new file mode 100644
index 0000000..f88aff0
--- /dev/null
+++ b/test/swfdec_test_utils.h
@@ -0,0 +1,34 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_TEST_UTILS_H_
+#define _SWFDEC_TEST_UTILS_H_
+
+#include <swfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+void		swfdec_test_throw	(SwfdecAsContext *	cx,
+					 const char *		message,
+					 ...);
+
+
+G_END_DECLS
+#endif
commit ca6332544500679bc658e0713fefc05ad08af466
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jan 31 13:21:56 2008 +0100

    add some implementations about a plugin architecture

diff --git a/test/Makefile.am b/test/Makefile.am
index 5e822b0..0a6c9db 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -7,6 +7,7 @@ swfdec_test_sources = \
 	swfdec_test_function.c \
 	swfdec_test_global.c \
 	swfdec_test_image.c \
+	swfdec_test_plugin.c \
 	swfdec_test_socket.c \
 	swfdec_test_test.c
 
@@ -28,6 +29,7 @@ noinst_HEADERS = \
 	swfdec_test_function_list.h \
 	swfdec_test_image.h \
 	swfdec_test_initialize.h \
+	swfdec_test_plugin.h \
 	swfdec_test_socket.h \
 	swfdec_test_test.h
 	
diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
new file mode 100644
index 0000000..6a641fb
--- /dev/null
+++ b/test/swfdec_test_plugin.c
@@ -0,0 +1,72 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_test_plugin.h"
+#include <swfdec/swfdec.h>
+#include "swfdec_test_test.h"
+
+static void
+swfdec_test_plugin_swfdec_advance (SwfdecTestPlugin *plugin, unsigned int msecs)
+{
+  swfdec_player_advance (plugin->data, msecs);
+}
+
+static void
+swfdec_test_plugin_swfdec_finish (SwfdecTestPlugin *plugin)
+{
+  g_object_unref (plugin->data);
+}
+
+static void
+swfdec_test_plugin_swfdec_trace (SwfdecPlayer *player, const char *message, 
+    SwfdecTestPlugin *plugin)
+{
+  plugin->trace (plugin, message);
+}
+
+static void
+swfdec_test_plugin_swfdec_fscommand (SwfdecPlayer *player, const char *command, 
+    const char *para, SwfdecTestPlugin *plugin)
+{
+  if (g_ascii_strcasecmp (command, "quit") == 0) {
+    plugin->quit (plugin);
+  }
+}
+
+void
+swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
+{
+  SwfdecPlayer *player;
+  SwfdecURL *url;
+
+  plugin->advance = swfdec_test_plugin_swfdec_advance;
+  plugin->finish = swfdec_test_plugin_swfdec_finish;
+  plugin->data = player = swfdec_player_new (NULL);
+
+  g_signal_connect (player, "fscommand", G_CALLBACK (swfdec_test_plugin_swfdec_fscommand), plugin);
+  g_signal_connect (player, "trace", G_CALLBACK (swfdec_test_plugin_swfdec_trace), plugin);
+  url = swfdec_url_new_from_input (plugin->filename);
+  swfdec_player_set_url (player, url);
+  swfdec_url_free (url);
+  swfdec_player_advance (player, 0);
+}
diff --git a/test/swfdec_test_plugin.h b/test/swfdec_test_plugin.h
new file mode 100644
index 0000000..86b7f91
--- /dev/null
+++ b/test/swfdec_test_plugin.h
@@ -0,0 +1,70 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_TEST_PLUGIN_H_
+#define _SWFDEC_TEST_PLUGIN_H_
+
+/*
+ * SwfdecTestPlugin:
+ * @filename: The absolute filename to run
+ * @trace: Function the plugin should call when a trace string was captured.
+ * @quit: Function to call when the player quits, most likely by encountering
+ *        an fscommand. The @finish function will still be called.
+ * @error: Function to call whenever the plugin encounters an error. This will
+ *         cause the plugin to not call any other function but @finish anymore
+ *         and raise an exception containing the provided description.
+ * @advance: Used to advance the player by the provided number of milliseconds
+ * @finish: Clean up any leftover data as the plugin is aout to be discarded
+ *
+ * The SwfdecTestPlugin structure is used to hold the functions used for 
+ * communication between the plugin and the player. It contains two types of
+ * values: Those initialized by the player prior to calling 
+ * swfdec_test_plugin_init() to be used by the plugin and those to be 
+ * initialized by the plugin during swfdec_test_plugin_init() to be used by
+ * the test application for driving the player.
+ */
+typedef struct _SwfdecTestPlugin SwfdecTestPlugin;
+struct _SwfdecTestPlugin {
+  /* initialized by the player before calling swfdec_test_plugin_new() */
+  char *	filename;
+  void		(* trace)	(SwfdecTestPlugin *	plugin,
+				 const char *		string);
+  void		(* quit)	(SwfdecTestPlugin *	plugin);	  
+  void		(* error)	(SwfdecTestPlugin *	plugin,
+				 const char *		description);
+  /* initialized by the plugin during swfdec_test_plugin_new() */
+  void		(* advance)	(SwfdecTestPlugin *	plugin,
+				 unsigned int		msecs);
+  void		(* finish)	(SwfdecTestPlugin *	plugin);
+  void *	data;
+};
+
+/**
+ * swfdec_test_plugin_init:
+ * @SwfdecTestPlugin: the plugin instance to be initialized
+ *
+ * The only function exported by the plugin. It gets called whenever a new 
+ * plugin should be instantiated. The plugin should instantiate the player
+ * and do any initialization necessary on it using the provided filename.
+ *
+ * Returns: a new SwfdecTestPlugin instance
+ **/
+void swfdec_test_plugin_init (SwfdecTestPlugin *plugin);
+
+#endif
diff --git a/test/swfdec_test_test.h b/test/swfdec_test_test.h
index aac940f..b5c7e4f 100644
--- a/test/swfdec_test_test.h
+++ b/test/swfdec_test_test.h
@@ -20,6 +20,7 @@
 #ifndef _SWFDEC_TEST_TEST_H_
 #define _SWFDEC_TEST_TEST_H_
 
+#include "swfdec_test_plugin.h"
 #include <swfdec/swfdec.h>
 
 G_BEGIN_DECLS
@@ -58,6 +59,7 @@ struct _SwfdecTestTestClass
 
 GType		swfdec_test_test_get_type	(void);
 
+void		swfdec_test_plugin_swfdec_new	(SwfdecTestPlugin *	plugin);
 
 G_END_DECLS
 #endif
commit 9644fcadb928e092d68d1b2ad8de8fda971f0b52
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Jan 30 21:30:32 2008 +0100

    add initial socket implementation

diff --git a/test/Makefile.am b/test/Makefile.am
index d7f5830..5e822b0 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -7,6 +7,7 @@ swfdec_test_sources = \
 	swfdec_test_function.c \
 	swfdec_test_global.c \
 	swfdec_test_image.c \
+	swfdec_test_socket.c \
 	swfdec_test_test.c
 
 BUILT_SOURCES = \
@@ -27,6 +28,7 @@ noinst_HEADERS = \
 	swfdec_test_function_list.h \
 	swfdec_test_image.h \
 	swfdec_test_initialize.h \
+	swfdec_test_socket.h \
 	swfdec_test_test.h
 	
 test_CFLAGS = $(GLOBAL_CFLAGS) $(GTK_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
diff --git a/test/swfdec_test_function.c b/test/swfdec_test_function.c
index 4e6605d..5f04136 100644
--- a/test/swfdec_test_function.c
+++ b/test/swfdec_test_function.c
@@ -26,6 +26,7 @@
 
 /* needed by the function list */
 #include "swfdec_test_image.h"
+#include "swfdec_test_socket.h"
 #include "swfdec_test_test.h"
 
 
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index debff41..3c094c7 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -22,6 +22,10 @@ Image.prototype = {};
 Image.prototype.compare = Native.Image_compare;
 Image.prototype.save = Native.Image_save;
 
+Socket = Native.Socket;
+Socket.prototype = {};
+Socket.prototype.process = Native.Socket_process;
+
 Test = Native.Test;
 Test.prototype = {};
 Test.prototype.advance = Native.Test_advance;
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 20be2e5..e5ceb65 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,53 +2,59 @@
 
 /* compiled from swfdec_test_initialize.as */
 static const unsigned char swfdec_test_initialize[] = {
-  0x88, 0x23, 0x01, 0x1E,  0x00, 0x49, 0x6D, 0x61,  0x67, 0x65, 0x00, 0x4E,  0x61, 0x74, 0x69, 0x76,
+  0x88, 0x41, 0x01, 0x21,  0x00, 0x49, 0x6D, 0x61,  0x67, 0x65, 0x00, 0x4E,  0x61, 0x74, 0x69, 0x76,
   0x65, 0x00, 0x70, 0x72,  0x6F, 0x74, 0x6F, 0x74,  0x79, 0x70, 0x65, 0x00,  0x63, 0x6F, 0x6D, 0x70,
   0x61, 0x72, 0x65, 0x00,  0x49, 0x6D, 0x61, 0x67,  0x65, 0x5F, 0x63, 0x6F,  0x6D, 0x70, 0x61, 0x72,
   0x65, 0x00, 0x73, 0x61,  0x76, 0x65, 0x00, 0x49,  0x6D, 0x61, 0x67, 0x65,  0x5F, 0x73, 0x61, 0x76,
-  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x00, 0x61,  0x64, 0x76, 0x61, 0x6E,  0x63, 0x65, 0x00, 0x54,
-  0x65, 0x73, 0x74, 0x5F,  0x61, 0x64, 0x76, 0x61,  0x6E, 0x63, 0x65, 0x00,  0x6D, 0x6F, 0x75, 0x73,
-  0x65, 0x5F, 0x6D, 0x6F,  0x76, 0x65, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,
-  0x65, 0x5F, 0x6D, 0x6F,  0x76, 0x65, 0x00, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x70, 0x72, 0x65,
-  0x73, 0x73, 0x00, 0x54,  0x65, 0x73, 0x74, 0x5F,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x70, 0x72,
-  0x65, 0x73, 0x73, 0x00,  0x6D, 0x6F, 0x75, 0x73,  0x65, 0x5F, 0x72, 0x65,  0x6C, 0x65, 0x61, 0x73,
-  0x65, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x6D,  0x6F, 0x75, 0x73, 0x65,  0x5F, 0x72, 0x65, 0x6C,
-  0x65, 0x61, 0x73, 0x65,  0x00, 0x72, 0x65, 0x6E,  0x64, 0x65, 0x72, 0x00,  0x54, 0x65, 0x73, 0x74,
-  0x5F, 0x72, 0x65, 0x6E,  0x64, 0x65, 0x72, 0x00,  0x72, 0x65, 0x73, 0x65,  0x74, 0x00, 0x54, 0x65,
-  0x73, 0x74, 0x5F, 0x72,  0x65, 0x73, 0x65, 0x74,  0x00, 0x74, 0x72, 0x61,  0x63, 0x65, 0x00, 0x54,
-  0x65, 0x73, 0x74, 0x5F,  0x74, 0x72, 0x61, 0x63,  0x65, 0x00, 0x72, 0x61,  0x74, 0x65, 0x00, 0x54,
-  0x65, 0x73, 0x74, 0x5F,  0x67, 0x65, 0x74, 0x5F,  0x72, 0x61, 0x74, 0x65,  0x00, 0x61, 0x64, 0x64,
-  0x50, 0x72, 0x6F, 0x70,  0x65, 0x72, 0x74, 0x79,  0x00, 0x70, 0x72, 0x69,  0x6E, 0x74, 0x00, 0x73,
-  0x00, 0x49, 0x4E, 0x46,  0x4F, 0x3A, 0x20, 0x00,  0x65, 0x72, 0x72, 0x6F,  0x72, 0x00, 0x45, 0x52,
-  0x52, 0x4F, 0x52, 0x3A,  0x20, 0x00, 0x96, 0x04,  0x00, 0x08, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x00, 0x4E,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x02,
-  0x07, 0x00, 0x00, 0x00,  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x02, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x03,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
-  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x00, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,
-  0x00, 0x08, 0x05, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x06, 0x4E,  0x4F, 0x96, 0x04, 0x00,
-  0x08, 0x07, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x07, 0x4E, 0x1D,  0x96, 0x02, 0x00, 0x08,
-  0x07, 0x1C, 0x96, 0x07,  0x00, 0x08, 0x02, 0x07,  0x00, 0x00, 0x00, 0x00,  0x43, 0x4F, 0x96, 0x02,
-  0x00, 0x08, 0x07, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x08, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x09, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,
-  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x0A, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
-  0x08, 0x0B, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,
-  0x96, 0x04, 0x00, 0x08,  0x0C, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x0D, 0x4E, 0x4F, 0x96,
-  0x02, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x0E,
-  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0F,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,
-  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x10, 0x08,  0x01, 0x1C, 0x96, 0x02,
-  0x00, 0x08, 0x11, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x07, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x02,
-  0x4E, 0x96, 0x04, 0x00,  0x08, 0x12, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x13, 0x4E, 0x4F,
-  0x96, 0x02, 0x00, 0x08,  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,
-  0x14, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x15, 0x4E, 0x4F, 0x96,  0x03, 0x00, 0x02, 0x08,
-  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x17, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x16, 0x07, 0x03, 0x00,
-  0x00, 0x00, 0x08, 0x07,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x18,
-  0x52, 0x17, 0x96, 0x02,  0x00, 0x08, 0x19, 0x9B,  0x07, 0x00, 0x00, 0x01,  0x00, 0x73, 0x00, 0x27,
-  0x00, 0x96, 0x02, 0x00,  0x08, 0x1A, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,
-  0x08, 0x1B, 0x08, 0x1A,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,
-  0x1C, 0x96, 0x02, 0x00,  0x08, 0x19, 0x52, 0x17,  0x1D, 0x96, 0x02, 0x00,  0x08, 0x1C, 0x9B, 0x07,
-  0x00, 0x00, 0x01, 0x00,  0x73, 0x00, 0x27, 0x00,  0x96, 0x02, 0x00, 0x08,  0x1A, 0x1C, 0x12, 0x9D,
-  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x1D, 0x08, 0x1A, 0x1C,  0x47, 0x96, 0x07, 0x00,
-  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x19, 0x52, 0x17, 0x1D,
-  0x00
+  0x65, 0x00, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,  0x00, 0x70, 0x72, 0x6F,  0x63, 0x65, 0x73, 0x73,
+  0x00, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 0x5F,  0x70, 0x72, 0x6F, 0x63,  0x65, 0x73, 0x73, 0x00,
+  0x54, 0x65, 0x73, 0x74,  0x00, 0x61, 0x64, 0x76,  0x61, 0x6E, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,
+  0x74, 0x5F, 0x61, 0x64,  0x76, 0x61, 0x6E, 0x63,  0x65, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
+  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,
+  0x6D, 0x6F, 0x76, 0x65,  0x00, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x70,  0x72, 0x65, 0x73, 0x73,
+  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x70, 0x72, 0x65, 0x73,
+  0x73, 0x00, 0x6D, 0x6F,  0x75, 0x73, 0x65, 0x5F,  0x72, 0x65, 0x6C, 0x65,  0x61, 0x73, 0x65, 0x00,
+  0x54, 0x65, 0x73, 0x74,  0x5F, 0x6D, 0x6F, 0x75,  0x73, 0x65, 0x5F, 0x72,  0x65, 0x6C, 0x65, 0x61,
+  0x73, 0x65, 0x00, 0x72,  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x54, 0x65,  0x73, 0x74, 0x5F, 0x72,
+  0x65, 0x6E, 0x64, 0x65,  0x72, 0x00, 0x72, 0x65,  0x73, 0x65, 0x74, 0x00,  0x54, 0x65, 0x73, 0x74,
+  0x5F, 0x72, 0x65, 0x73,  0x65, 0x74, 0x00, 0x74,  0x72, 0x61, 0x63, 0x65,  0x00, 0x54, 0x65, 0x73,
+  0x74, 0x5F, 0x74, 0x72,  0x61, 0x63, 0x65, 0x00,  0x72, 0x61, 0x74, 0x65,  0x00, 0x54, 0x65, 0x73,
+  0x74, 0x5F, 0x67, 0x65,  0x74, 0x5F, 0x72, 0x61,  0x74, 0x65, 0x00, 0x61,  0x64, 0x64, 0x50, 0x72,
+  0x6F, 0x70, 0x65, 0x72,  0x74, 0x79, 0x00, 0x70,  0x72, 0x69, 0x6E, 0x74,  0x00, 0x73, 0x00, 0x49,
+  0x4E, 0x46, 0x4F, 0x3A,  0x20, 0x00, 0x65, 0x72,  0x72, 0x6F, 0x72, 0x00,  0x45, 0x52, 0x52, 0x4F,
+  0x52, 0x3A, 0x20, 0x00,  0x96, 0x04, 0x00, 0x08,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x00, 0x4E, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x00,  0x1C, 0x96, 0x07, 0x00,  0x08, 0x02, 0x07, 0x00,
+  0x00, 0x00, 0x00, 0x43,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x00, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x02,
+  0x4E, 0x96, 0x04, 0x00,  0x08, 0x03, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x4F,
+  0x96, 0x02, 0x00, 0x08,  0x00, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,
+  0x05, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x06, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x07,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x07,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x07, 0x1C,
+  0x96, 0x07, 0x00, 0x08,  0x02, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,
+  0x07, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x08, 0x08, 0x01, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x09, 0x4E, 0x4F, 0x96,  0x04, 0x00, 0x08, 0x0A,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x4E, 0x1D, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x07, 0x00, 0x08,
+  0x02, 0x07, 0x00, 0x00,  0x00, 0x00, 0x43, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x02, 0x4E,  0x96, 0x04, 0x00, 0x08,  0x0B, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x0C, 0x4E, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,
+  0x04, 0x00, 0x08, 0x0D,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x0E,  0x4E, 0x4F, 0x96, 0x02,
+  0x00, 0x08, 0x0A, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x0F, 0x08,
+  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x10, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x0A, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x04, 0x00,  0x08, 0x11, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x12, 0x4E, 0x4F,  0x96, 0x02, 0x00, 0x08,  0x0A, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x02, 0x4E,
+  0x96, 0x04, 0x00, 0x08,  0x13, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,  0x14, 0x4E, 0x4F, 0x96,
+  0x02, 0x00, 0x08, 0x0A,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x02, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x15,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x16,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x0A, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x02, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x17, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x18, 0x4E,  0x4F, 0x96, 0x03, 0x00,  0x02, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x1A, 0x4E, 0x96, 0x09,  0x00, 0x08, 0x19, 0x07,  0x03, 0x00, 0x00, 0x00,  0x08, 0x0A, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x02,  0x4E, 0x96, 0x02, 0x00,  0x08, 0x1B, 0x52, 0x17,  0x96, 0x02, 0x00, 0x08,
+  0x1C, 0x8E, 0x0B, 0x00,  0x00, 0x01, 0x00, 0x00,  0x00, 0x00, 0x00, 0x73,  0x00, 0x27, 0x00, 0x96,
+  0x02, 0x00, 0x08, 0x1D,  0x1C, 0x12, 0x9D, 0x02,  0x00, 0x1B, 0x00, 0x96,  0x04, 0x00, 0x08, 0x1E,
+  0x08, 0x1D, 0x1C, 0x47,  0x96, 0x07, 0x00, 0x07,  0x01, 0x00, 0x00, 0x00,  0x08, 0x01, 0x1C, 0x96,
+  0x02, 0x00, 0x08, 0x1C,  0x52, 0x17, 0x1D, 0x96,  0x02, 0x00, 0x08, 0x1F,  0x8E, 0x0B, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00,  0x00, 0x00, 0x73, 0x00,  0x27, 0x00, 0x96, 0x02,  0x00, 0x08, 0x1D, 0x1C,
+  0x12, 0x9D, 0x02, 0x00,  0x1B, 0x00, 0x96, 0x04,  0x00, 0x08, 0x20, 0x08,  0x1D, 0x1C, 0x47, 0x96,
+  0x07, 0x00, 0x07, 0x01,  0x00, 0x00, 0x00, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x1C, 0x52,
+  0x17, 0x1D, 0x00
 };
 
diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
new file mode 100644
index 0000000..a0382f6
--- /dev/null
+++ b/test/swfdec_test_socket.c
@@ -0,0 +1,163 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <libsoup/soup-address.h>
+
+#include "swfdec_test_socket.h"
+#include "swfdec_test_function.h"
+
+static void
+swfdec_test_throw (SwfdecAsContext *cx, const char *message, ...)
+{
+  SwfdecAsValue val;
+
+  if (!swfdec_as_context_catch (cx, &val)) {
+    va_list varargs;
+    char *s;
+
+    va_start (varargs, message);
+    s = g_strdup_vprintf (message, varargs);
+    va_end (varargs);
+
+    /* FIXME: Throw a real object here? */
+    SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_give_string (cx, s));
+  }
+  swfdec_as_context_throw (cx, &val);
+}
+
+/*** SWFDEC_TEST_SOCKET ***/
+
+G_DEFINE_TYPE (SwfdecTestSocket, swfdec_test_socket, SWFDEC_TYPE_AS_OBJECT)
+
+static void
+swfdec_test_socket_dispose (GObject *object)
+{
+  SwfdecTestSocket *sock = SWFDEC_TEST_SOCKET (object);
+
+  if (sock->socket) {
+    g_object_unref (sock->socket);
+    sock->socket = NULL;
+  }
+  if (sock->context) {
+    g_main_context_unref (sock->context);
+    sock->context = NULL;
+  }
+
+  G_OBJECT_CLASS (swfdec_test_socket_parent_class)->dispose (object);
+}
+
+static void
+swfdec_test_socket_class_init (SwfdecTestSocketClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->dispose = swfdec_test_socket_dispose;
+}
+
+static void
+swfdec_test_socket_init (SwfdecTestSocket *sock)
+{
+  sock->context = g_main_context_new ();
+}
+
+/*** AS CODE ***/
+
+SWFDEC_TEST_FUNCTION ("Socket_process", swfdec_test_socket_process, 0)
+void
+swfdec_test_socket_process (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestSocket *sock;
+  
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &socket, "");
+
+  while (g_main_context_iteration (sock->context, FALSE));
+}
+
+static void swfdec_test_socket_attach (SwfdecTestSocket *sock, SoupSocket *ssock);
+
+static void
+swfdec_test_socket_new_connection (SoupSocket *server, SoupSocket *conn, SwfdecTestSocket *sock)
+{
+  SwfdecAsContext *context = SWFDEC_AS_OBJECT (sock)->context;
+  SwfdecAsValue val;
+  SwfdecAsObject *new;
+
+  if (!swfdec_as_context_use_mem (context, sizeof (SwfdecTestSocket)))
+    return;
+
+  new = g_object_new (SWFDEC_TYPE_TEST_SOCKET, NULL);
+  swfdec_as_object_add (new, context, sizeof (SwfdecTestSocket));
+  swfdec_as_object_get_variable (context->global, 
+      swfdec_as_context_get_string (context, "Socket"), &val);
+  if (SWFDEC_AS_VALUE_IS_OBJECT (&val))
+    swfdec_as_object_set_constructor (new, SWFDEC_AS_VALUE_GET_OBJECT (&val));
+
+  g_object_ref (conn);
+  swfdec_test_socket_attach (SWFDEC_TEST_SOCKET (new), conn);
+  SWFDEC_AS_VALUE_SET_OBJECT (&val, new);
+  swfdec_as_object_call (SWFDEC_AS_OBJECT (sock), 
+      swfdec_as_context_get_string (context, "onNewConnection"),
+      1, &val, NULL);
+}
+
+static void
+swfdec_test_socket_attach (SwfdecTestSocket *sock, SoupSocket *ssock)
+{
+  g_assert (sock->socket == NULL);
+
+  sock->socket = ssock;
+  g_signal_connect (ssock, "new-connection", 
+      G_CALLBACK (swfdec_test_socket_new_connection), sock);
+}
+
+SWFDEC_TEST_FUNCTION ("Socket", swfdec_test_socket_create, swfdec_test_socket_get_type)
+void
+swfdec_test_socket_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestSocket *sock;
+  int port;
+  SoupAddress *addr;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "i", &port);
+
+  /* FIXME: throw here? */
+  if (port < 1024 || port >= 65535) {
+    swfdec_test_throw (cx, "invalid port %d", port);
+    return;
+  }
+
+  addr = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV4, port);
+  sock->socket = soup_socket_new (
+      SOUP_SOCKET_FLAG_NONBLOCKING, TRUE, 
+      SOUP_SOCKET_ASYNC_CONTEXT, sock->context,
+      SOUP_SOCKET_LOCAL_ADDRESS, addr,
+      NULL);
+  g_object_unref (addr);
+  if (!soup_socket_listen (sock->socket)) {
+    swfdec_test_throw (cx, "failed to listen");
+    return;
+  }
+}
+
diff --git a/test/swfdec_test_socket.h b/test/swfdec_test_socket.h
new file mode 100644
index 0000000..c33fb3d
--- /dev/null
+++ b/test/swfdec_test_socket.h
@@ -0,0 +1,56 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+ * Boston, MA  02110-1301  USA
+ */
+
+#ifndef _SWFDEC_TEST_SOCKET_H_
+#define _SWFDEC_TEST_SOCKET_H_
+
+#include <swfdec/swfdec.h>
+#include <libsoup/soup.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecTestSocket SwfdecTestSocket;
+typedef struct _SwfdecTestSocketClass SwfdecTestSocketClass;
+
+#define SWFDEC_TYPE_TEST_SOCKET                    (swfdec_test_socket_get_type())
+#define SWFDEC_IS_TEST_SOCKET(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_TEST_SOCKET))
+#define SWFDEC_IS_TEST_SOCKET_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_TEST_SOCKET))
+#define SWFDEC_TEST_SOCKET(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_TEST_SOCKET, SwfdecTestSocket))
+#define SWFDEC_TEST_SOCKET_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_TEST_SOCKET, SwfdecTestSocketClass))
+#define SWFDEC_TEST_SOCKET_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_TEST_SOCKET, SwfdecTestSocketClass))
+
+struct _SwfdecTestSocket
+{
+  SwfdecAsObject	as_object;
+
+  GMainContext *	context;	/* the main context we're running in */
+  SoupSocket *		socket;		/* the socket we're servicing */
+};
+
+struct _SwfdecTestSocketClass
+{
+  SwfdecAsObjectClass	as_object_class;
+};
+
+GType		swfdec_test_socket_get_type	(void);
+
+
+G_END_DECLS
+#endif


More information about the Swfdec-commits mailing list