[Swfdec-commits] 2 commits - test/Makefile.am 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_swfdec_socket.c test/swfdec_test_swfdec_socket.h test/swfdec_test_test.c test/swfdec_test_test.h

Benjamin Otte company at kemper.freedesktop.org
Wed Feb 6 01:37:12 PST 2008


 test/Makefile.am                 |    2 
 test/swfdec_test_initialize.as   |    4 
 test/swfdec_test_initialize.h    |  184 ++++++++++++++--------------
 test/swfdec_test_plugin.c        |    7 -
 test/swfdec_test_plugin.h        |   27 ++++
 test/swfdec_test_socket.c        |  249 ++++++++++++++++-----------------------
 test/swfdec_test_socket.h        |   17 +-
 test/swfdec_test_swfdec_socket.c |  106 ++++++++++++++++
 test/swfdec_test_swfdec_socket.h |   54 ++++++++
 test/swfdec_test_test.c          |   41 ++++++
 test/swfdec_test_test.h          |    3 
 11 files changed, 451 insertions(+), 243 deletions(-)

New commits:
commit 8d10d3d72b49c07dd3217bd90b5781a90ae66054
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Feb 6 10:01:42 2008 +0100

    implement the socket object for the SwfdecPlayer and make sockets work

diff --git a/test/Makefile.am b/test/Makefile.am
index bdc0196..5621eca 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -12,6 +12,7 @@ swfdec_test_sources = \
 	swfdec_test_image.c \
 	swfdec_test_plugin.c \
 	swfdec_test_socket.c \
+	swfdec_test_swfdec_socket.c \
 	swfdec_test_test.c \
 	swfdec_test_utils.c
 
@@ -38,6 +39,7 @@ noinst_HEADERS = \
 	swfdec_test_initialize.h \
 	swfdec_test_plugin.h \
 	swfdec_test_socket.h \
+	swfdec_test_swfdec_socket.h \
 	swfdec_test_test.h \
 	swfdec_test_utils.h
 	
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 1737e6c..ef4e9a8 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -44,16 +44,18 @@ HTTPRequest.prototype.toString = Native.HTTPRequest_toString;
 HTTPRequest.prototype.send = Native.HTTPRequest_send;
 HTTPRequest.prototype.close = Native.HTTPRequest_close;
 
-Socket = Native.Socket;
+Socket = function () {};
 Socket.prototype = {};
 Socket.prototype.getConnection = Native.Socket_getConnection;
 Socket.prototype.receive = Native.Socket_receive;
 Socket.prototype.send = Native.Socket_send;
 Socket.prototype.close = Native.Socket_close;
+Socket.prototype.error = Native.Socket_error;
 
 Test = Native.Test;
 Test.prototype = {};
 Test.prototype.advance = Native.Test_advance;
