diff --git a/libpurple/protocols/facebook/Makefile.am b/libpurple/protocols/facebook/Makefile.am --- a/libpurple/protocols/facebook/Makefile.am +++ b/libpurple/protocols/facebook/Makefile.am @@ -1,11 +1,14 @@ EXTRA_DIST = \ - Makefile.mingw + Makefile.mingw \ + marshaller.list pkgdir = @PURPLE_PLUGINDIR@ FACEBOOKSOURCES = \ + marshal.c \ + marshal.h \ api.c \ api.h \ data.c \ data.h \ facebook.h \ @@ -25,10 +28,21 @@ ../../http.c \ ../../http.h \ ../../purple-socket.h \ ../../purple-socket.c +CLEANFILES = \ + marshal.c \ + marshal.h + +marshal.c: $(srcdir)/marshaller.list marshal.h + $(AM_V_GEN)echo "#include \"marshal.h\"" > $@ + $(AM_V_at)$(GLIB_GENMARSHAL) --prefix=fb_marshal --body $(srcdir)/marshaller.list >> $@ + +marshal.h: $(srcdir)/marshaller.list + $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=fb_marshal --header $(srcdir)/marshaller.list > $@ + AM_CFLAGS = $(st) libfacebook_la_LDFLAGS = -module @PLUGIN_LDFLAGS@ if STATIC_FACEBOOK diff --git a/libpurple/protocols/facebook/Makefile.mingw b/libpurple/protocols/facebook/Makefile.mingw --- a/libpurple/protocols/facebook/Makefile.mingw +++ b/libpurple/protocols/facebook/Makefile.mingw @@ -42,6 +42,7 @@ ## SOURCES, OBJECTS ## C_SRC = \ + marshal.c \ api.c \ data.c \ facebook.c \ @@ -85,11 +86,19 @@ $(TARGET).dll: $(OBJECTS) $(CC) -shared $(OBJECTS) $(LIB_PATHS) $(LIBS) $(DLL_LD_FLAGS) -o $(TARGET).dll +marshal.c: marshaller.list marshal.h + @echo "#include \"marshal.h\"" > $@ + @$(GLIB_GENMARSHAL) --prefix=fb_marshal --body marshaller.list >> $@ + +marshal.h: marshaller.list + @$(GLIB_GENMARSHAL) --prefix=fb_marshal --header marshaller.list > $@ + + ## ## CLEAN RULES ## clean: - rm -f $(OBJECTS) + rm -f $(OBJECTS) marshal.c marshal.h rm -f $(TARGET).dll include $(PIDGIN_COMMON_TARGETS) diff --git a/libpurple/protocols/facebook/api.c b/libpurple/protocols/facebook/api.c --- a/libpurple/protocols/facebook/api.c +++ b/libpurple/protocols/facebook/api.c @@ -26,10 +26,11 @@ #include "glibcompat.h" #include "api.h" #include "http.h" #include "json.h" +#include "marshal.h" #include "thrift.h" #include "util.h" typedef struct _FbApiData FbApiData; @@ -289,11 +290,12 @@ */ g_signal_new("auth", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * FbApi::connect: @@ -304,11 +306,12 @@ */ g_signal_new("connect", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * FbApi::contact: @@ -320,11 +323,12 @@ */ g_signal_new("contact", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::contacts: @@ -340,11 +344,12 @@ */ g_signal_new("contacts", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER_BOOLEAN, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_BOOLEAN); /** * FbApi::contacts-delta: @@ -356,11 +361,12 @@ */ g_signal_new("contacts-delta", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER_POINTER, G_TYPE_NONE, 2, G_TYPE_POINTER, G_TYPE_POINTER); /** * FbApi::error: @@ -372,11 +378,12 @@ */ g_signal_new("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::events: @@ -387,11 +394,12 @@ */ g_signal_new("events", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::messages: @@ -402,11 +410,12 @@ */ g_signal_new("messages", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::presences: @@ -417,11 +426,12 @@ */ g_signal_new("presences", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::thread: @@ -433,11 +443,12 @@ */ g_signal_new("thread", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::thread-create: @@ -450,11 +461,12 @@ */ g_signal_new("thread-create", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__INT64, G_TYPE_NONE, 1, FB_TYPE_ID); /** * FbApi::thread-kicked: @@ -466,11 +478,12 @@ */ g_signal_new("thread-kicked", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::threads: @@ -482,11 +495,12 @@ */ g_signal_new("threads", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * FbApi::typing: @@ -497,11 +511,12 @@ */ g_signal_new("typing", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); } static void diff --git a/libpurple/protocols/facebook/marshaller.list b/libpurple/protocols/facebook/marshaller.list new file mode 100644 --- /dev/null +++ b/libpurple/protocols/facebook/marshaller.list @@ -0,0 +1,7 @@ +VOID:INT64 +VOID:OBJECT +VOID:POINTER +VOID:POINTER,BOOLEAN +VOID:STRING,BOXED +VOID:VOID +VOID:POINTER,POINTER diff --git a/libpurple/protocols/facebook/mqtt.c b/libpurple/protocols/facebook/mqtt.c --- a/libpurple/protocols/facebook/mqtt.c +++ b/libpurple/protocols/facebook/mqtt.c @@ -28,10 +28,11 @@ #include "account.h" #include "eventloop.h" #include "glibcompat.h" #include "sslconn.h" +#include "marshal.h" #include "mqtt.h" #include "util.h" struct _FbMqttPrivate { @@ -92,11 +93,12 @@ */ g_signal_new("connect", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * FbMqtt::error: @@ -108,11 +110,12 @@ */ g_signal_new("error", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_ERROR); /** * FbMqtt::open: @@ -124,11 +127,12 @@ */ g_signal_new("open", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * FbMqtt::publish: @@ -140,11 +144,12 @@ */ g_signal_new("publish", G_TYPE_FROM_CLASS(klass), G_SIGNAL_ACTION, 0, - NULL, NULL, NULL, + NULL, NULL, + fb_marshal_VOID__STRING_BOXED, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_BYTE_ARRAY); } static void