+Test.prototype.getSocket = Native.Test_getSocket;
 Test.prototype.mouse_move = Native.Test_mouse_move;
 Test.prototype.mouse_press = Native.Test_mouse_press;
 Test.prototype.mouse_release = Native.Test_mouse_release;
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index 713a7c7..7ee0716 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, 0x43, 0x03, 0x45,  0x00, 0x42, 0x75, 0x66,  0x66, 0x65, 0x72, 0x00,  0x4E, 0x61, 0x74, 0x69,
+  0x88, 0x69, 0x03, 0x48,  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,
@@ -40,93 +40,99 @@ static const unsigned char swfdec_test_initialize[] = {
   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,
-  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, 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
+  0x6B, 0x65, 0x74, 0x5F,  0x63, 0x6C, 0x6F, 0x73,  0x65, 0x00, 0x65, 0x72,  0x72, 0x6F, 0x72, 0x00,
+  0x53, 0x6F, 0x63, 0x6B,  0x65, 0x74, 0x5F, 0x65,  0x72, 0x72, 0x6F, 0x72,  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, 0x67,  0x65, 0x74, 0x53, 0x6F,  0x63, 0x6B, 0x65, 0x74,
+  0x00, 0x54, 0x65, 0x73,  0x74, 0x5F, 0x67, 0x65,  0x74, 0x53, 0x6F, 0x63,  0x6B, 0x65, 0x74, 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,  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, 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, 0x02, 0x00, 0x08,  0x28, 0x8E, 0x08, 0x00,
+  0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,  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,  0x02, 0x00, 0x08, 0x28,  0x1C, 0x96, 0x02, 0x00,
+  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x2F,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x30,
+  0x4E, 0x4F, 0x96, 0x04,  0x00, 0x08, 0x31, 0x08,  0x01, 0x1C, 0x96, 0x02,  0x00, 0x08, 0x31, 0x4E,
+  0x1D, 0x96, 0x02, 0x00,  0x08, 0x31, 0x1C, 0x96,  0x07, 0x00, 0x08, 0x04,  0x07, 0x00, 0x00, 0x00,
+  0x00, 0x43, 0x4F, 0x96,  0x02, 0x00, 0x08, 0x31,  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, 0x31, 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, 0x31, 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,  0x31, 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, 0x31,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x04, 0x00, 0x08, 0x3A,
+  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x3B,  0x4E, 0x4F, 0x96, 0x02,  0x00, 0x08, 0x31, 0x1C,
+  0x96, 0x02, 0x00, 0x08,  0x04, 0x4E, 0x96, 0x04,  0x00, 0x08, 0x3C, 0x08,  0x01, 0x1C, 0x96, 0x02,
+  0x00, 0x08, 0x3D, 0x4E,  0x4F, 0x96, 0x02, 0x00,  0x08, 0x31, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x04,
+  0x4E, 0x96, 0x04, 0x00,  0x08, 0x3E, 0x08, 0x01,  0x1C, 0x96, 0x02, 0x00,  0x08, 0x3F, 0x4E, 0x4F,
+  0x96, 0x03, 0x00, 0x02,  0x08, 0x01, 0x1C, 0x96,  0x02, 0x00, 0x08, 0x41,  0x4E, 0x96, 0x09, 0x00,
+  0x08, 0x40, 0x07, 0x03,  0x00, 0x00, 0x00, 0x08,  0x31, 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, 0x43, 0x4E,  0x96, 0x09, 0x00, 0x08,  0x42, 0x07, 0x03, 0x00,  0x00, 0x00, 0x08, 0x31,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x04, 0x4E, 0x96,  0x02, 0x00, 0x08, 0x11,  0x52, 0x17, 0x96, 0x02,
+  0x00, 0x08, 0x44, 0x8E,  0x0B, 0x00, 0x00, 0x01,  0x00, 0x00, 0x00, 0x00,  0x00, 0x73, 0x00, 0x27,
+  0x00, 0x96, 0x02, 0x00,  0x08, 0x45, 0x1C, 0x12,  0x9D, 0x02, 0x00, 0x1B,  0x00, 0x96, 0x04, 0x00,
+  0x08, 0x46, 0x08, 0x45,  0x1C, 0x47, 0x96, 0x07,  0x00, 0x07, 0x01, 0x00,  0x00, 0x00, 0x08, 0x01,
+  0x1C, 0x96, 0x02, 0x00,  0x08, 0x44, 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,
+  0x45, 0x1C, 0x12, 0x9D,  0x02, 0x00, 0x1B, 0x00,  0x96, 0x04, 0x00, 0x08,  0x47, 0x08, 0x45, 0x1C,
+  0x47, 0x96, 0x07, 0x00,  0x07, 0x01, 0x00, 0x00,  0x00, 0x08, 0x01, 0x1C,  0x96, 0x02, 0x00, 0x08,
+  0x44, 0x52, 0x17, 0x1D,  0x00
 };
 
diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index bea718d..62768a7 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -24,6 +24,7 @@
 #include "swfdec_test_plugin.h"
 #include <swfdec/swfdec.h>
 #include "swfdec_test_test.h"
+#include "swfdec_test_swfdec_socket.h"
 
 static void
 swfdec_test_plugin_swfdec_advance (SwfdecTestPlugin *plugin, unsigned int msecs)
@@ -125,8 +126,12 @@ swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
   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);
+  plugin->data = player = g_object_new (SWFDEC_TYPE_PLAYER, "random-seed", 0,
+      "loader-type", SWFDEC_TYPE_FILE_LOADER, "socket-type", SWFDEC_TYPE_TEST_SWFDEC_SOCKET,
+      "max-runtime", 0, 
+      NULL);
 
+  g_object_set_data (G_OBJECT (player), "plugin", 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);
diff --git a/test/swfdec_test_plugin.h b/test/swfdec_test_plugin.h
index 23d95f5..9a21a87 100644
--- a/test/swfdec_test_plugin.h
+++ b/test/swfdec_test_plugin.h
@@ -74,7 +74,7 @@ struct _SwfdecTestPlugin {
   void		(* error)		(SwfdecTestPlugin *	plugin,
 					 const char *		description);
   void		(* request_socket)	(SwfdecTestPlugin *	plugin,
-					 SwfdecTestPluginSocket *http);
+					 SwfdecTestPluginSocket *socket);
   /* initialized by the plugin during swfdec_test_plugin_new() */
   unsigned int	width;
   unsigned int	height;
diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index 6870295..fed735e 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -59,8 +59,10 @@ swfdec_test_socket_do_close (SwfdecTestSocket *sock, gboolean success)
   sock->plugin->finish (sock->plugin, success ? 0 : 1);
   sock->plugin = NULL;
 
-  if (sock->test->pending_sockets->data == sock)
+  if (sock->test->pending_sockets &&
+      sock->test->pending_sockets->data == sock) {
     sock->test->pending_sockets = sock->test->pending_sockets->prev;
+  }
   sock->test->sockets = g_list_remove (sock->test->sockets, sock);
   sock->test = NULL;
 }
@@ -191,6 +193,9 @@ swfdec_test_socket_new (SwfdecTestTest *test, SwfdecTestPluginSocket *plugin)
   g_return_val_if_fail (plugin != NULL, NULL);
 
   cx = SWFDEC_AS_OBJECT (test)->context;
+
+  if (!swfdec_as_context_use_mem (cx, sizeof (SwfdecTestSocket)))
+    return NULL;
   new = g_object_new (SWFDEC_TYPE_TEST_SOCKET, NULL);
   swfdec_as_object_add (new, cx, sizeof (SwfdecTestSocket));
   swfdec_as_object_get_variable (cx->global, 
diff --git a/test/swfdec_test_swfdec_socket.c b/test/swfdec_test_swfdec_socket.c
new file mode 100644
index 0000000..664d80e
--- /dev/null
+++ b/test/swfdec_test_swfdec_socket.c
@@ -0,0 +1,106 @@
+/* Swfdec
+ * Copyright (C) 2006 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_swfdec_socket.h"
+#include <libsoup/soup.h>
+#include <libsoup/soup-address.h>
+
+/*** SwfdecTestSwfdecSocket ***/
+
+G_DEFINE_TYPE (SwfdecTestSwfdecSocket, swfdec_test_swfdec_socket, SWFDEC_TYPE_SOCKET)
+
+#define SWFDEC_TEST_SWFDEC_SOCKET_FROM_PLUGIN(x) \
+  SWFDEC_TEST_SWFDEC_SOCKET ((gpointer) ((guint8 *) (x) - G_STRUCT_OFFSET (SwfdecTestSwfdecSocket, plugin)))
+
+static void
+swfdec_test_swfdec_socket_close (SwfdecStream *stream)
+{
+  SwfdecTestSwfdecSocket *test = SWFDEC_TEST_SWFDEC_SOCKET (stream);
+
+  test->plugin.close (&test->plugin);
+}
+
+static void
+swfdec_test_swfdec_socket_connect (SwfdecSocket *sock_, SwfdecPlayer *player, 
+    const char *hostname, guint port)
+{
+  SwfdecTestSwfdecSocket *sock = SWFDEC_TEST_SWFDEC_SOCKET (sock_);
+  SwfdecTestPlugin *plugin = g_object_get_data (G_OBJECT (player), "plugin");
+
+  g_assert (plugin);
+  sock->plugin.host = g_strdup (hostname);
+  sock->plugin.port = port;
+  plugin->request_socket (plugin, &sock->plugin);
+}
+
+static void
+swfdec_test_swfdec_socket_send (SwfdecSocket *sock, SwfdecBuffer *buffer)
+{
+  SwfdecTestSwfdecSocket *test = SWFDEC_TEST_SWFDEC_SOCKET (sock);
+
+  test->plugin.send (&test->plugin, buffer->data, buffer->length);
+  swfdec_buffer_unref (buffer);
+}
+
+static void
+swfdec_test_swfdec_socket_class_init (SwfdecTestSwfdecSocketClass *klass)
+{
+  SwfdecStreamClass *stream_class = SWFDEC_STREAM_CLASS (klass);
+  SwfdecSocketClass *socket_class = SWFDEC_SOCKET_CLASS (klass);
+
+  stream_class->close = swfdec_test_swfdec_socket_close;
+
+  socket_class->connect = swfdec_test_swfdec_socket_connect;
+  socket_class->send = swfdec_test_swfdec_socket_send;
+}
+
+static void
+swfdec_test_swfdec_socket_receive (SwfdecTestPluginSocket *plugin,
+    unsigned char *data, unsigned long length)
+{
+  SwfdecTestSwfdecSocket *sock = SWFDEC_TEST_SWFDEC_SOCKET_FROM_PLUGIN (plugin);
+  SwfdecBuffer *buffer;
+
+  buffer = swfdec_buffer_new_for_data (g_memdup (data, length), length);
+  swfdec_stream_push (SWFDEC_STREAM (sock), buffer);
+}
+
+static void
+swfdec_test_swfdec_socket_finish (SwfdecTestPluginSocket *plugin, int error)
+{
+  SwfdecTestSwfdecSocket *sock = SWFDEC_TEST_SWFDEC_SOCKET_FROM_PLUGIN (plugin);
+
+  if (error) {
+    swfdec_stream_error (SWFDEC_STREAM (sock), "error %d", error);
+  } else {
+    swfdec_stream_eof (SWFDEC_STREAM (sock));
+  }
+}
+
+static void
+swfdec_test_swfdec_socket_init (SwfdecTestSwfdecSocket *sock)
+{
+  sock->plugin.receive = swfdec_test_swfdec_socket_receive;
+  sock->plugin.finish = swfdec_test_swfdec_socket_finish;
+}
+
diff --git a/test/swfdec_test_swfdec_socket.h b/test/swfdec_test_swfdec_socket.h
new file mode 100644
index 0000000..8753b96
--- /dev/null
+++ b/test/swfdec_test_swfdec_socket.h
@@ -0,0 +1,54 @@
+/* Swfdec
+ * Copyright (C) 2006 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_SWFDEC_SOCKET_H_
+#define _SWFDEC_TEST_SWFDEC_SOCKET_H_
+
+#include "swfdec_test_plugin.h"
+#include <swfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecTestSwfdecSocket SwfdecTestSwfdecSocket;
+typedef struct _SwfdecTestSwfdecSocketClass SwfdecTestSwfdecSocketClass;
+
+#define SWFDEC_TYPE_TEST_SWFDEC_SOCKET                    (swfdec_test_swfdec_socket_get_type())
+#define SWFDEC_IS_TEST_SWFDEC_SOCKET(obj)                 (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_TEST_SWFDEC_SOCKET))
+#define SWFDEC_IS_TEST_SWFDEC_SOCKET_CLASS(klass)         (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_TEST_SWFDEC_SOCKET))
+#define SWFDEC_TEST_SWFDEC_SOCKET(obj)                    (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_TEST_SWFDEC_SOCKET, SwfdecTestSwfdecSocket))
+#define SWFDEC_TEST_SWFDEC_SOCKET_CLASS(klass)            (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_TEST_SWFDEC_SOCKET, SwfdecTestSwfdecSocketClass))
+#define SWFDEC_TEST_SWFDEC_SOCKET_GET_CLASS(obj)          (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_TEST_SWFDEC_SOCKET, SwfdecTestSwfdecSocketClass))
+
+struct _SwfdecTestSwfdecSocket
+{
+  SwfdecSocket			socket;
+
+  SwfdecTestPluginSocket	plugin;
+};
+
+struct _SwfdecTestSwfdecSocketClass {
+  SwfdecSocketClass		socket_class;
+};
+
+GType		swfdec_test_swfdec_socket_get_type   	(void);
+
+
+G_END_DECLS
+#endif
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index 34808a5..fc5cf5b 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -145,6 +145,10 @@ swfdec_test_test_dispose (GObject *object)
 {
   SwfdecTestTest *test = SWFDEC_TEST_TEST (object);
 
+  while (test->sockets)
+    swfdec_test_socket_close (test->sockets->data);
+  test->pending_sockets = NULL;
+
   test->plugin_error = TRUE; /* set to avoid callbacks into the engine */
   swfdec_test_test_unload_plugin (test);
 
commit 432d04e3cb6bfa5003497f2d9c15a3ff51115121
Author: Benjamin Otte <otte at gnome.org>
Date:   Tue Feb 5 20:43:22 2008 +0100

    add a (completely untested) socket implementation

diff --git a/test/swfdec_test_plugin.h b/test/swfdec_test_plugin.h
index 0866453..23d95f5 100644
--- a/test/swfdec_test_plugin.h
+++ b/test/swfdec_test_plugin.h
@@ -20,6 +20,30 @@
 #ifndef _SWFDEC_TEST_PLUGIN_H_
 #define _SWFDEC_TEST_PLUGIN_H_
 
+/**
+ * SwfdecTestPluginSocket:
+ *
+ * This object represents a socket connection, like those used by RTMP, the
+ * XMLSocket class or the xmlsocket:// policy file protocol.
+ **/
+typedef struct _SwfdecTestPluginSocket SwfdecTestPluginSocket;
+struct _SwfdecTestPluginSocket {
+  /* initialized by player while call to request_socket() */
+  void *	data;
+  void		(* send)		(SwfdecTestPluginSocket *	sock,
+					 unsigned char *		data,
+					 unsigned long			length);
+  void		(* close)		(SwfdecTestPluginSocket *	sock);
+  /* initialized by plugin before call to request_socket() */
+  char *	host;
+  unsigned int	port;
+  void		(* receive)		(SwfdecTestPluginSocket *	sock,
+					 unsigned char *		data,
+					 unsigned long			length);
+  void		(* finish)		(SwfdecTestPluginSocket *	sock,
+                                         int				error); /* 0 if ok, 1 for error */
+};
+
 /*
  * SwfdecTestPlugin:
  * @filename: The absolute filename to run
@@ -29,6 +53,7 @@
  * @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.
+ * @request_socket: Create a socket with the given parameters
  * @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
  *
@@ -48,6 +73,8 @@ struct _SwfdecTestPlugin {
   void		(* quit)		(SwfdecTestPlugin *	plugin);	  
   void		(* error)		(SwfdecTestPlugin *	plugin,
 					 const char *		description);
+  void		(* request_socket)	(SwfdecTestPlugin *	plugin,
+					 SwfdecTestPluginSocket *http);
   /* initialized by the plugin during swfdec_test_plugin_new() */
   unsigned int	width;
   unsigned int	height;
diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index cad98f4..6870295 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -51,21 +51,26 @@ swfdec_test_throw (SwfdecAsContext *cx, const char *message, ...)
 G_DEFINE_TYPE (SwfdecTestSocket, swfdec_test_socket, SWFDEC_TYPE_AS_OBJECT)
 
 static void
+swfdec_test_socket_do_close (SwfdecTestSocket *sock, gboolean success)
+{
+  if (sock->plugin == NULL)
+    return;
+
+  sock->plugin->finish (sock->plugin, success ? 0 : 1);
+  sock->plugin = NULL;
+
+  if (sock->test->pending_sockets->data == sock)
+    sock->test->pending_sockets = sock->test->pending_sockets->prev;
+  sock->test->sockets = g_list_remove (sock->test->sockets, sock);
+  sock->test = NULL;
+}
+
+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_slist_foreach (sock->connections, (GFunc) g_object_unref, NULL);
-  g_slist_free (sock->connections);
-  sock->connections = NULL;
+  swfdec_test_socket_do_close (sock, FALSE);
 
   G_OBJECT_CLASS (swfdec_test_socket_parent_class)->dispose (object);
 }
@@ -81,68 +86,10 @@ swfdec_test_socket_class_init (SwfdecTestSocketClass *klass)
 static void
 swfdec_test_socket_init (SwfdecTestSocket *sock)
 {
-  sock->context = g_main_context_new ();
 }
 
 /*** AS CODE ***/
 
-#define swfdec_test_socket_process(sock) do { \
-  g_usleep (1000); \
-} 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)
-{
-  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;
-
-  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, 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));
-
-  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);
-}
-
 SWFDEC_TEST_FUNCTION ("Socket_send", swfdec_test_socket_send, 0)
 void
 swfdec_test_socket_send (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
@@ -150,26 +97,16 @@ swfdec_test_socket_send (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
 {
   SwfdecTestSocket *sock;
   SwfdecBuffer *buffer;
-  GError *error = NULL;
-  gsize written;
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
 
-  if (sock->listening) {
-    swfdec_test_throw (cx, "server sockets may not call send");
+  if (sock->plugin == NULL) {
+    swfdec_test_throw (cx, "socket is closed");
     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);
-  }
+  sock->plugin->receive (sock->plugin, buffer->data, buffer->length);
   swfdec_buffer_unref (buffer);
-  swfdec_test_socket_process (sock);
 }
 
 SWFDEC_TEST_FUNCTION ("Socket_receive", swfdec_test_socket_receive, 0)
@@ -179,92 +116,111 @@ swfdec_test_socket_receive (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
 {
   SwfdecTestSocket *sock;
   SwfdecBuffer *buffer;
-  GError *error = NULL;
-  gsize len;
+  gsize len, depth;
 
   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);
+  depth = swfdec_buffer_queue_get_depth (sock->receive_queue);
   if (len > 0) {
-    buffer = swfdec_buffer_new (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", len, buffer->length);
-      swfdec_buffer_unref (buffer);
+    if (depth < len) {
+      swfdec_test_throw (cx, "nly %zu bytes available", depth);
       return;
+    } else {
+      buffer = swfdec_buffer_queue_pull (sock->receive_queue, len);
     }
   } else {
-    SwfdecBufferQueue *queue = swfdec_buffer_queue_new ();
-    SoupSocketIOStatus status = SOUP_SOCKET_OK;
-    while (status == SOUP_SOCKET_OK) {
-      buffer = swfdec_buffer_new (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);
+    if (depth == 0) {
+      SWFDEC_AS_VALUE_SET_NULL (retval);
+      return;
+    } else {
+      buffer = swfdec_buffer_queue_pull (sock->receive_queue, depth);
     }
-    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)
+SWFDEC_TEST_FUNCTION ("Socket_error", swfdec_test_socket_error, 0)
 void
-swfdec_test_socket_close (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+swfdec_test_socket_error (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
     SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
-  swfdec_test_throw (cx, "implement");
+  SwfdecTestSocket *sock;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
+  
+  swfdec_test_socket_do_close (sock, FALSE);
 }
 
-SWFDEC_TEST_FUNCTION ("Socket", swfdec_test_socket_create, swfdec_test_socket_get_type)
+SWFDEC_TEST_FUNCTION ("Socket_close", swfdec_test_socket_close_as, 0)
 void
-swfdec_test_socket_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+swfdec_test_socket_close_as (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
     SwfdecAsValue *argv, SwfdecAsValue *retval)
 {
   SwfdecTestSocket *sock;
-  SoupSocket *ssock;
-  int port;
-  SoupAddress *addr;
 
-  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "i", &port);
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_SOCKET, &sock, "");
+  
+  swfdec_test_socket_do_close (sock, TRUE);
+}
 
-  if (!swfdec_as_context_is_constructing (cx))
-    return;
+static void 
+swfdec_test_socket_plugin_send (SwfdecTestPluginSocket *plugin, unsigned char *data,
+    unsigned long length)
+{
+  SwfdecTestSocket *sock = plugin->data;
+  SwfdecBuffer *buffer;
 
-  sock->listening = TRUE;
-  /* FIXME: throw here? */
-  if (port < 1024 || port >= 65535) {
-    swfdec_test_throw (cx, "invalid port %d", port);
-    return;
-  }
+  buffer = swfdec_buffer_new_for_data (g_memdup (data, length), length);
+  swfdec_buffer_queue_push (sock->receive_queue, buffer);
+}
 
-  addr = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV4, port);
-  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);
-  swfdec_test_socket_attach (sock, ssock);
-  if (!soup_socket_listen (ssock)) {
-    swfdec_test_throw (cx, "failed to listen");
-    return;
-  }
+static void
+swfdec_test_socket_plugin_close (SwfdecTestPluginSocket *plugin)
+{
+  swfdec_test_socket_do_close (plugin->data, TRUE);
+}
+
+SwfdecAsObject *
+swfdec_test_socket_new (SwfdecTestTest *test, SwfdecTestPluginSocket *plugin)
+{
+  SwfdecAsValue val;
+  SwfdecAsContext *cx;
+  SwfdecAsObject *new;
+
+  g_return_val_if_fail (SWFDEC_IS_TEST_TEST (test), NULL);
+  g_return_val_if_fail (plugin != NULL, NULL);
+
+  cx = SWFDEC_AS_OBJECT (test)->context;
+  new = g_object_new (SWFDEC_TYPE_TEST_SOCKET, NULL);
+  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));
+
+  plugin->send = swfdec_test_socket_plugin_send;
+  plugin->close = swfdec_test_socket_plugin_close;
+  plugin->data = new;
+  SWFDEC_TEST_SOCKET (new)->test = test;
+  SWFDEC_TEST_SOCKET (new)->plugin = plugin;
+  test->sockets = g_list_append (test->sockets, new);
+
+  SWFDEC_AS_VALUE_SET_STRING (&val,
+      swfdec_as_context_get_string (cx, plugin->host));
+  swfdec_as_object_set_variable (new, 
+      swfdec_as_context_get_string (cx, "host"), &val);
+  SWFDEC_AS_VALUE_SET_INT (&val, plugin->port);
+  swfdec_as_object_set_variable (new, 
+      swfdec_as_context_get_string (cx, "port"), &val);
+
+  return new;
+}
+
+void
+swfdec_test_socket_close (SwfdecTestSocket *sock)
+{
+  g_return_if_fail (SWFDEC_IS_TEST_SOCKET (sock));
+
+  return swfdec_test_socket_do_close (sock, FALSE);
 }
 
diff --git a/test/swfdec_test_socket.h b/test/swfdec_test_socket.h
index 95a51de..f5661dd 100644
--- a/test/swfdec_test_socket.h
+++ b/test/swfdec_test_socket.h
@@ -20,6 +20,8 @@
 #ifndef _SWFDEC_TEST_SOCKET_H_
 #define _SWFDEC_TEST_SOCKET_H_
 
+#include "swfdec_test_plugin.h"
+#include "swfdec_test_test.h"
 #include <swfdec/swfdec.h>
 #include <libsoup/soup.h>
 
@@ -38,15 +40,11 @@ typedef struct _SwfdecTestSocketClass SwfdecTestSocketClass;
 
 struct _SwfdecTestSocket
 {
-  SwfdecAsObject	as_object;
+  SwfdecAsObject		as_object;
 
-  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 */
+  SwfdecTestPluginSocket *	plugin;		/* the socket we manage or NULL if closed */
+  SwfdecTestTest *		test;		/* the test that spawned us */
+  SwfdecBufferQueue *		receive_queue;	/* queue with received data */
 };
 
 struct _SwfdecTestSocketClass
@@ -56,6 +54,9 @@ struct _SwfdecTestSocketClass
 
 GType		swfdec_test_socket_get_type	(void);
 
+SwfdecAsObject *swfdec_test_socket_new		(SwfdecTestTest *		test,
+						 SwfdecTestPluginSocket *	sock);
+void		swfdec_test_socket_close	(SwfdecTestSocket *		sock);
 
 G_END_DECLS
 #endif
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index c38a7f8..34808a5 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -28,6 +28,7 @@
 #include "swfdec_test_buffer.h"
 #include "swfdec_test_function.h"
 #include "swfdec_test_image.h"
+#include "swfdec_test_socket.h"
 #include "swfdec_test_utils.h"
 
 /*** PLUGIN HANDLING ***/
@@ -70,6 +71,15 @@ swfdec_test_test_trace (SwfdecTestPlugin *plugin, const char *message)
 }
 
 static void
+swfdec_test_test_request_socket (SwfdecTestPlugin *plugin,
+    SwfdecTestPluginSocket *psock)
+{
+  SwfdecTestTest *test = SWFDEC_TEST_TEST_FROM_PLUGIN (plugin);
+  
+  swfdec_test_socket_new (test, psock);
+}
+
+static void
 swfdec_test_test_load_plugin (SwfdecTestTest *test, const char *filename)
 {
   memset (&test->plugin, 0, sizeof (SwfdecTestPlugin));
@@ -85,6 +95,7 @@ swfdec_test_test_load_plugin (SwfdecTestTest *test, const char *filename)
   test->plugin.trace = swfdec_test_test_trace;
   test->plugin.quit = swfdec_test_test_quit;
   test->plugin.error = swfdec_test_test_error;
+  test->plugin.request_socket = swfdec_test_test_request_socket;
 
   /* load the right values */
   if (swfdec_test_plugin_name) {
@@ -315,6 +326,32 @@ swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
   swfdec_test_do_reset (test, filename[0] ? filename : NULL);
 }
 
+SWFDEC_TEST_FUNCTION ("Socket_getSocket", swfdec_test_test_getSocket, 0)
+void
+swfdec_test_test_getSocket (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+    SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+  SwfdecTestTest *test;
+
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "");
+
+  if (test->pending_sockets == NULL) {
+    if (test->sockets == NULL) {
+      SWFDEC_AS_VALUE_SET_NULL (retval);
+    } else {
+      test->pending_sockets = test->sockets;
+      SWFDEC_AS_VALUE_SET_OBJECT (retval, test->pending_sockets->data);
+    }
+  } else {
+    if (test->pending_sockets->next == NULL) {
+      SWFDEC_AS_VALUE_SET_NULL (retval);
+    } else {
+      test->pending_sockets = test->pending_sockets->next;
+      SWFDEC_AS_VALUE_SET_OBJECT (retval, test->pending_sockets->data);
+    }
+  }
+}
+
 SWFDEC_TEST_FUNCTION ("Test_get_trace", swfdec_test_test_get_trace, 0)
 void
 swfdec_test_test_get_trace (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
diff --git a/test/swfdec_test_test.h b/test/swfdec_test_test.h
index f074108..6ba421e 100644
--- a/test/swfdec_test_test.h
+++ b/test/swfdec_test_test.h
@@ -49,6 +49,9 @@ struct _SwfdecTestTest
 
   char *		filename;	/* file the player should be loaded from */
   SwfdecBufferQueue *	trace;		/* all captured trace output */
+
+  GList *		sockets;	/* list of all sockets */
+  GList *		pending_sockets;/* last socket handed out or NULL if none given out */
 };
 
 struct _SwfdecTestTestClass


More information about the Swfdec-commits mailing list