summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
m---------lib/ext/wocky0
-rw-r--r--lib/gibber/Makefile.am10
-rw-r--r--lib/gibber/gibber-bytestream-direct.c1
-rw-r--r--lib/gibber/gibber-bytestream-ibb.c277
-rw-r--r--lib/gibber/gibber-bytestream-ibb.h2
-rw-r--r--lib/gibber/gibber-bytestream-iface.h4
-rw-r--r--lib/gibber/gibber-bytestream-oob.c448
-rw-r--r--lib/gibber/gibber-debug.c4
-rw-r--r--lib/gibber/gibber-debug.h4
-rw-r--r--lib/gibber/gibber-file-transfer.c119
-rw-r--r--lib/gibber/gibber-file-transfer.h14
-rw-r--r--lib/gibber/gibber-iq-helper.c403
-rw-r--r--lib/gibber/gibber-iq-helper.h87
-rw-r--r--lib/gibber/gibber-muc-connection.c8
-rw-r--r--lib/gibber/gibber-muc-connection.h4
-rw-r--r--lib/gibber/gibber-oob-file-transfer.c347
-rw-r--r--lib/gibber/gibber-oob-file-transfer.h5
-rw-r--r--lib/gibber/gibber-util.c20
-rw-r--r--lib/gibber/gibber-util.h2
-rw-r--r--lib/gibber/gibber-xmpp-connection-listener.c194
-rw-r--r--lib/gibber/gibber-xmpp-connection-listener.h74
-rw-r--r--lib/gibber/gibber-xmpp-connection.c391
-rw-r--r--lib/gibber/gibber-xmpp-connection.h102
-rw-r--r--lib/gibber/gibber-xmpp-error.c36
-rw-r--r--lib/gibber/gibber-xmpp-error.h10
-rw-r--r--lib/gibber/gibber-xmpp-node.c24
-rw-r--r--lib/gibber/gibber-xmpp-node.h59
-rw-r--r--lib/gibber/gibber-xmpp-reader.c4
-rw-r--r--lib/gibber/gibber-xmpp-stanza.c26
-rw-r--r--lib/gibber/gibber-xmpp-stanza.h90
-rw-r--r--lib/gibber/gibber-xmpp-writer.h2
-rw-r--r--lib/gibber/tests/Makefile.am116
-rw-r--r--lib/gibber/tests/check-gibber-iq-helper.c437
-rw-r--r--lib/gibber/tests/check-gibber-listener.c71
-rw-r--r--lib/gibber/tests/check-gibber-r-multicast-causal-transport.c127
-rw-r--r--lib/gibber/tests/check-gibber-r-multicast-packet.c81
-rw-r--r--lib/gibber/tests/check-gibber-r-multicast-sender.c121
-rw-r--r--lib/gibber/tests/check-gibber-unix-transport.c55
-rw-r--r--lib/gibber/tests/check-gibber-xmpp-connection-listener.c120
-rw-r--r--lib/gibber/tests/check-gibber-xmpp-connection.c126
-rw-r--r--lib/gibber/tests/check-gibber-xmpp-error.c105
-rw-r--r--lib/gibber/tests/check-gibber-xmpp-node.c146
-rw-r--r--lib/gibber/tests/check-gibber-xmpp-reader.c80
-rw-r--r--lib/gibber/tests/check-gibber-xmpp-stanza.c168
-rw-r--r--lib/gibber/tests/check-gibber.h19
-rw-r--r--lib/gibber/tests/check-helpers.c63
-rw-r--r--lib/gibber/tests/check-helpers.h43
-rw-r--r--lib/gibber/tests/check-main.c55
-rw-r--r--lib/gibber/tests/test-xmpp-connection.c160
49 files changed, 1178 insertions, 3686 deletions
diff --git a/lib/ext/wocky b/lib/ext/wocky
-Subproject b3812fad955afdbf21602039035ae9c377e99d5
+Subproject 3d8bd1bd1e3857f1a14dbba92a8fe6bf7f79005
diff --git a/lib/gibber/Makefile.am b/lib/gibber/Makefile.am
index c2cd533b..5206df16 100644
--- a/lib/gibber/Makefile.am
+++ b/lib/gibber/Makefile.am
@@ -10,8 +10,6 @@ BUILT_SOURCES = \
gibber-signals-marshal.c
HANDWRITTEN_SOURCES = \
- gibber-xmpp-connection.c \
- gibber-xmpp-connection.h \
gibber-muc-connection.c \
gibber-muc-connection.h \
gibber-bytestream-ibb.h \
@@ -26,12 +24,8 @@ HANDWRITTEN_SOURCES = \
gibber-bytestream-direct.c \
gibber-debug.c \
gibber-debug.h \
- gibber-xmpp-node.c \
- gibber-xmpp-node.h \
gibber-xmpp-reader.c \
gibber-xmpp-reader.h \
- gibber-xmpp-stanza.c \
- gibber-xmpp-stanza.h \
gibber-xmpp-writer.c \
gibber-xmpp-writer.h \
gibber-transport.c \
@@ -56,16 +50,12 @@ HANDWRITTEN_SOURCES = \
gibber-linklocal-transport.c \
gibber-linklocal-transport.h \
gibber-namespaces.h \
- gibber-iq-helper.c \
- gibber-iq-helper.h \
gibber-file-transfer.c \
gibber-file-transfer.h \
gibber-oob-file-transfer.c \
gibber-oob-file-transfer.h \
gibber-listener.c \
gibber-listener.h \
- gibber-xmpp-connection-listener.c \
- gibber-xmpp-connection-listener.h \
gibber-xmpp-error.h \
gibber-xmpp-error.c \
gibber-sockets.c \
diff --git a/lib/gibber/gibber-bytestream-direct.c b/lib/gibber/gibber-bytestream-direct.c
index adb90417..81c6ba6e 100644
--- a/lib/gibber/gibber-bytestream-direct.c
+++ b/lib/gibber/gibber-bytestream-direct.c
@@ -26,7 +26,6 @@
#include <glib.h>
#include "gibber-sockets.h"
-#include "gibber-xmpp-connection.h"
#include "gibber-linklocal-transport.h"
#include "gibber-util.h"
#include "gibber-xmpp-error.h"
diff --git a/lib/gibber/gibber-bytestream-ibb.c b/lib/gibber/gibber-bytestream-ibb.c
index a50e4702..d2116c3c 100644
--- a/lib/gibber/gibber-bytestream-ibb.c
+++ b/lib/gibber/gibber-bytestream-ibb.c
@@ -25,10 +25,10 @@
#include <glib.h>
#include <wocky/wocky-namespaces.h>
+#include <wocky/wocky-stanza.h>
+#include <wocky/wocky-porter.h>
-#include "gibber-xmpp-connection.h"
#include "gibber-muc-connection.h"
-#include "gibber-xmpp-stanza.h"
#include "gibber-namespaces.h"
#include "gibber-xmpp-error.h"
@@ -53,7 +53,8 @@ G_DEFINE_TYPE_WITH_CODE (GibberBytestreamIBB, gibber_bytestream_ibb,
/* properties */
enum
{
- PROP_XMPP_CONNECTION = 1,
+ PROP_PORTER = 1,
+ PROP_CONTACT,
PROP_SELF_ID,
PROP_PEER_ID,
PROP_STREAM_ID,
@@ -66,11 +67,13 @@ enum
typedef struct _GibberBytestreamIBBPrivate GibberBytestreamIBBPrivate;
struct _GibberBytestreamIBBPrivate
{
- GibberXmppConnection *xmpp_connection;
+ WockyPorter *porter;
+ WockyContact *contact;
gchar *self_id;
gchar *peer_id;
gchar *stream_id;
gchar *stream_init_id;
+ guint stanza_received_id;
GibberBytestreamState state;
guint16 seq;
@@ -91,15 +94,15 @@ gibber_bytestream_ibb_init (GibberBytestreamIBB *self)
self->priv = priv;
}
-static void
-xmpp_connection_received_stanza_cb (GibberXmppConnection *conn,
- GibberXmppStanza *stanza,
- gpointer user_data)
+static gboolean
+received_stanza_cb (WockyPorter *porter,
+ WockyStanza *stanza,
+ gpointer user_data)
{
GibberBytestreamIBB *self = (GibberBytestreamIBB *) user_data;
GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
WockyNode *node = wocky_stanza_get_top_node (stanza);
- GibberXmppNode *data;
+ WockyNode *data;
GString *str;
guchar *decoded;
gsize len;
@@ -108,28 +111,28 @@ xmpp_connection_received_stanza_cb (GibberXmppConnection *conn,
data = wocky_node_get_child_ns (node, "data", WOCKY_XMPP_NS_IBB);
if (data == NULL)
{
- return;
+ return FALSE;
}
stream_id = wocky_node_get_attribute (data, "sid");
if (stream_id == NULL || strcmp (stream_id, priv->stream_id) != 0)
{
DEBUG ("bad stream id");
- return;
+ return FALSE;
}
if (priv->state != GIBBER_BYTESTREAM_STATE_OPEN)
{
DEBUG ("can't receive data through a not open bytestream (state: %d)",
priv->state);
- return;
+ return FALSE;
}
- from = gibber_xmpp_node_get_attribute (node, "from");
+ from = wocky_node_get_attribute (node, "from");
if (from == NULL)
{
DEBUG ("got a message without a from field, ignoring");
- return;
+ return FALSE;
}
// XXX check sequence number ?
@@ -140,6 +143,8 @@ xmpp_connection_received_stanza_cb (GibberXmppConnection *conn,
g_string_free (str, TRUE);
g_free (decoded);
+
+ return TRUE;
}
static void
@@ -185,8 +190,11 @@ gibber_bytestream_ibb_get_property (GObject *object,
switch (property_id)
{
- case PROP_XMPP_CONNECTION:
- g_value_set_object (value, priv->xmpp_connection);
+ case PROP_PORTER:
+ g_value_set_object (value, priv->porter);
+ break;
+ case PROP_CONTACT:
+ g_value_set_object (value, priv->contact);
break;
case PROP_SELF_ID:
g_value_set_string (value, priv->self_id);
@@ -213,6 +221,21 @@ gibber_bytestream_ibb_get_property (GObject *object,
}
static void
+make_porter_connections (GibberBytestreamIBB *self)
+{
+ GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
+ gchar *jid;
+
+ jid = wocky_contact_dup_jid (priv->contact);
+
+ priv->stanza_received_id = wocky_porter_register_handler_from (priv->porter,
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_TYPE_NONE, jid,
+ WOCKY_PORTER_HANDLER_PRIORITY_NORMAL, received_stanza_cb, self, NULL);
+
+ g_free (jid);
+}
+
+static void
gibber_bytestream_ibb_set_property (GObject *object,
guint property_id,
const GValue *value,
@@ -223,11 +246,11 @@ gibber_bytestream_ibb_set_property (GObject *object,
switch (property_id)
{
- case PROP_XMPP_CONNECTION:
- priv->xmpp_connection = g_value_get_object (value);
- if (priv->xmpp_connection != NULL)
- g_signal_connect (priv->xmpp_connection, "received-stanza",
- G_CALLBACK (xmpp_connection_received_stanza_cb), self);
+ case PROP_PORTER:
+ priv->porter = g_value_dup_object (value);
+ break;
+ case PROP_CONTACT:
+ priv->contact = g_value_dup_object (value);
break;
case PROP_SELF_ID:
g_free (priv->self_id);
@@ -271,7 +294,8 @@ gibber_bytestream_ibb_constructor (GType type,
priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (GIBBER_BYTESTREAM_IBB (obj));
- g_assert (priv->xmpp_connection != NULL);
+ g_assert (priv->porter != NULL);
+ g_assert (priv->contact != NULL);
g_assert (priv->stream_init_id != NULL);
g_assert (priv->self_id != NULL);
g_assert (priv->peer_id != NULL);
@@ -280,6 +304,19 @@ gibber_bytestream_ibb_constructor (GType type,
}
static void
+gibber_bytestream_ibb_constructed (GObject *obj)
+{
+ GibberBytestreamIBB *self = GIBBER_BYTESTREAM_IBB (obj);
+ GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
+
+ if (G_OBJECT_CLASS (gibber_bytestream_ibb_parent_class)->constructed != NULL)
+ G_OBJECT_CLASS (gibber_bytestream_ibb_parent_class)->constructed (obj);
+
+ if (priv->porter != NULL && priv->contact != NULL)
+ make_porter_connections (self);
+}
+
+static void
gibber_bytestream_ibb_class_init (
GibberBytestreamIBBClass *gibber_bytestream_ibb_class)
{
@@ -295,6 +332,7 @@ gibber_bytestream_ibb_class_init (
object_class->get_property = gibber_bytestream_ibb_get_property;
object_class->set_property = gibber_bytestream_ibb_set_property;
object_class->constructor = gibber_bytestream_ibb_constructor;
+ object_class->constructed = gibber_bytestream_ibb_constructed;
g_object_class_override_property (object_class, PROP_SELF_ID,
"self-id");
@@ -308,14 +346,25 @@ gibber_bytestream_ibb_class_init (
"protocol");
param_spec = g_param_spec_object (
- "xmpp-connection",
- "GibberXmppConnection object",
- "Gibber XMPP connection object used for communication by this "
+ "porter",
+ "WockyPorter object",
+ "Wocky porter object used for communication by this "
+ "bytestream if it's a private one",
+ WOCKY_TYPE_PORTER,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (object_class, PROP_PORTER,
+ param_spec);
+
+ param_spec = g_param_spec_object (
+ "contact",
+ "WockyContact object",
+ "Contact object used for communication by this "
"bytestream if it's a private one",
- GIBBER_TYPE_XMPP_CONNECTION,
+ WOCKY_TYPE_CONTACT,
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_XMPP_CONNECTION,
+ g_object_class_install_property (object_class, PROP_CONTACT,
param_spec);
param_spec = g_param_spec_string (
@@ -341,9 +390,8 @@ gibber_bytestream_ibb_send (GibberBytestreamIface *bytestream,
{
GibberBytestreamIBB *self = GIBBER_BYTESTREAM_IBB (bytestream);
GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
gchar *seq, *encoded;
- gboolean ret;
if (priv->state != GIBBER_BYTESTREAM_STATE_OPEN)
{
@@ -356,65 +404,65 @@ gibber_bytestream_ibb_send (GibberBytestreamIface *bytestream,
encoded = g_base64_encode ((const guchar *) str, len);
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_MESSAGE,
- GIBBER_STANZA_SUB_TYPE_NONE,
- priv->self_id, priv->peer_id,
- GIBBER_NODE, "data",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_IBB,
- GIBBER_NODE_ATTRIBUTE, "sid", priv->stream_id,
- GIBBER_NODE_ATTRIBUTE, "seq", seq,
- GIBBER_NODE_TEXT, encoded,
- GIBBER_NODE_END,
- GIBBER_NODE, "amp",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_AMP,
- GIBBER_NODE, "rule",
- GIBBER_NODE_ATTRIBUTE, "condition", "deliver-at",
- GIBBER_NODE_ATTRIBUTE, "value", "stored",
- GIBBER_NODE_ATTRIBUTE, "action", "error",
- GIBBER_NODE_END,
- GIBBER_NODE, "rule",
- GIBBER_NODE_ATTRIBUTE, "condition", "match-resource",
- GIBBER_NODE_ATTRIBUTE, "value", "exact",
- GIBBER_NODE_ATTRIBUTE, "action", "error",
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_STANZA_END);
+ stanza = wocky_stanza_build_to_contact (WOCKY_STANZA_TYPE_MESSAGE,
+ WOCKY_STANZA_SUB_TYPE_NONE,
+ priv->self_id, priv->contact,
+ '(', "data",
+ ':', GIBBER_XMPP_NS_IBB,
+ '@', "sid", priv->stream_id,
+ '@', "seq", seq,
+ '$', encoded,
+ ')',
+ '(', "amp",
+ ':', GIBBER_XMPP_NS_AMP,
+ '(', "rule",
+ '@', "condition", "deliver-at",
+ '@', "value", "stored",
+ '@', "action", "error",
+ ')',
+ '(', "rule",
+ '@', "condition", "match-resource",
+ '@', "value", "exact",
+ '@', "action", "error",
+ ')',
+ ')',
+ NULL);
DEBUG ("send %d bytes", len);
- ret = gibber_xmpp_connection_send (priv->xmpp_connection, stanza, NULL);
+ wocky_porter_send (priv->porter, stanza);
g_object_unref (stanza);
g_free (encoded);
g_free (seq);
- return ret;
+ return TRUE;
}
-static GibberXmppStanza *
+static WockyStanza *
create_si_accept_iq (GibberBytestreamIBB *self)
{
GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
- return gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_RESULT,
- priv->self_id, priv->peer_id,
- GIBBER_NODE_ATTRIBUTE, "id", priv->stream_init_id,
- GIBBER_NODE, "si",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_SI,
- GIBBER_NODE, "feature",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_FEATURENEG,
- GIBBER_NODE, "x",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_DATA,
- GIBBER_NODE_ATTRIBUTE, "type", "submit",
- GIBBER_NODE, "field",
- GIBBER_NODE_ATTRIBUTE, "var", "stream-method",
- GIBBER_NODE, "value",
- GIBBER_NODE_TEXT, GIBBER_XMPP_NS_IBB,
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_NODE_END, GIBBER_STANZA_END);
+ return wocky_stanza_build_to_contact (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_RESULT,
+ priv->self_id, priv->contact,
+ '@', "id", priv->stream_init_id,
+ '(', "si",
+ ':', GIBBER_XMPP_NS_SI,
+ '(', "feature",
+ ':', GIBBER_XMPP_NS_FEATURENEG,
+ '(', "x",
+ ':', GIBBER_XMPP_NS_DATA,
+ '@', "type", "submit",
+ '(', "field",
+ '@', "var", "stream-method",
+ '(', "value",
+ '$', GIBBER_XMPP_NS_IBB,
+ ')',
+ ')',
+ ')',
+ ')',
+ ')', NULL);
}
/*
@@ -429,9 +477,9 @@ gibber_bytestream_ibb_accept (GibberBytestreamIface *bytestream,
{
GibberBytestreamIBB *self = GIBBER_BYTESTREAM_IBB (bytestream);
GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
WockyNode *node;
- GibberXmppNode *si;
+ WockyNode *si;
if (priv->state != GIBBER_BYTESTREAM_STATE_LOCAL_PENDING)
{
@@ -442,7 +490,7 @@ gibber_bytestream_ibb_accept (GibberBytestreamIface *bytestream,
stanza = create_si_accept_iq (self);
node = wocky_stanza_get_top_node (stanza);
- si = gibber_xmpp_node_get_child_ns (node, "si", GIBBER_XMPP_NS_SI);
+ si = wocky_node_get_child_ns (node, "si", GIBBER_XMPP_NS_SI);
g_assert (si != NULL);
if (func != NULL)
@@ -451,7 +499,9 @@ gibber_bytestream_ibb_accept (GibberBytestreamIface *bytestream,
func (si, user_data);
}
- gibber_xmpp_connection_send (priv->xmpp_connection, stanza, NULL);
+ wocky_porter_send (priv->porter, stanza);
+
+ g_object_unref (stanza);
DEBUG ("stream is now accepted");
g_object_set (self, "state", GIBBER_BYTESTREAM_STATE_ACCEPTED, NULL);
@@ -462,16 +512,16 @@ gibber_bytestream_ibb_decline (GibberBytestreamIBB *self,
GError *error)
{
GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
WockyNode *node;
g_return_if_fail (priv->state == GIBBER_BYTESTREAM_STATE_LOCAL_PENDING);
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_ERROR,
- priv->self_id, priv->peer_id,
- GIBBER_NODE_ATTRIBUTE, "id", priv->stream_init_id,
- GIBBER_STANZA_END);
+ stanza = wocky_stanza_build_to_contact (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_ERROR,
+ priv->self_id, priv->contact,
+ '@', "id", priv->stream_init_id,
+ NULL);
node = wocky_stanza_get_top_node (stanza);
if (error != NULL && error->domain == GIBBER_XMPP_ERROR)
@@ -484,7 +534,7 @@ gibber_bytestream_ibb_decline (GibberBytestreamIBB *self,
"Offer Declined");
}
- gibber_xmpp_connection_send (priv->xmpp_connection, stanza, NULL);
+ wocky_porter_send (priv->porter, stanza);
g_object_unref (stanza);
}
@@ -512,22 +562,21 @@ gibber_bytestream_ibb_close (GibberBytestreamIface *bytestream,
/* Stream was created using SI so we decline the request */
gibber_bytestream_ibb_decline (self, error);
}
-
- else if (priv->xmpp_connection != NULL)
+ else
{
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
DEBUG ("send IBB close stanza");
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- priv->self_id, priv->peer_id,
- GIBBER_NODE, "close",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_IBB,
- GIBBER_NODE_ATTRIBUTE, "sid", priv->stream_id,
- GIBBER_NODE_END, GIBBER_STANZA_END);
+ stanza = wocky_stanza_build_to_contact (WOCKY_STANZA_TYPE_IQ,
+ WOCKY_STANZA_SUB_TYPE_SET,
+ priv->self_id, priv->contact,
+ '(', "close",
+ ':', GIBBER_XMPP_NS_IBB,
+ '@', "sid", priv->stream_id,
+ ')', NULL);
- gibber_xmpp_connection_send (priv->xmpp_connection, stanza, NULL);
+ wocky_porter_send (priv->porter, stanza);
g_object_unref (stanza);
}
@@ -571,8 +620,7 @@ gibber_bytestream_ibb_initiate (GibberBytestreamIface *bytestream)
{
GibberBytestreamIBB *self = GIBBER_BYTESTREAM_IBB (bytestream);
GibberBytestreamIBBPrivate *priv = GIBBER_BYTESTREAM_IBB_GET_PRIVATE (self);
- GibberXmppStanza *msg;
- GError *error = NULL;
+ WockyStanza *msg;
if (priv->state != GIBBER_BYTESTREAM_STATE_INITIATING)
{
@@ -581,36 +629,23 @@ gibber_bytestream_ibb_initiate (GibberBytestreamIface *bytestream)
return FALSE;
}
- if (priv->xmpp_connection == NULL)
- {
- DEBUG ("Can only initiate a private bytestream");
- return FALSE;
- }
-
if (priv->stream_id == NULL)
{
DEBUG ("stream doesn't have an ID");
return FALSE;
}
- msg = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_SET,
- priv->self_id, priv->peer_id,
- GIBBER_NODE, "open",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_IBB,
- GIBBER_NODE_ATTRIBUTE, "sid", priv->stream_id,
- GIBBER_NODE_ATTRIBUTE, "block-size", "4096",
- GIBBER_NODE_END, GIBBER_STANZA_END);
+ msg = wocky_stanza_build_to_contact (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_SET,
+ priv->self_id, priv->contact,
+ '(', "open",
+ ':', GIBBER_XMPP_NS_IBB,
+ '@', "sid", priv->stream_id,
+ '@', "block-size", "4096",
+ ')', NULL);
/* XXX should send using _with_reply (ibb_init_reply_cb) */
- if (!gibber_xmpp_connection_send (priv->xmpp_connection, msg, &error))
- {
- DEBUG ("Error when sending IBB init stanza: %s", error->message);
-
- g_error_free (error);
- g_object_unref (msg);
- return FALSE;
- }
+ wocky_porter_send (priv->porter, msg);
g_object_unref (msg);
diff --git a/lib/gibber/gibber-bytestream-ibb.h b/lib/gibber/gibber-bytestream-ibb.h
index f8c75559..507562c1 100644
--- a/lib/gibber/gibber-bytestream-ibb.h
+++ b/lib/gibber/gibber-bytestream-ibb.h
@@ -22,7 +22,7 @@
#include <glib-object.h>
#include "gibber-bytestream-iface.h"
-#include "gibber-xmpp-stanza.h"
+#include <wocky/wocky-stanza.h>
G_BEGIN_DECLS
diff --git a/lib/gibber/gibber-bytestream-iface.h b/lib/gibber/gibber-bytestream-iface.h
index 88a66df2..5f17ba70 100644
--- a/lib/gibber/gibber-bytestream-iface.h
+++ b/lib/gibber/gibber-bytestream-iface.h
@@ -22,7 +22,7 @@
#include <glib-object.h>
-#include "gibber-xmpp-stanza.h"
+#include <wocky/wocky-stanza.h>
G_BEGIN_DECLS
@@ -44,7 +44,7 @@ typedef enum
} GibberBytestreamState;
typedef void (* GibberBytestreamAugmentSiAcceptReply) (
- GibberXmppNode *si, gpointer user_data);
+ WockyNode *si, gpointer user_data);
typedef struct _GibberBytestreamIface GibberBytestreamIface;
typedef struct _GibberBytestreamIfaceClass GibberBytestreamIfaceClass;
diff --git a/lib/gibber/gibber-bytestream-oob.c b/lib/gibber/gibber-bytestream-oob.c
index ccd50bd8..805f397a 100644
--- a/lib/gibber/gibber-bytestream-oob.c
+++ b/lib/gibber/gibber-bytestream-oob.c
@@ -28,14 +28,15 @@
#include <glib.h>
+#include <wocky/wocky-stanza.h>
+#include <wocky/wocky-porter.h>
+#include <wocky/wocky-meta-porter.h>
+
#include "gibber-sockets.h"
#include "gibber-bytestream-iface.h"
-#include "gibber-xmpp-connection.h"
-#include "gibber-xmpp-stanza.h"
#include "gibber-namespaces.h"
#include "gibber-linklocal-transport.h"
#include "gibber-xmpp-error.h"
-#include "gibber-iq-helper.h"
#include "gibber-util.h"
#include "gibber-transport.h"
#include "gibber-fd-transport.h"
@@ -57,7 +58,8 @@ G_DEFINE_TYPE_WITH_CODE (GibberBytestreamOOB, gibber_bytestream_oob,
/* properties */
enum
{
- PROP_XMPP_CONNECTION = 1,
+ PROP_PORTER = 1,
+ PROP_CONTACT,
PROP_SELF_ID,
PROP_PEER_ID,
PROP_STREAM_ID,
@@ -71,7 +73,8 @@ enum
typedef struct _GibberBytestreamIBBPrivate GibberBytestreamOOBPrivate;
struct _GibberBytestreamIBBPrivate
{
- GibberXmppConnection *xmpp_connection;
+ WockyPorter *porter;
+ WockyContact *contact;
gchar *self_id;
gchar *peer_id;
gchar *stream_id;
@@ -79,8 +82,10 @@ struct _GibberBytestreamIBBPrivate
/* ID of the OOB opening stanza. We'll reply to
* it when we the bytestream is closed */
gchar *stream_open_id;
+ guint stanza_received_id;
GibberBytestreamState state;
gchar *host;
+ gchar *url;
/* Are we the recipient of this bytestream?
* If not we are the sender */
@@ -113,16 +118,16 @@ gibber_bytestream_oob_init (GibberBytestreamOOB *self)
priv->dispose_has_run = FALSE;
}
-static GibberXmppStanza *
+static WockyStanza *
make_iq_oob_sucess_response (const gchar *from,
const gchar *to,
const gchar *id)
{
- return gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_RESULT,
+ return wocky_stanza_build (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_RESULT,
from, to,
- GIBBER_NODE_ATTRIBUTE, "id", id,
- GIBBER_STANZA_END);
+ WOCKY_NODE_ATTRIBUTE, "id", id,
+ NULL);
}
static void
@@ -235,53 +240,29 @@ set_transport (GibberBytestreamOOB *self,
}
static void
-connect_to_url (GibberBytestreamOOB *self,
- const gchar *url)
+connect_to_url (GibberBytestreamOOB *self)
{
GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
GibberLLTransport *ll_transport;
+ GSocketConnection *conn;
+ GSocketAddress *socket_address = NULL;
gchar **tokens;
union {
struct sockaddr_storage storage;
struct sockaddr_in in;
} addr;
- socklen_t len;
- const gchar *host, *port;
+ const gchar *port;
gint portnum = 0;
-
- if (!g_str_has_prefix (url, "x-tcp://"))
- {
- GError e = { GIBBER_XMPP_ERROR, XMPP_ERROR_ITEM_NOT_FOUND,
- "URL is not a TCP URL" };
-
- DEBUG ("URL is not a TCP URL: %s. Close the bytestream", url);
- gibber_bytestream_iface_close (GIBBER_BYTESTREAM_IFACE (self), &e);
- return;
- }
+ const gchar *url;
+ GError *error = NULL;
/* TODO: if we want to support IPv6 literals, we have to remove
* [] around the address */
- url += strlen ("x-tcp://");
+ url = priv->url + strlen ("x-tcp://");
tokens = g_strsplit (url, ":", 2);
- host = tokens[0];
port = tokens[1];
- /* FIXME, this is very specific to salut and won't work with a normal xmpp
- * client */
- if (!gibber_transport_get_peeraddr (
- GIBBER_TRANSPORT (priv->xmpp_connection->transport),
- &addr.storage, &len))
- {
- /* I'm too lazy to create more specific errors for this as it should
- * never happen while using salut anyway.. */
- GError e = { GIBBER_XMPP_ERROR, XMPP_ERROR_ITEM_NOT_FOUND,
- "Unsable get socket address for the control connection" };
- DEBUG ("Could not get socket address for the control connection" );
- gibber_bytestream_iface_close (GIBBER_BYTESTREAM_IFACE (self), &e);
- goto out;
- }
-
if (port != NULL)
portnum = atoi (port);
@@ -296,6 +277,38 @@ connect_to_url (GibberBytestreamOOB *self,
goto out;
}
+ conn = wocky_meta_porter_borrow_connection (WOCKY_META_PORTER (priv->porter),
+ WOCKY_LL_CONTACT (priv->contact));
+
+ if (conn != NULL)
+ socket_address = g_socket_connection_get_remote_address (conn, NULL);
+
+ if (conn == NULL || socket_address == NULL)
+ {
+ /* I'm too lazy to create more specific errors for this as it should
+ * never happen while using salut anyway.. */
+ GError e = { GIBBER_XMPP_ERROR, XMPP_ERROR_ITEM_NOT_FOUND,
+ "Unsable get socket address for the control connection" };
+ DEBUG ("Could not get socket address for the control connection" );
+ gibber_bytestream_iface_close (GIBBER_BYTESTREAM_IFACE (self), &e);
+ goto out;
+ }
+
+ if (!g_socket_address_to_native (G_SOCKET_ADDRESS (socket_address), &(addr.storage),
+ sizeof (addr.storage), &error))
+ {
+ GError e = { GIBBER_XMPP_ERROR, XMPP_ERROR_ITEM_NOT_FOUND,
+ "Failed to turn socket address into bytes" };
+ DEBUG ("Failed to get native socket address: %s", error->message);
+ gibber_bytestream_iface_close (GIBBER_BYTESTREAM_IFACE (self), &e);
+ g_clear_error (&error);
+ goto out;
+ }
+
+ /* FIXME: this is a hack until we get the normalization of v6-in-v4
+ * addresses in GLib. See bgo#646082 */
+ gibber_normalize_address (&(addr.storage));
+
addr.in.sin_port = g_htons ((guint16) portnum);
ll_transport = gibber_ll_transport_new ();
@@ -304,56 +317,97 @@ connect_to_url (GibberBytestreamOOB *self,
g_object_unref (ll_transport);
out:
+ if (socket_address != NULL)
+ g_object_unref (socket_address);
+
g_strfreev (tokens);
}
+static void
+opened_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ WockyMetaPorter *porter = WOCKY_META_PORTER (source_object);
+ GibberBytestreamOOB *self = user_data;
+ GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
+ GError *error = NULL;
+
+ if (!wocky_meta_porter_open_finish (porter, result, &error))
+ {
+ DEBUG ("failed to open connection to contact");
+ g_clear_error (&error);
+ }
+ else
+ {
+ connect_to_url (self);
+ }
+
+ g_free (priv->url);
+
+ wocky_meta_porter_unhold (porter, priv->contact);
+}
+
static gboolean
parse_oob_init_iq (GibberBytestreamOOB *self,
- GibberXmppStanza *stanza)
+ WockyStanza *stanza)
{
GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
- GibberXmppNode *query_node, *url_node;
- GibberStanzaType type;
- GibberStanzaSubType sub_type;
+ WockyNode *query_node, *url_node;
+ WockyStanzaType type;
+ WockyStanzaSubType sub_type;
const gchar *stream_id, *url;
WockyNode *node = wocky_stanza_get_top_node (stanza);
- gibber_xmpp_stanza_get_type_info (stanza, &type, &sub_type);
+ wocky_stanza_get_type_info (stanza, &type, &sub_type);
- if (type != GIBBER_STANZA_TYPE_IQ ||
- sub_type != GIBBER_STANZA_SUB_TYPE_SET)
+ if (type != WOCKY_STANZA_TYPE_IQ ||
+ sub_type != WOCKY_STANZA_SUB_TYPE_SET)
return FALSE;
- query_node = gibber_xmpp_node_get_child_ns (node, "query",
+ query_node = wocky_node_get_child_ns (node, "query",
GIBBER_XMPP_NS_IQ_OOB);
if (query_node == NULL)
return FALSE;
- stream_id = gibber_xmpp_node_get_attribute (query_node, "sid");
+ stream_id = wocky_node_get_attribute (query_node, "sid");
if (stream_id == NULL || strcmp (stream_id, priv->stream_id) != 0)
return FALSE;
- url_node = gibber_xmpp_node_get_child (query_node, "url");
+ url_node = wocky_node_get_child (query_node, "url");
if (url_node == NULL)
return FALSE;
url = url_node->content;
priv->recipient = TRUE;
- priv->stream_open_id = g_strdup (gibber_xmpp_node_get_attribute (
+ priv->stream_open_id = g_strdup (wocky_node_get_attribute (
node, "id"));
- connect_to_url (self, url);
+ if (!g_str_has_prefix (url, "x-tcp://"))
+ {
+ GError e = { GIBBER_XMPP_ERROR, XMPP_ERROR_ITEM_NOT_FOUND,
+ "URL is not a TCP URL" };
+
+ DEBUG ("URL is not a TCP URL: %s. Close the bytestream", priv->url);
+ gibber_bytestream_iface_close (GIBBER_BYTESTREAM_IFACE (self), &e);
+ return TRUE;
+ }
+
+ priv->url = g_strdup (url);
+
+ wocky_meta_porter_open_async (WOCKY_META_PORTER (priv->porter),
+ WOCKY_LL_CONTACT (priv->contact), NULL, opened_cb, self);
return TRUE;
}
static gboolean
parse_oob_iq_result (GibberBytestreamOOB *self,
- GibberXmppStanza *stanza)
+ WockyStanza *stanza)
{
GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
- GibberStanzaType type;
- GibberStanzaSubType sub_type;
+ WockyStanzaType type;
+ WockyStanzaSubType sub_type;
const gchar *id;
WockyNode *node = wocky_stanza_get_top_node (stanza);
@@ -361,14 +415,14 @@ parse_oob_iq_result (GibberBytestreamOOB *self,
/* Only the sender have to wait for the IQ reply */
return FALSE;
- gibber_xmpp_stanza_get_type_info (stanza, &type, &sub_type);
+ wocky_stanza_get_type_info (stanza, &type, &sub_type);
- if (type != GIBBER_STANZA_TYPE_IQ ||
- sub_type != GIBBER_STANZA_SUB_TYPE_RESULT)
+ if (type != WOCKY_STANZA_TYPE_IQ ||
+ sub_type != WOCKY_STANZA_SUB_TYPE_RESULT)
return FALSE;
/* FIXME: we should check if it's the right sender */
- id = gibber_xmpp_node_get_attribute (node, "id");
+ id = wocky_node_get_attribute (node, "id");
if (id == NULL || strcmp (id, priv->stream_open_id) != 0)
return FALSE;
@@ -378,58 +432,30 @@ parse_oob_iq_result (GibberBytestreamOOB *self,
return TRUE;
}
-static void
-xmpp_connection_received_stanza_cb (GibberXmppConnection *conn,
- GibberXmppStanza *stanza,
- gpointer user_data)
+static gboolean
+received_stanza_cb (WockyPorter *porter,
+ WockyStanza *stanza,
+ gpointer user_data)
{
GibberBytestreamOOB *self = (GibberBytestreamOOB *) user_data;
WockyNode *node = wocky_stanza_get_top_node (stanza);
const gchar *from;
/* discard invalid stanza */
- from = gibber_xmpp_node_get_attribute (node, "from");
+ from = wocky_node_get_attribute (node, "from");
if (from == NULL)
{
DEBUG ("got a message without a from field");
- return;
+ return FALSE;
}
if (parse_oob_init_iq (self, stanza))
- return;
+ return TRUE;
if (parse_oob_iq_result (self, stanza))
- return;
-}
+ return TRUE;
-static void
-xmpp_connection_stream_closed_cb (GibberXmppConnection *connection,
- gpointer userdata)
-{
- GibberBytestreamOOB *self = GIBBER_BYTESTREAM_OOB (userdata);
- DEBUG ("XMPP connection: stream closed. Close the OOB bytestream");
- g_object_set (self, "state", GIBBER_BYTESTREAM_STATE_CLOSING, NULL);
- bytestream_closed (self);
-}
-
-static void
-xmpp_connection_transport_disconnected_cb (GibberLLTransport *transport,
- gpointer userdata)
-{
- GibberBytestreamOOB *self = GIBBER_BYTESTREAM_OOB (userdata);
- DEBUG ("XMPP connection transport closed. Close the OOB bytestream");
- g_object_set (self, "state", GIBBER_BYTESTREAM_STATE_CLOSING, NULL);
- bytestream_closed (self);
-}
-
-static void
-xmpp_connection_parse_error_cb (GibberXmppConnection *connection,
- gpointer userdata)
-{
- GibberBytestreamOOB *self = GIBBER_BYTESTREAM_OOB (userdata);
- DEBUG ("XMPP connection: parse error. Close the OOB bytestream");
- g_object_set (self, "state", GIBBER_BYTESTREAM_STATE_CLOSING, NULL);
- bytestream_closed (self);
+ return FALSE;
}
static void
@@ -461,13 +487,18 @@ gibber_bytestream_oob_dispose (GObject *object)
priv->listener = NULL;
}
- if (priv->xmpp_connection != NULL)
+ if (priv->porter != NULL)
{
- g_signal_handlers_disconnect_matched (priv->xmpp_connection->transport,
- G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
- g_signal_handlers_disconnect_matched (priv->xmpp_connection,
- G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
- g_object_unref (priv->xmpp_connection);
+ wocky_porter_unregister_handler (priv->porter, priv->stanza_received_id);
+ priv->stanza_received_id = 0;
+ g_object_unref (priv->porter);
+ priv->porter = NULL;
+ }
+
+ if (priv->contact != NULL)
+ {
+ g_object_unref (priv->contact);
+ priv->contact = NULL;
}
G_OBJECT_CLASS (gibber_bytestream_oob_parent_class)->dispose (object);
@@ -500,8 +531,11 @@ gibber_bytestream_oob_get_property (GObject *object,
switch (property_id)
{
- case PROP_XMPP_CONNECTION:
- g_value_set_object (value, priv->xmpp_connection);
+ case PROP_PORTER:
+ g_value_set_object (value, priv->porter);
+ break;
+ case PROP_CONTACT:
+ g_value_set_object (value, priv->contact);
break;
case PROP_SELF_ID:
g_value_set_string (value, priv->self_id);
@@ -531,6 +565,21 @@ gibber_bytestream_oob_get_property (GObject *object,
}
static void
+make_porter_connections (GibberBytestreamOOB *self)
+{
+ GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
+ gchar *jid;
+
+ jid = wocky_contact_dup_jid (priv->contact);
+
+ priv->stanza_received_id = wocky_porter_register_handler_from (priv->porter,
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_TYPE_NONE, jid,
+ WOCKY_PORTER_HANDLER_PRIORITY_NORMAL, received_stanza_cb, self, NULL);
+
+ g_free (jid);
+}
+
+static void
gibber_bytestream_oob_set_property (GObject *object,
guint property_id,
const GValue *value,
@@ -541,17 +590,11 @@ gibber_bytestream_oob_set_property (GObject *object,
switch (property_id)
{
- case PROP_XMPP_CONNECTION:
- priv->xmpp_connection = g_value_get_object (value);
- g_signal_connect (priv->xmpp_connection, "received-stanza",
- G_CALLBACK (xmpp_connection_received_stanza_cb), self);
- g_signal_connect (priv->xmpp_connection, "stream-closed",
- G_CALLBACK (xmpp_connection_stream_closed_cb), self);
- g_signal_connect (priv->xmpp_connection->transport, "disconnected",
- G_CALLBACK (xmpp_connection_transport_disconnected_cb), self);
- g_signal_connect (priv->xmpp_connection, "parse-error",
- G_CALLBACK (xmpp_connection_parse_error_cb), self);
- g_object_ref (priv->xmpp_connection);
+ case PROP_PORTER:
+ priv->porter = g_value_dup_object (value);
+ break;
+ case PROP_CONTACT:
+ priv->contact = g_value_dup_object (value);
break;
case PROP_SELF_ID:
g_free (priv->self_id);
@@ -602,12 +645,27 @@ gibber_bytestream_oob_constructor (GType type,
g_assert (priv->self_id != NULL);
g_assert (priv->peer_id != NULL);
g_assert (priv->stream_id != NULL);
- g_assert (priv->xmpp_connection != NULL);
+ g_assert (priv->porter != NULL);
+ g_assert (priv->contact != NULL);
return obj;
}
static void
+gibber_bytestream_oob_constructed (GObject *obj)
+{
+ GibberBytestreamOOB *self = GIBBER_BYTESTREAM_OOB (obj);
+ GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
+
+ if (G_OBJECT_CLASS (gibber_bytestream_oob_parent_class)->constructed != NULL)
+ G_OBJECT_CLASS (gibber_bytestream_oob_parent_class)->constructed (obj);
+
+ if (priv->porter != NULL && priv->contact != NULL)
+ make_porter_connections (self);
+}
+
+
+static void
gibber_bytestream_oob_class_init (
GibberBytestreamOOBClass *gibber_bytestream_oob_class)
{
@@ -623,6 +681,7 @@ gibber_bytestream_oob_class_init (
object_class->get_property = gibber_bytestream_oob_get_property;
object_class->set_property = gibber_bytestream_oob_set_property;
object_class->constructor = gibber_bytestream_oob_constructor;
+ object_class->constructed = gibber_bytestream_oob_constructed;
g_object_class_override_property (object_class, PROP_SELF_ID,
"self-id");
@@ -636,14 +695,25 @@ gibber_bytestream_oob_class_init (
"protocol");
param_spec = g_param_spec_object (
- "xmpp-connection",
- "GibberXmppConnection object",
- "Gibber XMPP connection object used for communication by this "
+ "porter",
+ "WockyPorter object",
+ "Wocky porter object used for communication by this "
"bytestream if it's a private one",
- GIBBER_TYPE_XMPP_CONNECTION,
+ WOCKY_TYPE_PORTER,
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_XMPP_CONNECTION,
+ g_object_class_install_property (object_class, PROP_PORTER,
+ param_spec);
+
+ param_spec = g_param_spec_object (
+ "contact",
+ "WockyContact object",
+ "Contact object used for communication by this "
+ "bytestream if it's a private one",
+ WOCKY_TYPE_CONTACT,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (object_class, PROP_CONTACT,
param_spec);
param_spec = g_param_spec_string (
@@ -714,31 +784,31 @@ gibber_bytestream_oob_send (GibberBytestreamIface *bytestream,
return TRUE;
}
-static GibberXmppStanza *
+static WockyStanza *
create_si_accept_iq (GibberBytestreamOOB *self)
{
GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
- return gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_RESULT,
- priv->self_id, priv->peer_id,
- GIBBER_NODE_ATTRIBUTE, "id", priv->stream_init_id,
- GIBBER_NODE, "si",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_SI,
- GIBBER_NODE, "feature",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_FEATURENEG,
- GIBBER_NODE, "x",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_DATA,
- GIBBER_NODE_ATTRIBUTE, "type", "submit",
- GIBBER_NODE, "field",
- GIBBER_NODE_ATTRIBUTE, "var", "stream-method",
- GIBBER_NODE, "value",
- GIBBER_NODE_TEXT, GIBBER_XMPP_NS_IQ_OOB,
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_NODE_END, GIBBER_STANZA_END);
+ return wocky_stanza_build_to_contact (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_RESULT,
+ priv->self_id, priv->contact,
+ '@', "id", priv->stream_init_id,
+ '(', "si",
+ ':', GIBBER_XMPP_NS_SI,
+ '(', "feature",
+ ':', GIBBER_XMPP_NS_FEATURENEG,
+ '(', "x",
+ ':', GIBBER_XMPP_NS_DATA,
+ '@', "type", "submit",
+ '(', "field",
+ '@', "var", "stream-method",
+ '(', "value",
+ '$', GIBBER_XMPP_NS_IQ_OOB,
+ ')',
+ ')',
+ ')',
+ ')',
+ ')', NULL);
}
/*
@@ -753,9 +823,9 @@ gibber_bytestream_oob_accept (GibberBytestreamIface *bytestream,
{
GibberBytestreamOOB *self = GIBBER_BYTESTREAM_OOB (bytestream);
GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
WockyNode *node;
- GibberXmppNode *si;
+ WockyNode *si;
if (priv->state != GIBBER_BYTESTREAM_STATE_LOCAL_PENDING)
{
@@ -766,7 +836,7 @@ gibber_bytestream_oob_accept (GibberBytestreamIface *bytestream,
stanza = create_si_accept_iq (self);
node = wocky_stanza_get_top_node (stanza);
- si = gibber_xmpp_node_get_child_ns (node, "si", GIBBER_XMPP_NS_SI);
+ si = wocky_node_get_child_ns (node, "si", GIBBER_XMPP_NS_SI);
g_assert (si != NULL);
if (func != NULL)
@@ -775,7 +845,7 @@ gibber_bytestream_oob_accept (GibberBytestreamIface *bytestream,
func (si, user_data);
}
- gibber_xmpp_connection_send (priv->xmpp_connection, stanza, NULL);
+ wocky_porter_send (priv->porter, stanza);
DEBUG ("stream is now accepted");
g_object_set (self, "state", GIBBER_BYTESTREAM_STATE_ACCEPTED, NULL);
@@ -789,27 +859,18 @@ bytestream_closed (GibberBytestreamOOB *self)
if (priv->recipient)
{
- /* We are the recipient and so have to send the reply
- * to the OOB opening IQ */
- if (priv->xmpp_connection->stream_flags ==
- GIBBER_XMPP_CONNECTION_STREAM_FULLY_OPEN)
- {
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
- /* As described in the XEP, we send result IQ when we have
- * finished to use the OOB */
- stanza = make_iq_oob_sucess_response (priv->self_id,
- priv->peer_id, priv->stream_open_id);
+ /* As described in the XEP, we send result IQ when we have
+ * finished to use the OOB */
+ stanza = make_iq_oob_sucess_response (priv->self_id,
+ priv->peer_id, priv->stream_open_id);
+ wocky_stanza_set_to_contact (stanza, priv->contact);
- DEBUG ("send OOB close stanza");
+ DEBUG ("send OOB close stanza");
- gibber_xmpp_connection_send (priv->xmpp_connection, stanza, NULL);
- g_object_unref (stanza);
- }
- else
- {
- DEBUG ("XMPP connection is closed. Don't send OOB close stanza");
- }
+ wocky_porter_send (priv->porter, stanza);
+ g_object_unref (stanza);
}
else
{
@@ -833,16 +894,16 @@ gibber_bytestream_oob_decline (GibberBytestreamOOB *self,
GError *error)
{
GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
WockyNode *node;
g_return_if_fail (priv->state == GIBBER_BYTESTREAM_STATE_LOCAL_PENDING);
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_ERROR,
- priv->self_id, priv->peer_id,
- GIBBER_NODE_ATTRIBUTE, "id", priv->stream_init_id,
- GIBBER_STANZA_END);
+ stanza = wocky_stanza_build_to_contact (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_ERROR,
+ priv->self_id, priv->contact,
+ '@', "id", priv->stream_init_id,
+ NULL);
node = wocky_stanza_get_top_node (stanza);
if (error != NULL && error->domain == GIBBER_XMPP_ERROR)
@@ -855,7 +916,7 @@ gibber_bytestream_oob_decline (GibberBytestreamOOB *self,
"Offer Declined");
}
- gibber_xmpp_connection_send (priv->xmpp_connection, stanza, NULL);
+ wocky_porter_send (priv->porter, stanza);
g_object_unref (stanza);
}
@@ -903,22 +964,22 @@ gibber_bytestream_oob_close (GibberBytestreamIface *bytestream,
TRUE);
}
-static GibberXmppStanza *
+static WockyStanza *
make_oob_init_iq (const gchar *from,
const gchar *to,
const gchar *stream_id,
const gchar *url)
{
- return gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_SET,
+ return wocky_stanza_build (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_SET,
from, to,
- GIBBER_NODE, "query",
- GIBBER_NODE_XMLNS, GIBBER_XMPP_NS_IQ_OOB,
- GIBBER_NODE_ATTRIBUTE, "sid", stream_id,
- GIBBER_NODE, "url",
- GIBBER_NODE_TEXT, url,
- GIBBER_NODE_END,
- GIBBER_NODE_END, GIBBER_STANZA_END);
+ '(', "query",
+ ':', GIBBER_XMPP_NS_IQ_OOB,
+ '@', "sid", stream_id,
+ '(', "url",
+ '$', url,
+ ')',
+ ')', NULL);
}
static void
@@ -953,9 +1014,8 @@ gibber_bytestream_oob_initiate (GibberBytestreamIface *bytestream)
{
GibberBytestreamOOB *self = GIBBER_BYTESTREAM_OOB (bytestream);
GibberBytestreamOOBPrivate *priv = GIBBER_BYTESTREAM_OOB_GET_PRIVATE (self);
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
WockyNode *node;
- GError *error = NULL;
const gchar *id;
int port;
gchar *url;
@@ -988,25 +1048,25 @@ gibber_bytestream_oob_initiate (GibberBytestreamIface *bytestream)
stanza = make_oob_init_iq (priv->self_id, priv->peer_id,
priv->stream_id, url);
g_free (url);
+ wocky_stanza_set_to_contact (stanza, priv->contact);
node = wocky_stanza_get_top_node (stanza);
- id = gibber_xmpp_node_get_attribute (node, "id");
+ id = wocky_node_get_attribute (node, "id");
if (id == NULL)
{
- priv->stream_open_id = gibber_xmpp_connection_new_id (
- priv->xmpp_connection);
- gibber_xmpp_node_set_attribute (node, "id",
- priv->stream_open_id);
+ /* let the porter generate the IQ id for us */
+ wocky_porter_send_iq_async (priv->porter, stanza,
+ NULL, NULL, NULL);
+
+ priv->stream_open_id = g_strdup (
+ wocky_node_get_attribute (node, "id"));
}
else
{
+ /* save the stream open ID */
priv->stream_open_id = g_strdup (id);
- }
- if (!gibber_xmpp_connection_send (priv->xmpp_connection, stanza, &error))
- {
- DEBUG ("can't send OOB init stanza: %s", error->message);
- return FALSE;
+ wocky_porter_send (priv->porter, stanza);
}
g_object_unref (stanza);
diff --git a/lib/gibber/gibber-debug.c b/lib/gibber/gibber-debug.c
index e7ce58cd..47cc8742 100644
--- a/lib/gibber/gibber-debug.c
+++ b/lib/gibber/gibber-debug.c
@@ -70,7 +70,7 @@ void gibber_debug (DebugFlags flag,
void
gibber_debug_stanza (DebugFlags flag,
- GibberXmppStanza *stanza,
+ WockyStanza *stanza,
const gchar *format,
...)
{
@@ -87,7 +87,7 @@ gibber_debug_stanza (DebugFlags flag,
msg = g_strdup_vprintf (format, args);
va_end (args);
- node_str = gibber_xmpp_node_to_string (node);
+ node_str = wocky_node_to_string (node);
g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s\n%s", msg, node_str);
diff --git a/lib/gibber/gibber-debug.h b/lib/gibber/gibber-debug.h
index 9cd9f1be..aeef49af 100644
--- a/lib/gibber/gibber-debug.h
+++ b/lib/gibber/gibber-debug.h
@@ -6,7 +6,7 @@
#include <glib.h>
-#include "gibber-xmpp-stanza.h"
+#include <wocky/wocky-stanza.h>
G_BEGIN_DECLS
@@ -34,7 +34,7 @@ void gibber_debug_set_flags (DebugFlags flags);
gboolean gibber_debug_flag_is_set (DebugFlags flag);
void gibber_debug (DebugFlags flag, const gchar *format, ...)
G_GNUC_PRINTF (2, 3);
-void gibber_debug_stanza (DebugFlags flag, GibberXmppStanza *stanza,
+void gibber_debug_stanza (DebugFlags flag, WockyStanza *stanza,
const gchar *format, ...)
G_GNUC_PRINTF (3, 4);
diff --git a/lib/gibber/gibber-file-transfer.c b/lib/gibber/gibber-file-transfer.c
index 5fd49a57..8036df6f 100644
--- a/lib/gibber/gibber-file-transfer.c
+++ b/lib/gibber/gibber-file-transfer.c
@@ -55,7 +55,8 @@ enum
PROP_PEER_ID,
PROP_FILENAME,
PROP_DIRECTION,
- PROP_CONNECTION,
+ PROP_PORTER,
+ PROP_CONTACT,
PROP_DESCRIPTION,
PROP_CONTENT_TYPE,
LAST_PROPERTY
@@ -64,7 +65,10 @@ enum
/* private structure */
struct _GibberFileTransferPrivate
{
- GibberXmppConnection *connection;
+ WockyPorter *porter;
+ WockyContact *contact;
+
+ guint stanza_id;
guint64 size;
};
@@ -114,8 +118,11 @@ gibber_file_transfer_get_property (GObject *object,
case PROP_DIRECTION:
g_value_set_enum (value, self->direction);
break;
- case PROP_CONNECTION:
- g_value_set_object (value, self->priv->connection);
+ case PROP_PORTER:
+ g_value_set_object (value, self->priv->porter);
+ break;
+ case PROP_CONTACT:
+ g_value_set_object (value, self->priv->contact);
break;
case PROP_DESCRIPTION:
g_value_set_string (value, self->description);
@@ -137,8 +144,8 @@ generate_id (void)
return g_strdup_printf ("gibber-file-transfer-%d", id_num++);
}
-static void received_stanza_cb (GibberXmppConnection *conn,
- GibberXmppStanza *stanza, gpointer user_data);
+static gboolean received_stanza_cb (WockyPorter *porter,
+ WockyStanza *stanza, gpointer user_data);
static void
gibber_file_transfer_set_property (GObject *object,
@@ -171,11 +178,19 @@ gibber_file_transfer_set_property (GObject *object,
case PROP_DIRECTION:
self->direction = g_value_get_enum (value);
break;
- case PROP_CONNECTION:
- self->priv->connection = g_value_dup_object (value);
- if (self->priv->connection != NULL)
- g_signal_connect (self->priv->connection, "received-stanza",
- G_CALLBACK (received_stanza_cb), self);
+ case PROP_PORTER:
+ {
+ self->priv->porter = g_value_dup_object (value);
+
+ self->priv->stanza_id =
+ wocky_porter_register_handler_from_anyone (self->priv->porter,
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_NONE,
+ WOCKY_PORTER_HANDLER_PRIORITY_NORMAL, received_stanza_cb,
+ self, NULL);
+ }
+ break;
+ case PROP_CONTACT:
+ self->priv->contact = g_value_dup_object (value);
break;
case PROP_DESCRIPTION:
self->description = g_value_dup_string (value);
@@ -241,12 +256,19 @@ gibber_file_transfer_class_init (GibberFileTransferClass *gibber_file_transfer_c
G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB);
g_object_class_install_property (object_class, PROP_DIRECTION, param_spec);
- param_spec = g_param_spec_object ("connection",
- "GibberXmppConnection object", "Gibber Connection used to send stanzas",
- GIBBER_TYPE_XMPP_CONNECTION,
+ param_spec = g_param_spec_object ("porter",
+ "WockyPorter object", "Wocky porter used to send stanzas",
+ WOCKY_TYPE_PORTER,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
+ G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_PORTER, param_spec);
+
+ param_spec = g_param_spec_object ("contact",
+ "WockyContact object", "Wocky Contact",
+ WOCKY_TYPE_CONTACT,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB);
- g_object_class_install_property (object_class, PROP_CONNECTION, param_spec);
+ g_object_class_install_property (object_class, PROP_CONTACT, param_spec);
param_spec = g_param_spec_string ("description",
"Description",
@@ -303,12 +325,18 @@ gibber_file_transfer_dispose (GObject *object)
{
GibberFileTransfer *self = GIBBER_FILE_TRANSFER (object);
- if (self->priv->connection != NULL)
+ if (self->priv->porter != NULL)
+ {
+ wocky_porter_unregister_handler (self->priv->porter,
+ self->priv->stanza_id);
+ g_object_unref (self->priv->porter);
+ self->priv->porter = NULL;
+ }
+
+ if (self->priv->contact != NULL)
{
- g_signal_handlers_disconnect_matched (self->priv->connection,
- G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
- g_object_unref (self->priv->connection);
- self->priv->connection = NULL;
+ g_object_unref (self->priv->contact);
+ self->priv->contact = NULL;
}
G_OBJECT_CLASS (gibber_file_transfer_parent_class)->dispose (object);
@@ -329,22 +357,27 @@ gibber_file_transfer_finalize (GObject *object)
G_OBJECT_CLASS (gibber_file_transfer_parent_class)->finalize (object);
}
-static void
-received_stanza_cb (GibberXmppConnection *conn,
- GibberXmppStanza *stanza,
+static gboolean
+received_stanza_cb (WockyPorter *porter,
+ WockyStanza *stanza,
gpointer user_data)
{
GibberFileTransfer *self = user_data;
const gchar *id;
- id = gibber_xmpp_node_get_attribute (wocky_stanza_get_top_node (stanza),
+ id = wocky_node_get_attribute (wocky_stanza_get_top_node (stanza),
"id");
if (id != NULL && strcmp (id, self->id) == 0)
- GIBBER_FILE_TRANSFER_GET_CLASS (self)->received_stanza (self, stanza);
+ {
+ GIBBER_FILE_TRANSFER_GET_CLASS (self)->received_stanza (self, stanza);
+ return TRUE;
+ }
+
+ return FALSE;
}
gboolean
-gibber_file_transfer_is_file_offer (GibberXmppStanza *stanza)
+gibber_file_transfer_is_file_offer (WockyStanza *stanza)
{
/* FIXME put the known backends in a list and stop when the first one
* can handle the stanza */
@@ -353,8 +386,9 @@ gibber_file_transfer_is_file_offer (GibberXmppStanza *stanza)
GibberFileTransfer *
gibber_file_transfer_new_from_stanza_with_from (
- GibberXmppStanza *stanza,
- GibberXmppConnection *connection,
+ WockyStanza *stanza,
+ WockyPorter *porter,
+ WockyContact *contact,
const gchar *from,
GError **error)
{
@@ -362,8 +396,8 @@ gibber_file_transfer_new_from_stanza_with_from (
* can handle the stanza */
GibberFileTransfer *ft;
- ft = gibber_oob_file_transfer_new_from_stanza_with_from (stanza, connection,
- from, error);
+ ft = gibber_oob_file_transfer_new_from_stanza_with_from (stanza, porter,
+ contact, from, error);
/* it's not possible to have an outgoing transfer created from
* a stanza */
g_assert (ft == NULL ||
@@ -373,16 +407,17 @@ gibber_file_transfer_new_from_stanza_with_from (
}
GibberFileTransfer *
-gibber_file_transfer_new_from_stanza (GibberXmppStanza *stanza,
- GibberXmppConnection *connection,
+gibber_file_transfer_new_from_stanza (WockyStanza *stanza,
+ WockyPorter *porter,
+ WockyContact *contact,
GError **error)
{
const gchar *from;
from = wocky_node_get_attribute (wocky_stanza_get_top_node (stanza), "from");
- return gibber_file_transfer_new_from_stanza_with_from (stanza, connection,
- from, error);
+ return gibber_file_transfer_new_from_stanza_with_from (stanza, porter,
+ contact, from, error);
}
void
@@ -455,17 +490,13 @@ gibber_file_transfer_get_size (GibberFileTransfer *self)
gboolean
gibber_file_transfer_send_stanza (GibberFileTransfer *self,
- GibberXmppStanza *stanza,
+ WockyStanza *stanza,
GError **error)
{
- if (self->priv->connection->transport == NULL ||
- self->priv->connection->transport->state != GIBBER_TRANSPORT_CONNECTED)
- {
- g_set_error (error, GIBBER_FILE_TRANSFER_ERROR,
- GIBBER_FILE_TRANSFER_ERROR_NOT_CONNECTED,
- "XMPP connection not connected");
- return FALSE;
- }
+ if (wocky_stanza_get_to_contact (stanza) == NULL)
+ wocky_stanza_set_to_contact (stanza, self->priv->contact);
+
+ wocky_porter_send (self->priv->porter, stanza);
- return gibber_xmpp_connection_send (self->priv->connection, stanza, error);
+ return TRUE;
}
diff --git a/lib/gibber/gibber-file-transfer.h b/lib/gibber/gibber-file-transfer.h
index 65d985b9..e86d4cba 100644
--- a/lib/gibber/gibber-file-transfer.h
+++ b/lib/gibber/gibber-file-transfer.h
@@ -22,8 +22,8 @@
#include <glib.h>
#include <glib-object.h>
-#include "gibber-xmpp-stanza.h"
-#include "gibber-xmpp-connection.h"
+#include <wocky/wocky-stanza.h>
+#include <wocky/wocky-porter.h>
G_BEGIN_DECLS
@@ -59,7 +59,7 @@ struct _GibberFileTransferClass
void (*cancel) (GibberFileTransfer *ft,
guint error_code);
void (*received_stanza) (GibberFileTransfer *ft,
- GibberXmppStanza *stanza);
+ WockyStanza *stanza);
};
typedef struct _GibberFileTransferPrivate GibberFileTransferPrivate;
@@ -103,13 +103,13 @@ GType gibber_file_transfer_get_type (void);
GibberFileTransferClass))
-gboolean gibber_file_transfer_is_file_offer (GibberXmppStanza *stanza);
+gboolean gibber_file_transfer_is_file_offer (WockyStanza *stanza);
GibberFileTransfer *gibber_file_transfer_new_from_stanza (
- GibberXmppStanza *stanza, GibberXmppConnection *connection,
+ WockyStanza *stanza, WockyPorter *porter, WockyContact *contact,
GError **error);
GibberFileTransfer *gibber_file_transfer_new_from_stanza_with_from (
- GibberXmppStanza *stanza, GibberXmppConnection *connection,
+ WockyStanza *stanza, WockyPorter *porter, WockyContact *contact,
const gchar *from, GError **error);
void gibber_file_transfer_offer (GibberFileTransfer *self);
@@ -121,7 +121,7 @@ void gibber_file_transfer_cancel (GibberFileTransfer *self, guint error_code);
/* FIXME move to a private header if gibber becomes a public library */
gboolean gibber_file_transfer_send_stanza (GibberFileTransfer *self,
- GibberXmppStanza *stanza, GError **error);
+ WockyStanza *stanza, GError **error);
void gibber_file_transfer_emit_error (GibberFileTransfer *self, GError *error);
diff --git a/lib/gibber/gibber-iq-helper.c b/lib/gibber/gibber-iq-helper.c
deleted file mode 100644
index f96c74f8..00000000
--- a/lib/gibber/gibber-iq-helper.c
+++ /dev/null
@@ -1,403 +0,0 @@
-/*
- * gibber-iq-helper.c - Source for GibberIqHelper
- * Copyright (C) 2007 Collabora Ltd.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gibber-iq-helper.h"
-
-#include "gibber-xmpp-reader.h"
-#include "gibber-xmpp-writer.h"
-#include "gibber-transport.h"
-#include "gibber-xmpp-stanza.h"
-
-G_DEFINE_TYPE (GibberIqHelper, gibber_iq_helper, G_TYPE_OBJECT);
-
-enum
-{
- PROP_XMPP_CONNECTION = 1,
-};
-
-typedef struct _GibberIqHelperPrivate GibberIqHelperPrivate;
-
-struct _GibberIqHelperPrivate
-{
- GibberXmppConnection *xmpp_connection;
- GHashTable *id_handlers;
-
- gboolean dispose_has_run;
-};
-
-#define GIBBER_IQ_HELPER_GET_PRIVATE(obj) \
- ((GibberIqHelperPrivate *) ((GibberIqHelper *) obj)->priv)
-
-static void
-reply_handler_object_destroy_notify_cb (gpointer _data, GObject *object);
-
-typedef struct
-{
- GibberIqHelper *self;
- gchar *id;
- GibberIqHelperStanzaReplyFunc reply_func;
- GibberXmppStanza *sent_stanza;
- GObject *object;
- gpointer user_data;
-} ReplyHandlerData;
-
-static void
-free_reply_handler_data (ReplyHandlerData *data)
-{
- g_object_unref (data->sent_stanza);
- g_free (data->id);
-
- if (data->object != NULL)
- {
- g_object_weak_unref (data->object,
- reply_handler_object_destroy_notify_cb, data);
- }
-
- g_slice_free (ReplyHandlerData, data);
-}
-
-static void
-gibber_iq_helper_init (GibberIqHelper *self)
-{
- GibberIqHelperPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- GIBBER_TYPE_IQ_HELPER, GibberIqHelperPrivate);
-
- self->priv = priv;
-
- priv->id_handlers = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
- (GDestroyNotify) free_reply_handler_data);
-
- priv->dispose_has_run = FALSE;
-}
-
-static void
-xmpp_connection_received_stanza_cb (GibberXmppConnection *conn,
- GibberXmppStanza *stanza,
- gpointer user_data)
-{
- WockyNode *node = wocky_stanza_get_top_node (stanza);
- GibberIqHelper *self = GIBBER_IQ_HELPER (user_data);
- GibberIqHelperPrivate *priv = GIBBER_IQ_HELPER_GET_PRIVATE (self);
- const gchar *id;
- ReplyHandlerData *data;
-
- id = gibber_xmpp_node_get_attribute (node, "id");
- if (id == NULL)
- return;
-
- data = g_hash_table_lookup (priv->id_handlers, id);
- if (data == NULL)
- return;
-
- /* Reply have to be an iq stanza */
- if (strcmp (node->name, "iq"))
- return;
-
- /* Its subtype have to be "result" or "error" */
- if (strcmp (gibber_xmpp_node_get_attribute (node, "type"), "result")
- != 0 &&
- strcmp (gibber_xmpp_node_get_attribute (node, "type"), "error")
- != 0)
- return;
-
- /* the user callback may want to free the GibberIqHelper object. Delay this.
- */
- g_object_ref (self);
-
- data->reply_func (self, data->sent_stanza,
- stanza, data->object, data->user_data);
-
- g_hash_table_remove (priv->id_handlers, id);
-
- g_object_unref (self);
-}
-
-static GObject *
-gibber_iq_helper_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *obj;
- GibberIqHelper *self;
- GibberIqHelperPrivate *priv;
-
- obj = G_OBJECT_CLASS(gibber_iq_helper_parent_class)->
- constructor (type, n_props, props);
-
- self = GIBBER_IQ_HELPER (obj);
- priv = GIBBER_IQ_HELPER_GET_PRIVATE (self);
-
- g_assert (priv->xmpp_connection != NULL);
-
- g_signal_connect (priv->xmpp_connection, "received-stanza",
- G_CALLBACK (xmpp_connection_received_stanza_cb), obj);
-
- return obj;
-}
-
-static void
-gibber_iq_helper_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GibberIqHelper *self = GIBBER_IQ_HELPER (object);
- GibberIqHelperPrivate *priv = GIBBER_IQ_HELPER_GET_PRIVATE (self);
-
- switch (property_id)
- {
- case PROP_XMPP_CONNECTION:
- g_value_set_object (value, priv->xmpp_connection);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-gibber_iq_helper_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GibberIqHelper *self = GIBBER_IQ_HELPER (object);
- GibberIqHelperPrivate *priv = GIBBER_IQ_HELPER_GET_PRIVATE (self);
-
- switch (property_id)
- {
- case PROP_XMPP_CONNECTION:
- priv->xmpp_connection = g_value_get_object (value);
- g_object_ref (priv->xmpp_connection);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void gibber_iq_helper_dispose (GObject *object);
-static void gibber_iq_helper_finalize (GObject *object);
-
-static void
-gibber_iq_helper_class_init (GibberIqHelperClass *gibber_iq_helper_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (gibber_iq_helper_class);
- GParamSpec *param_spec;
-
- g_type_class_add_private (gibber_iq_helper_class,
- sizeof (GibberIqHelperPrivate));
-
- object_class->constructor = gibber_iq_helper_constructor;
-
- object_class->dispose = gibber_iq_helper_dispose;
- object_class->finalize = gibber_iq_helper_finalize;
-
- object_class->get_property = gibber_iq_helper_get_property;
- object_class->set_property = gibber_iq_helper_set_property;
-
- param_spec = g_param_spec_object (
- "xmpp-connection",
- "GibberXmppConnection object",
- "Gibber XMPP Connection associated with this GibberIqHelper object",
- GIBBER_TYPE_XMPP_CONNECTION,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_XMPP_CONNECTION,
- param_spec);
-}
-
-void
-gibber_iq_helper_dispose (GObject *object)
-{
- GibberIqHelper *self = GIBBER_IQ_HELPER (object);
- GibberIqHelperPrivate *priv = GIBBER_IQ_HELPER_GET_PRIVATE (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- g_assert (priv->xmpp_connection != NULL);
- g_signal_handlers_disconnect_by_func (priv->xmpp_connection,
- xmpp_connection_received_stanza_cb, self);
- g_object_unref (priv->xmpp_connection);
- priv->xmpp_connection = NULL;
-
- if (G_OBJECT_CLASS (gibber_iq_helper_parent_class)->dispose)
- G_OBJECT_CLASS (gibber_iq_helper_parent_class)->dispose (object);
-}
-
-void
-gibber_iq_helper_finalize (GObject *object)
-{
- GibberIqHelper *self = GIBBER_IQ_HELPER (object);
- GibberIqHelperPrivate *priv = GIBBER_IQ_HELPER_GET_PRIVATE (self);
-
- g_hash_table_destroy (priv->id_handlers);
- priv->id_handlers = NULL;
-
- G_OBJECT_CLASS (gibber_iq_helper_parent_class)->finalize (object);
-}
-
-GibberIqHelper *
-gibber_iq_helper_new (GibberXmppConnection *xmpp_connection)
-{
- g_return_val_if_fail (xmpp_connection != NULL, NULL);
-
- return g_object_new (GIBBER_TYPE_IQ_HELPER,
- "xmpp-connection", xmpp_connection,
- NULL);
-}
-
-static void
-reply_handler_object_destroy_notify_cb (gpointer _data,
- GObject *object)
-{
- /* The object was destroyed so we don't care about the
- * reply anymore */
- ReplyHandlerData *data = _data;
- GibberIqHelperPrivate *priv = GIBBER_IQ_HELPER_GET_PRIVATE (data->self);
-
- data->object = NULL;
- g_hash_table_remove (priv->id_handlers, data->id);
-}
-
-/*
- * gibber_iq_send_with_reply
- *
- * Send a GibberXmppStanza and call reply_func when we receive
- * its reply.
- *
- * If object is non-NULL the handler will follow the lifetime of that object,
- * which means that if the object is destroyed the callback will not be invoked
- */
-gboolean
-gibber_iq_helper_send_with_reply (GibberIqHelper *self,
- GibberXmppStanza *iq,
- GibberIqHelperStanzaReplyFunc reply_func,
- GObject *object,
- gpointer user_data,
- GError **error)
-{
- WockyNode *node = wocky_stanza_get_top_node (iq);
- GibberIqHelperPrivate *priv;
- const gchar *tmp;
- gchar *id;
- ReplyHandlerData *data;
-
- g_return_val_if_fail (self != NULL, FALSE);
- g_return_val_if_fail (iq != NULL, FALSE);
- g_return_val_if_fail (reply_func != NULL, FALSE);
- g_return_val_if_fail (strcmp (node->name, "iq") == 0, FALSE);
-
- priv = GIBBER_IQ_HELPER_GET_PRIVATE (self);
-
- tmp = gibber_xmpp_node_get_attribute (node, "id");
- if (tmp == NULL)
- {
- id = gibber_xmpp_connection_new_id (priv->xmpp_connection);
- gibber_xmpp_node_set_attribute (node, "id", id);
- }
- else
- {
- id = g_strdup (tmp);
- }
-
- if (!gibber_xmpp_connection_send (priv->xmpp_connection, iq, error))
- {
- g_free (id);
- return FALSE;
- }
-
- data = g_slice_new (ReplyHandlerData);
- data->reply_func = reply_func;
- data->sent_stanza = g_object_ref (iq);
- data->user_data = user_data;
- data->object = object;
- data->id = id;
- data->self = self;
-
- if (object != NULL)
- {
- g_object_weak_ref (object, reply_handler_object_destroy_notify_cb,
- data);
- }
-
- /* XXX set a timout if we don't receive the reply ? */
- g_hash_table_insert (priv->id_handlers, id, data);
-
- return TRUE;
-}
-
-static GibberXmppStanza *
-new_reply (GibberXmppStanza *iq,
- GibberStanzaSubType sub_type)
-{
- GibberXmppStanza *reply;
- WockyNode *node = wocky_stanza_get_top_node (iq);
- const gchar *id;
- const gchar *iq_from, *iq_to;
-
- g_return_val_if_fail (sub_type == GIBBER_STANZA_SUB_TYPE_RESULT ||
- sub_type == GIBBER_STANZA_SUB_TYPE_ERROR, NULL);
- g_return_val_if_fail (strcmp (node->name, "iq") == 0, NULL);
-
- id = gibber_xmpp_node_get_attribute (node, "id");
- g_return_val_if_fail (id != NULL, NULL);
-
- iq_from = gibber_xmpp_node_get_attribute (node, "from");
- iq_to = gibber_xmpp_node_get_attribute (node, "to");
-
- reply = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- sub_type,
- iq_to, iq_from,
- GIBBER_NODE_ATTRIBUTE, "id", id,
- GIBBER_STANZA_END);
-
- return reply;
-}
-
-GibberXmppStanza *
-gibber_iq_helper_new_result_reply (GibberXmppStanza *iq)
-{
- return new_reply (iq, GIBBER_STANZA_SUB_TYPE_RESULT);
-}
-
-GibberXmppStanza *
-gibber_iq_helper_new_error_reply (GibberXmppStanza *iq,
- GibberXmppError error,
- const gchar *errmsg)
-{
- GibberXmppStanza *stanza;
- WockyNode *node;
-
- stanza = new_reply (iq, GIBBER_STANZA_SUB_TYPE_ERROR);
- node = wocky_stanza_get_top_node (stanza);
- gibber_xmpp_error_to_node (error, node, errmsg);
-
- /* TODO: Would be cool to copy <iq> children as in Gabble */
-
- return stanza;
-}
diff --git a/lib/gibber/gibber-iq-helper.h b/lib/gibber/gibber-iq-helper.h
deleted file mode 100644
index dc3648c1..00000000
--- a/lib/gibber/gibber-iq-helper.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * gibber-iq-helper.h - Header for GibberIqHelper
- * Copyright (C) 2007 Collabora Ltd.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __GIBBER_IQ_HELPER_H__
-#define __GIBBER_IQ_HELPER_H__
-
-#include <glib-object.h>
-
-#include "gibber-xmpp-stanza.h"
-#include "gibber-xmpp-connection.h"
-#include "gibber-xmpp-error.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GibberIqHelper GibberIqHelper;
-typedef struct _GibberIqHelperClass GibberIqHelperClass;
-
-struct _GibberIqHelperClass
-{
- GObjectClass parent_class;
-};
-
-struct _GibberIqHelper
-{
- GObject parent;
-
- gpointer priv;
-};
-
-GType gibber_iq_helper_get_type (void);
-
-/* TYPE MACROS */
-#define GIBBER_TYPE_IQ_HELPER \
- (gibber_iq_helper_get_type ())
-#define GIBBER_IQ_HELPER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GIBBER_TYPE_IQ_HELPER, GibberIqHelper))
-#define GIBBER_IQ_HELPER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GIBBER_TYPE_IQ_HELPER, \
- GibberIqHelperClass))
-#define GIBBER_IS_IQ_HELPER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GIBBER_TYPE_IQ_HELPER))
-#define GIBBER_IS_IQ_HELPER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GIBBER_TYPE_IQ_HELPER))
-#define GIBBER_IQ_HELPER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_IQ_HELPER, \
- GibberIqHelperClass))
-
-typedef void (*GibberIqHelperStanzaReplyFunc) (GibberIqHelper *helper,
- GibberXmppStanza *sent_stanza,
- GibberXmppStanza *reply_stanza,
- GObject *object,
- gpointer user_data);
-
-GibberIqHelper *
-gibber_iq_helper_new (GibberXmppConnection *xmpp_connection);
-
-gboolean
-gibber_iq_helper_send_with_reply (GibberIqHelper *helper,
- GibberXmppStanza *iq, GibberIqHelperStanzaReplyFunc reply_func,
- GObject *object, gpointer user_data, GError **error);
-
-GibberXmppStanza *
-gibber_iq_helper_new_result_reply (GibberXmppStanza *iq);
-
-GibberXmppStanza *
-gibber_iq_helper_new_error_reply (GibberXmppStanza *iq, GibberXmppError error,
- const gchar *errmsg);
-
-G_END_DECLS
-
-#endif /* #ifndef __GIBBER_IQ_HELPER_H__*/
diff --git a/lib/gibber/gibber-muc-connection.c b/lib/gibber/gibber-muc-connection.c
index 7b7efdf9..94ba8c3d 100644
--- a/lib/gibber/gibber-muc-connection.c
+++ b/lib/gibber/gibber-muc-connection.c
@@ -43,7 +43,7 @@
#include "gibber-debug.h"
static void _reader_received_stanza_cb (GibberXmppReader *reader,
- GibberXmppStanza *stanza, gpointer user_data);
+ WockyStanza *stanza, gpointer user_data);
static void _connection_received_data (GibberTransport *transport,
GibberBuffer *buffer, gpointer user_data);
@@ -147,7 +147,7 @@ gibber_muc_connection_class_init (
0,
NULL, NULL,
_gibber_signals_marshal_VOID__STRING_OBJECT,
- G_TYPE_NONE, 2, G_TYPE_STRING, GIBBER_TYPE_XMPP_STANZA);
+ G_TYPE_NONE, 2, G_TYPE_STRING, WOCKY_TYPE_STANZA);
/* UINT: 16 bit stream id
* POINTER: guint8 * data buffer
* ULONG: data buffer size
@@ -631,7 +631,7 @@ gibber_muc_connection_get_parameters (GibberMucConnection *connection)
}
static void
-_reader_received_stanza_cb (GibberXmppReader *reader, GibberXmppStanza *stanza,
+_reader_received_stanza_cb (GibberXmppReader *reader, WockyStanza *stanza,
gpointer user_data)
{
GibberMucConnection *self = GIBBER_MUC_CONNECTION (user_data);
@@ -680,7 +680,7 @@ _connection_received_data (GibberTransport *transport, GibberBuffer *buffer,
gboolean
gibber_muc_connection_send (GibberMucConnection *connection,
- GibberXmppStanza *stanza, GError **error)
+ WockyStanza *stanza, GError **error)
{
GibberMucConnectionPrivate *priv =
GIBBER_MUC_CONNECTION_GET_PRIVATE (connection);
diff --git a/lib/gibber/gibber-muc-connection.h b/lib/gibber/gibber-muc-connection.h
index 981efa18..0f724c84 100644
--- a/lib/gibber/gibber-muc-connection.h
+++ b/lib/gibber/gibber-muc-connection.h
@@ -24,7 +24,7 @@
#include <glib-object.h>
#include "gibber-r-multicast-transport.h"
-#include "gibber-xmpp-stanza.h"
+#include <wocky/wocky-stanza.h>
G_BEGIN_DECLS
@@ -101,7 +101,7 @@ const GHashTable * gibber_muc_connection_get_parameters (
GType gibber_muc_connection_get_type (void);
gboolean gibber_muc_connection_send (GibberMucConnection *connection,
- GibberXmppStanza *stanza, GError **error);
+ WockyStanza *stanza, GError **error);
gboolean
gibber_muc_connection_send_raw (GibberMucConnection *connection,
diff --git a/lib/gibber/gibber-oob-file-transfer.c b/lib/gibber/gibber-oob-file-transfer.c
index 0dba39ec..217db7e8 100644
--- a/lib/gibber/gibber-oob-file-transfer.c
+++ b/lib/gibber/gibber-oob-file-transfer.c
@@ -26,7 +26,8 @@
#include <libsoup/soup-server.h>
#include <libsoup/soup-message.h>
-#include "gibber-xmpp-stanza.h"
+#include <wocky/wocky-stanza.h>
+#include <wocky/wocky-meta-porter.h>
#include "gibber-oob-file-transfer.h"
#include "gibber-fd-transport.h"
#include "gibber-namespaces.h"
@@ -86,7 +87,7 @@ static void gibber_oob_file_transfer_receive (GibberFileTransfer *ft,
static void gibber_oob_file_transfer_cancel (GibberFileTransfer *ft,
guint error_code);
static void gibber_oob_file_transfer_received_stanza (GibberFileTransfer *ft,
- GibberXmppStanza *stanza);
+ WockyStanza *stanza);
static void
gibber_oob_file_transfer_class_init (
@@ -135,27 +136,27 @@ gibber_oob_file_transfer_finalize (GObject *object)
}
gboolean
-gibber_oob_file_transfer_is_file_offer (GibberXmppStanza *stanza)
+gibber_oob_file_transfer_is_file_offer (WockyStanza *stanza)
{
- GibberStanzaType type;
- GibberStanzaSubType sub_type;
- GibberXmppNode *query;
- GibberXmppNode *url;
+ WockyStanzaType type;
+ WockyStanzaSubType sub_type;
+ WockyNode *query;
+ WockyNode *url;
const gchar *url_content;
- gibber_xmpp_stanza_get_type_info (stanza, &type, &sub_type);
- if (type != GIBBER_STANZA_TYPE_IQ ||
- sub_type != GIBBER_STANZA_SUB_TYPE_SET)
+ wocky_stanza_get_type_info (stanza, &type, &sub_type);
+ if (type != WOCKY_STANZA_TYPE_IQ ||
+ sub_type != WOCKY_STANZA_SUB_TYPE_SET)
{
return FALSE;
}
- query = gibber_xmpp_node_get_child (wocky_stanza_get_top_node (stanza),
+ query = wocky_node_get_child (wocky_stanza_get_top_node (stanza),
"query");
if (query == NULL)
return FALSE;
- url = gibber_xmpp_node_get_child (query, "url");
+ url = wocky_node_get_child (query, "url");
if (url == NULL)
return FALSE;
@@ -176,16 +177,17 @@ gibber_oob_file_transfer_is_file_offer (GibberXmppStanza *stanza)
GibberFileTransfer *
gibber_oob_file_transfer_new_from_stanza_with_from (
- GibberXmppStanza *stanza,
- GibberXmppConnection *connection,
+ WockyStanza *stanza,
+ WockyPorter *porter,
+ WockyContact *contact,
const gchar *peer_id,
GError **error)
{
WockyNode *node = wocky_stanza_get_top_node (stanza);
GibberOobFileTransfer *self;
- GibberXmppNode *query;
- GibberXmppNode *url_node;
- GibberXmppNode *desc_node;
+ WockyNode *query;
+ WockyNode *url_node;
+ WockyNode *desc_node;
const gchar *self_id;
const gchar *type;
const gchar *id;
@@ -196,6 +198,8 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
gchar *url;
gchar *filename;
+ g_return_val_if_fail (WOCKY_IS_PORTER (porter), NULL);
+
if (strcmp (node->name, "iq") != 0)
{
g_set_error (error, WOCKY_XMPP_ERROR, WOCKY_XMPP_ERROR_BAD_REQUEST,
@@ -203,7 +207,7 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
return NULL;
}
- self_id = gibber_xmpp_node_get_attribute (node, "to");
+ self_id = wocky_node_get_attribute (node, "to");
if (peer_id == NULL)
{
@@ -219,7 +223,7 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
return NULL;
}
- type = gibber_xmpp_node_get_attribute (node, "type");
+ type = wocky_node_get_attribute (node, "type");
if (type == NULL || strcmp (type, "set") != 0)
{
@@ -228,7 +232,7 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
return NULL;
}
- id = gibber_xmpp_node_get_attribute (node, "id");
+ id = wocky_node_get_attribute (node, "id");
if (id == NULL)
{
@@ -237,7 +241,7 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
return NULL;
}
- query = gibber_xmpp_node_get_child (node, "query");
+ query = wocky_node_get_child (node, "query");
if (query == NULL)
{
@@ -246,7 +250,7 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
return NULL;
}
- url_node = gibber_xmpp_node_get_child (query, "url");
+ url_node = wocky_node_get_child (query, "url");
if (url_node == NULL)
{
@@ -262,7 +266,7 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
return NULL;
}
- ft_type = gibber_xmpp_node_get_attribute (url_node, "type");
+ ft_type = wocky_node_get_attribute (url_node, "type");
if (ft_type != NULL && gibber_strdiff (ft_type, "file"))
{
@@ -286,13 +290,13 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
filename++; /* move after the last "/" */
filename = g_uri_unescape_string (filename, NULL);
- desc_node = gibber_xmpp_node_get_child (query, "desc");
+ desc_node = wocky_node_get_child (query, "desc");
if (desc_node != NULL)
{
description = desc_node->content;
}
- content_type = gibber_xmpp_node_get_attribute (url_node, "mimeType");
+ content_type = wocky_node_get_attribute (url_node, "mimeType");
if (content_type == NULL)
{
content_type = "application/octet-stream";
@@ -303,13 +307,14 @@ gibber_oob_file_transfer_new_from_stanza_with_from (
"self-id", self_id,
"peer-id", peer_id,
"filename", filename,
- "connection", connection,
+ "porter", porter,
+ "contact", contact,
"direction", GIBBER_FILE_TRANSFER_DIRECTION_INCOMING,
"description", description,
"content-type", content_type,
NULL);
- size = gibber_xmpp_node_get_attribute (url_node, "size");
+ size = wocky_node_get_attribute (url_node, "size");
if (size != NULL)
gibber_file_transfer_set_size (GIBBER_FILE_TRANSFER (self),
g_ascii_strtoull (size, NULL, 0));
@@ -369,7 +374,7 @@ http_client_finished_chunks_cb (SoupSession *session,
gpointer user_data)
{
GibberOobFileTransfer *self = user_data;
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
GError *error = NULL;
guint64 size;
@@ -413,12 +418,12 @@ http_client_finished_chunks_cb (SoupSession *session,
return;
}
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_RESULT,
+ stanza = wocky_stanza_build (WOCKY_STANZA_TYPE_IQ,
+ WOCKY_STANZA_SUB_TYPE_RESULT,
GIBBER_FILE_TRANSFER (self)->self_id,
GIBBER_FILE_TRANSFER (self)->peer_id,
- GIBBER_NODE_ATTRIBUTE, "id", GIBBER_FILE_TRANSFER (self)->id,
- GIBBER_STANZA_END);
+ WOCKY_NODE_ATTRIBUTE, "id", GIBBER_FILE_TRANSFER (self)->id,
+ NULL);
if (!gibber_file_transfer_send_stanza (GIBBER_FILE_TRANSFER (self), stanza,
&error))
@@ -466,23 +471,26 @@ gibber_oob_file_transfer_receive (GibberFileTransfer *ft,
http_client_finished_chunks_cb, self);
}
-static GibberXmppStanza *
+static WockyStanza *
create_transfer_offer (GibberOobFileTransfer *self,
GError **error)
{
- GibberXmppConnection *connection;
+ WockyMetaPorter *porter;
+ WockyContact *contact;
+ GSocketConnection *conn;
+ GSocketAddress *address;
+ GInetAddress *addr;
+ GSocketFamily family;
/* local host name */
- gchar host_name[NI_MAXHOST];
- struct sockaddr_storage name_addr;
- socklen_t name_addr_len = sizeof (name_addr);
+ gchar *host_name;
gchar *host_escaped;
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
WockyNode *node;
- GibberXmppNode *query_node;
- GibberXmppNode *url_node;
- GibberXmppNode *desc_node;
+ WockyNode *query_node;
+ WockyNode *url_node;
+ WockyNode *desc_node;
gchar *filename_escaped;
gchar *url;
@@ -490,21 +498,33 @@ create_transfer_offer (GibberOobFileTransfer *self,
guint64 size;
- g_object_get (GIBBER_FILE_TRANSFER (self), "connection", &connection, NULL);
- if (connection->transport == NULL)
+ g_object_get (GIBBER_FILE_TRANSFER (self),
+ "porter", &porter,
+ "contact", &contact,
+ NULL);
+
+ conn = wocky_meta_porter_borrow_connection (porter, WOCKY_LL_CONTACT (contact));
+
+ g_object_unref (porter);
+ g_object_unref (contact);
+
+ if (conn == NULL)
{
g_set_error (error, GIBBER_FILE_TRANSFER_ERROR,
GIBBER_FILE_TRANSFER_ERROR_NOT_CONNECTED, "Null transport");
return NULL;
}
- gibber_transport_get_sockaddr (connection->transport, &name_addr,
- &name_addr_len);
- g_object_unref (connection);
- getnameinfo ((struct sockaddr *) &name_addr, name_addr_len, host_name,
- sizeof (host_name), NULL, 0, NI_NUMERICHOST);
+ address = g_socket_connection_get_local_address (conn, NULL);
+ address = gibber_normalize_socket_address (address);
+ addr = g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (address));
+ family = g_socket_address_get_family (address);
+
+ host_name = g_inet_address_to_string (addr);
- if (name_addr.ss_family == AF_INET6)
+ g_object_unref (address);
+
+ if (family == G_SOCKET_FAMILY_IPV6)
{
/* put brackets around the IP6 */
host_escaped = g_strdup_printf ("[%s]", host_name);
@@ -515,6 +535,8 @@ create_transfer_offer (GibberOobFileTransfer *self,
host_escaped = g_strdup (host_name);
}
+ g_free (host_name);
+
filename_escaped = g_uri_escape_string (GIBBER_FILE_TRANSFER (self)->filename,
NULL, FALSE);
url = g_strdup_printf ("http://%s:%d/%s/%s", host_escaped,
@@ -525,23 +547,23 @@ create_transfer_offer (GibberOobFileTransfer *self,
served_name = g_strdup_printf ("/%s/%s", GIBBER_FILE_TRANSFER (self)->id,
GIBBER_FILE_TRANSFER (self)->filename);
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
+ stanza = wocky_stanza_build (WOCKY_STANZA_TYPE_IQ,
+ WOCKY_STANZA_SUB_TYPE_SET,
GIBBER_FILE_TRANSFER (self)->self_id,
GIBBER_FILE_TRANSFER (self)->peer_id,
- GIBBER_NODE_ATTRIBUTE, "id", GIBBER_FILE_TRANSFER (self)->id,
- GIBBER_STANZA_END);
+ WOCKY_NODE_ATTRIBUTE, "id", GIBBER_FILE_TRANSFER (self)->id,
+ NULL);
node = wocky_stanza_get_top_node (stanza);
- query_node = gibber_xmpp_node_add_child_ns (node, "query",
+ query_node = wocky_node_add_child_ns (node, "query",
GIBBER_XMPP_NS_IQ_OOB);
- url_node = gibber_xmpp_node_add_child_with_content (query_node, "url", url);
- gibber_xmpp_node_set_attribute (url_node, "type", "file");
- gibber_xmpp_node_set_attribute (url_node, "mimeType",
+ url_node = wocky_node_add_child_with_content (query_node, "url", url);
+ wocky_node_set_attribute (url_node, "type", "file");
+ wocky_node_set_attribute (url_node, "mimeType",
GIBBER_FILE_TRANSFER (self)->content_type);
- desc_node = gibber_xmpp_node_add_child_with_content (query_node, "desc",
+ desc_node = wocky_node_add_child_with_content (query_node, "desc",
GIBBER_FILE_TRANSFER (self)->description);
size = gibber_file_transfer_get_size (GIBBER_FILE_TRANSFER (self));
@@ -551,7 +573,7 @@ create_transfer_offer (GibberOobFileTransfer *self,
{
gchar *size_str = g_strdup_printf ("%" G_GUINT64_FORMAT,
size);
- gibber_xmpp_node_set_attribute (url_node, "size", size_str);
+ wocky_node_set_attribute (url_node, "size", size_str);
g_free (size_str);
}
@@ -718,58 +740,10 @@ http_server_cb (SoupServer *server,
}
static void
-gibber_oob_file_transfer_offer (GibberFileTransfer *ft)
+create_and_send_transfer_offer (GibberOobFileTransfer *self)
{
- GibberOobFileTransfer *self = GIBBER_OOB_FILE_TRANSFER (ft);
- GibberXmppStanza *stanza;
GError *error = NULL;
-
- /* start the server if not running */
- /* FIXME we should have only a single server */
- if (self->priv->server == NULL)
- {
- /* FIXME: libsoup can't listen on IPv4 and IPv6 interfaces at the same
- * time. http://bugzilla.gnome.org/show_bug.cgi?id=522519
- * We have to check which IP will be send when creating the stanza. */
- GibberXmppConnection *connection;
- struct sockaddr_storage name_addr;
- socklen_t name_addr_len = sizeof (name_addr);
-
- g_object_get (GIBBER_FILE_TRANSFER (self), "connection", &connection,
- NULL);
- if (connection->transport == NULL)
- {
- g_set_error (&error, GIBBER_FILE_TRANSFER_ERROR,
- GIBBER_FILE_TRANSFER_ERROR_NOT_CONNECTED, "Null transport");
- gibber_file_transfer_emit_error (GIBBER_FILE_TRANSFER (self),
- error);
- g_error_free (error);
- return;
- }
-
- gibber_transport_get_peeraddr (connection->transport, &name_addr,
- &name_addr_len);
- g_object_unref (connection);
-
- if (name_addr.ss_family == AF_INET6)
- {
- /* IPv6 server */
- SoupAddress *addr;
-
- addr = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV6, 0);
- self->priv->server = soup_server_new (SOUP_SERVER_INTERFACE,
- addr, NULL);
-
- g_object_unref (addr);
- }
- else
- {
- /* IPv4 server */
- self->priv->server = soup_server_new (NULL, NULL);
- }
-
- soup_server_run_async (self->priv->server);
- }
+ WockyStanza *stanza;
stanza = create_transfer_offer (self, &error);
if (stanza == NULL)
@@ -791,6 +765,115 @@ gibber_oob_file_transfer_offer (GibberFileTransfer *ft)
}
static void
+porter_open_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ WockyMetaPorter *porter = WOCKY_META_PORTER (source_object);
+ GibberOobFileTransfer *self = GIBBER_OOB_FILE_TRANSFER (user_data);
+ GError *error = NULL;
+
+ WockyContact *contact;
+
+ GSocketConnection *conn;
+ GSocketAddress *address;
+ GSocketFamily family;
+
+ if (!wocky_meta_porter_open_finish (porter, result, &error))
+ {
+ DEBUG ("Failed to open connection: %s", error->message);
+ g_clear_error (&error);
+
+ g_set_error (&error, GIBBER_FILE_TRANSFER_ERROR,
+ GIBBER_FILE_TRANSFER_ERROR_NOT_CONNECTED, "Couldn't open connection");
+ gibber_file_transfer_emit_error (GIBBER_FILE_TRANSFER (self),
+ error);
+ g_error_free (error);
+ return;
+ }
+
+ g_object_get (GIBBER_FILE_TRANSFER (self),
+ "contact", &contact,
+ NULL);
+
+ /* FIXME we should have only a single server */
+
+ /* FIXME: libsoup can't listen on IPv4 and IPv6 interfaces at the same
+ * time. http://bugzilla.gnome.org/show_bug.cgi?id=522519
+ * We have to check which IP will be send when creating the stanza. */
+
+ conn = wocky_meta_porter_borrow_connection (porter,
+ WOCKY_LL_CONTACT (contact));
+
+ if (conn == NULL)
+ {
+ g_set_error (&error, GIBBER_FILE_TRANSFER_ERROR,
+ GIBBER_FILE_TRANSFER_ERROR_NOT_CONNECTED, "Null transport");
+ gibber_file_transfer_emit_error (GIBBER_FILE_TRANSFER (self),
+ error);
+ g_error_free (error);
+ goto out;
+ }
+
+ address = g_socket_connection_get_remote_address (conn, NULL);
+ family = g_socket_address_get_family (address);
+ g_object_unref (address);
+
+ if (family == G_SOCKET_FAMILY_IPV6)
+ {
+ /* IPv6 server */
+ SoupAddress *addr;
+
+ addr = soup_address_new_any (SOUP_ADDRESS_FAMILY_IPV6, 0);
+ self->priv->server = soup_server_new (SOUP_SERVER_INTERFACE,
+ addr, NULL);
+
+ g_object_unref (addr);
+ }
+ else
+ {
+ /* IPv4 server */
+ self->priv->server = soup_server_new (NULL, NULL);
+ }
+
+ soup_server_run_async (self->priv->server);
+
+ create_and_send_transfer_offer (self);
+
+out:
+ /* this was reffed when calling open_async */
+ wocky_meta_porter_unhold (porter, contact);
+ g_object_unref (contact);
+}
+
+static void
+gibber_oob_file_transfer_offer (GibberFileTransfer *ft)
+{
+ GibberOobFileTransfer *self = GIBBER_OOB_FILE_TRANSFER (ft);
+ WockyMetaPorter *porter;
+ WockyContact *contact;
+
+ if (self->priv->server != NULL)
+ {
+ create_and_send_transfer_offer (self);
+ return;
+ }
+
+ /* we need to create the soup server */
+
+ g_object_get (ft,
+ "porter", &porter,
+ "contact", &contact,
+ NULL);
+
+ wocky_meta_porter_open_async (porter, WOCKY_LL_CONTACT (contact),
+ NULL, porter_open_cb, ft);
+
+ g_object_unref (contact);
+ g_object_unref (porter);
+}
+
+static void
http_server_wrote_chunk_cb (SoupMessage *msg,
gpointer user_data)
{
@@ -827,11 +910,11 @@ gibber_oob_file_transfer_cancel (GibberFileTransfer *ft,
guint error_code)
{
GibberOobFileTransfer *self = GIBBER_OOB_FILE_TRANSFER (ft);
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
WockyNode *node;
- GibberXmppNode *query;
- GibberXmppNode *error_node;
- GibberXmppNode *error_desc;
+ WockyNode *query;
+ WockyNode *error_node;
+ WockyNode *error_desc;
gchar *code_string;
if (self->priv->cancelled)
@@ -843,33 +926,33 @@ gibber_oob_file_transfer_cancel (GibberFileTransfer *ft,
* sender cancelled the transfer. */
return;
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_ERROR,
+ stanza = wocky_stanza_build (WOCKY_STANZA_TYPE_IQ,
+ WOCKY_STANZA_SUB_TYPE_ERROR,
GIBBER_FILE_TRANSFER (self)->self_id,
GIBBER_FILE_TRANSFER (self)->peer_id,
- GIBBER_NODE_ATTRIBUTE, "id", GIBBER_FILE_TRANSFER (self)->id,
- GIBBER_STANZA_END);
+ WOCKY_NODE_ATTRIBUTE, "id", GIBBER_FILE_TRANSFER (self)->id,
+ NULL);
node = wocky_stanza_get_top_node (stanza);
- query = gibber_xmpp_node_add_child_ns (node, "query",
+ query = wocky_node_add_child_ns (node, "query",
GIBBER_XMPP_NS_IQ_OOB);
- gibber_xmpp_node_add_child_with_content (query, "url", self->priv->url);
+ wocky_node_add_child_with_content (query, "url", self->priv->url);
- error_node = gibber_xmpp_node_add_child (node, "error");
+ error_node = wocky_node_add_child (node, "error");
code_string = g_strdup_printf ("%d", error_code);
switch (error_code)
{
case HTTP_STATUS_CODE_NOT_FOUND:
- gibber_xmpp_node_set_attribute (error_node, "code", code_string);
- gibber_xmpp_node_set_attribute (error_node, "type", "cancel");
- error_desc = gibber_xmpp_node_add_child_ns (error_node,
+ wocky_node_set_attribute (error_node, "code", code_string);
+ wocky_node_set_attribute (error_node, "type", "cancel");
+ error_desc = wocky_node_add_child_ns (error_node,
"item-not-found", GIBBER_XMPP_NS_STANZAS);
break;
case HTTP_STATUS_CODE_NOT_ACCEPTABLE:
- gibber_xmpp_node_set_attribute (error_node, "code", code_string);
- gibber_xmpp_node_set_attribute (error_node, "type", "modify");
- error_desc = gibber_xmpp_node_add_child_ns (error_node,
+ wocky_node_set_attribute (error_node, "code", code_string);
+ wocky_node_set_attribute (error_node, "type", "modify");
+ error_desc = wocky_node_add_child_ns (error_node,
"not-acceptable", GIBBER_XMPP_NS_STANZAS);
break;
default:
@@ -885,17 +968,17 @@ gibber_oob_file_transfer_cancel (GibberFileTransfer *ft,
static void
gibber_oob_file_transfer_received_stanza (GibberFileTransfer *ft,
- GibberXmppStanza *stanza)
+ WockyStanza *stanza)
{
GibberOobFileTransfer *self = GIBBER_OOB_FILE_TRANSFER (ft);
WockyNode *node = wocky_stanza_get_top_node (stanza);
const gchar *type;
- GibberXmppNode *error_node;
+ WockyNode *error_node;
if (strcmp (node->name, "iq") != 0)
return;
- type = gibber_xmpp_node_get_attribute (node, "type");
+ type = wocky_node_get_attribute (node, "type");
if (type == NULL)
return;
@@ -905,7 +988,7 @@ gibber_oob_file_transfer_received_stanza (GibberFileTransfer *ft,
return;
}
- error_node = gibber_xmpp_node_get_child (node, "error");
+ error_node = wocky_node_get_child (node, "error");
if (error_node != NULL)
{
GError *error = NULL;
@@ -914,10 +997,10 @@ gibber_oob_file_transfer_received_stanza (GibberFileTransfer *ft,
self->priv->cancelled = TRUE;
/* FIXME copy the error handling code from gabble */
- error_code_str = gibber_xmpp_node_get_attribute (error_node, "code");
+ error_code_str = wocky_node_get_attribute (error_node, "code");
if (error_code_str == NULL)
/* iChat uses the 'type' attribute to transmit the error code */
- error_code_str = gibber_xmpp_node_get_attribute (error_node, "type");
+ error_code_str = wocky_node_get_attribute (error_node, "type");
if (error_code_str != NULL && g_ascii_strtoll (error_code_str, NULL,
10) == HTTP_STATUS_CODE_NOT_ACCEPTABLE)
diff --git a/lib/gibber/gibber-oob-file-transfer.h b/lib/gibber/gibber-oob-file-transfer.h
index b8ec34ad..ea29b9bf 100644
--- a/lib/gibber/gibber-oob-file-transfer.h
+++ b/lib/gibber/gibber-oob-file-transfer.h
@@ -22,7 +22,6 @@
#include <glib.h>
#include <glib-object.h>
-#include "gibber-xmpp-connection.h"
#include "gibber-file-transfer.h"
G_BEGIN_DECLS
@@ -60,10 +59,10 @@ GType gibber_oob_file_transfer_get_type (void);
(G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_OOB_FILE_TRANSFER, GibberOobFileTransferClass))
-gboolean gibber_oob_file_transfer_is_file_offer (GibberXmppStanza *stanza);
+gboolean gibber_oob_file_transfer_is_file_offer (WockyStanza *stanza);
GibberFileTransfer *gibber_oob_file_transfer_new_from_stanza_with_from (
- GibberXmppStanza *stanza, GibberXmppConnection *connection,
+ WockyStanza *stanza, WockyPorter *porter, WockyContact *contact,
const gchar *from, GError **error);
G_END_DECLS
diff --git a/lib/gibber/gibber-util.c b/lib/gibber/gibber-util.c
index 6f5c5722..b1cf93aa 100644
--- a/lib/gibber/gibber-util.c
+++ b/lib/gibber/gibber-util.c
@@ -50,6 +50,26 @@ gibber_normalize_address (struct sockaddr_storage *addr)
}
}
+/* FIXME: this is a hack until we get the normalization of v6-in-v4
+ * addresses in GLib. See bgo#646082 */
+GSocketAddress *
+gibber_normalize_socket_address (GSocketAddress *addr)
+{
+ struct sockaddr_storage ss;
+
+ if (g_socket_address_get_family (addr) != G_SOCKET_FAMILY_IPV6)
+ return addr;
+
+ if (!g_socket_address_to_native (addr, &ss, sizeof (ss), NULL))
+ return addr;
+
+ g_object_unref (addr);
+
+ gibber_normalize_address (&ss);
+
+ return g_socket_address_new_from_native (&ss, sizeof (ss));
+}
+
/**
* gibber_strdiff:
* @left: The first string to compare (may be NULL)
diff --git a/lib/gibber/gibber-util.h b/lib/gibber/gibber-util.h
index d159e39e..bbd9032a 100644
--- a/lib/gibber/gibber-util.h
+++ b/lib/gibber/gibber-util.h
@@ -23,10 +23,12 @@
#include "gibber-sockets.h"
#include <glib.h>
+#include <gio/gio.h>
G_BEGIN_DECLS
void gibber_normalize_address (struct sockaddr_storage *addr);
+GSocketAddress * gibber_normalize_socket_address (GSocketAddress *addr);
gboolean gibber_strdiff (const gchar *left, const gchar *right);
G_END_DECLS
diff --git a/lib/gibber/gibber-xmpp-connection-listener.c b/lib/gibber/gibber-xmpp-connection-listener.c
deleted file mode 100644
index 729efde1..00000000
--- a/lib/gibber/gibber-xmpp-connection-listener.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * gibber-xmpp-connection-listener.c - Source for GibberXmppConnectionListener
- * Copyright (C) 2007 Ltd.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "gibber-xmpp-connection-listener.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <glib.h>
-
-#include "gibber-sockets.h"
-#include "gibber-xmpp-connection.h"
-#include "gibber-linklocal-transport.h"
-#include "gibber-util.h"
-#include "gibber-listener.h"
-
-#define DEBUG_FLAG DEBUG_NET
-#include "gibber-debug.h"
-
-#include "gibber-signals-marshal.h"
-
-G_DEFINE_TYPE (GibberXmppConnectionListener, gibber_xmpp_connection_listener, \
- G_TYPE_OBJECT);
-
-/* signals */
-enum
-{
- NEW_CONNECTION,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-typedef struct _GibberXmppConnectionListenerPrivate \
- GibberXmppConnectionListenerPrivate;
-struct _GibberXmppConnectionListenerPrivate
-{
- GibberListener *listener;
-
- gboolean dispose_has_run;
-};
-
-#define GIBBER_XMPP_CONNECTION_LISTENER_GET_PRIVATE(obj) \
- ((GibberXmppConnectionListenerPrivate *) obj->priv)
-
-GQuark
-gibber_xmpp_connection_listener_error_quark (void)
-{
- static GQuark quark = 0;
-
- if (!quark)
- quark = g_quark_from_static_string (
- "gibber_xmpp_connection_listener_error");
-
- return quark;
-}
-
-static void
-gibber_xmpp_connection_listener_init (GibberXmppConnectionListener *self)
-{
- GibberXmppConnectionListenerPrivate *priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self, GIBBER_TYPE_XMPP_CONNECTION_LISTENER,
- GibberXmppConnectionListenerPrivate);
-
- self->priv = priv;
-
- priv->listener = NULL;
-
- priv->dispose_has_run = FALSE;
-}
-
-static void
-gibber_xmpp_connection_listener_dispose (GObject *object)
-{
- GibberXmppConnectionListener *self =
- GIBBER_XMPP_CONNECTION_LISTENER (object);
- GibberXmppConnectionListenerPrivate *priv =
- GIBBER_XMPP_CONNECTION_LISTENER_GET_PRIVATE (self);
-
- if (priv->listener != NULL)
- {
- g_object_unref (priv->listener);
- priv->listener = NULL;
- }
-
- G_OBJECT_CLASS (gibber_xmpp_connection_listener_parent_class)->dispose (
- object);
-}
-
-static void
-gibber_xmpp_connection_listener_class_init (
- GibberXmppConnectionListenerClass *gibber_xmpp_connection_listener_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (
- gibber_xmpp_connection_listener_class);
-
- g_type_class_add_private (gibber_xmpp_connection_listener_class,
- sizeof (GibberXmppConnectionListenerPrivate));
-
- object_class->dispose = gibber_xmpp_connection_listener_dispose;
-
- signals[NEW_CONNECTION] =
- g_signal_new (
- "new-connection",
- G_OBJECT_CLASS_TYPE (gibber_xmpp_connection_listener_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
- 0,
- NULL, NULL,
- _gibber_signals_marshal_VOID__OBJECT_POINTER_UINT,
- G_TYPE_NONE, 3, GIBBER_TYPE_XMPP_CONNECTION, G_TYPE_POINTER,
- G_TYPE_UINT);
-}
-
-GibberXmppConnectionListener *
-gibber_xmpp_connection_listener_new (void)
-{
- return g_object_new (GIBBER_TYPE_XMPP_CONNECTION_LISTENER,
- NULL);
-}
-
-static gboolean
-new_connection_cb (GibberListener *listener,
- GibberTransport *transport,
- struct sockaddr *address,
- socklen_t addrlen,
- gpointer user_data)
-{
- GibberXmppConnectionListener *self =
- GIBBER_XMPP_CONNECTION_LISTENER (user_data);
- GibberXmppConnection *connection;
- connection = gibber_xmpp_connection_new (transport);
-
- g_signal_emit (self, signals[NEW_CONNECTION], 0, connection,
- address, addrlen);
-
- g_object_unref (connection);
- return TRUE;
-}
-
-/**
- * port: the port, or 0 to choose a random port
- */
-gboolean
-gibber_xmpp_connection_listener_listen (GibberXmppConnectionListener *self,
- int port,
- GError **error)
-{
- GibberXmppConnectionListenerPrivate *priv =
- GIBBER_XMPP_CONNECTION_LISTENER_GET_PRIVATE (self);
- int ret;
-
- if (priv->listener == NULL)
- {
- priv->listener = gibber_listener_new ();
- g_signal_connect (priv->listener, "new-connection",
- G_CALLBACK (new_connection_cb), self);
- }
-
- ret = gibber_listener_listen_tcp (priv->listener, port, error);
-
- return ret;
-}
-
-int
-gibber_xmpp_connection_listener_get_port (
- GibberXmppConnectionListener *self)
-{
- GibberXmppConnectionListenerPrivate *priv =
- GIBBER_XMPP_CONNECTION_LISTENER_GET_PRIVATE (self);
-
- g_return_val_if_fail (priv->listener != NULL, 0);
-
- return gibber_listener_get_port (priv->listener);
-}
diff --git a/lib/gibber/gibber-xmpp-connection-listener.h b/lib/gibber/gibber-xmpp-connection-listener.h
deleted file mode 100644
index 1f542547..00000000
--- a/lib/gibber/gibber-xmpp-connection-listener.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * gibber-xmpp-connection-listener.h - Header for GibberXmppConnectionListener
- * Copyright (C) 2007 Collabora Ltd.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __GIBBER_XMPP_CONNECTION_LISTENER_H__
-#define __GIBBER_XMPP_CONNECTION_LISTENER_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GibberXmppConnectionListener GibberXmppConnectionListener;
-typedef struct _GibberXmppConnectionListenerClass
- GibberXmppConnectionListenerClass;
-
-struct _GibberXmppConnectionListenerClass {
- GObjectClass parent_class;
-};
-
-struct _GibberXmppConnectionListener {
- GObject parent;
-
- gpointer priv;
-};
-
-GType gibber_xmpp_connection_listener_get_type (void);
-
-/* TYPE MACROS */
-#define GIBBER_TYPE_XMPP_CONNECTION_LISTENER \
- (gibber_xmpp_connection_listener_get_type ())
-#define GIBBER_XMPP_CONNECTION_LISTENER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GIBBER_TYPE_XMPP_CONNECTION_LISTENER,\
- GibberXmppConnectionListener))
-#define GIBBER_XMPP_CONNECTION_LISTENER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GIBBER_TYPE_XMPP_CONNECTION_LISTENER,\
- GibberXmppConnectionListenerClass))
-#define GIBBER_IS_XMPP_CONNECTION_LISTENER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GIBBER_TYPE_XMPP_CONNECTION_LISTENER))
-#define GIBBER_IS_XMPP_CONNECTION_LISTENER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GIBBER_TYPE_XMPP_CONNECTION_LISTENER))
-#define GIBBER_XMPP_CONNECTION_LISTENER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_XMPP_CONNECTION_LISTENER,\
- GibberXmppConnectionListenerClass))
-
-GQuark gibber_xmpp_connection_listener_error_quark (void);
-
-GibberXmppConnectionListener *
-gibber_xmpp_connection_listener_new (void);
-
-gboolean gibber_xmpp_connection_listener_listen (
- GibberXmppConnectionListener *listener, int port, GError **error);
-
-int gibber_xmpp_connection_listener_get_port (
- GibberXmppConnectionListener *listener);
-
-
-G_END_DECLS
-
-#endif /* #ifndef __GIBBER_XMPP_CONNECTION_LISTENER_H__ */
diff --git a/lib/gibber/gibber-xmpp-connection.c b/lib/gibber/gibber-xmpp-connection.c
deleted file mode 100644
index 50733f6b..00000000
--- a/lib/gibber/gibber-xmpp-connection.c
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * gibber-xmpp-connection.c - Source for GibberXmppConnection
- * Copyright (C) 2006 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd@luon.net>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gibber-xmpp-connection.h"
-#include "gibber-signals-marshal.h"
-
-#include "gibber-xmpp-reader.h"
-#include "gibber-xmpp-writer.h"
-#include "gibber-transport.h"
-#include "gibber-xmpp-stanza.h"
-
-#define XMPP_STREAM_NAMESPACE "http://etherx.jabber.org/streams"
-
-static void _xmpp_connection_received_data (GibberTransport *transport,
- GibberBuffer *buffer, gpointer user_data);
-
-G_DEFINE_TYPE(GibberXmppConnection, gibber_xmpp_connection, G_TYPE_OBJECT)
-
-/* signal enum */
-enum
-{
- STREAM_OPENED,
- STREAM_CLOSED,
- PARSE_ERROR,
- RECEIVED_STANZA,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-static void _reader_stream_opened_cb (GibberXmppReader *reader,
- const gchar *to, const gchar *from, const gchar *version,
- gpointer user_data);
-
-static void _reader_stream_closed_cb (GibberXmppReader *reader,
- gpointer user_data);
-
-static void _reader_received_stanza_cb (GibberXmppReader *reader,
- GibberXmppStanza *stanza, gpointer user_data);
-
-/* private structure */
-typedef struct _GibberXmppConnectionPrivate GibberXmppConnectionPrivate;
-
-struct _GibberXmppConnectionPrivate
-{
- GibberXmppReader *reader;
- GibberXmppWriter *writer;
- gboolean dispose_has_run;
- guint last_id;
-};
-
-#define GIBBER_XMPP_CONNECTION_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), GIBBER_TYPE_XMPP_CONNECTION, \
- GibberXmppConnectionPrivate))
-
-static GObject *
-gibber_xmpp_connection_constructor (GType type,
- guint n_props, GObjectConstructParam *props)
-{
- GObject *obj;
- GibberXmppConnectionPrivate *priv;
-
- obj = G_OBJECT_CLASS (gibber_xmpp_connection_parent_class)->
- constructor (type, n_props, props);
-
- priv = GIBBER_XMPP_CONNECTION_GET_PRIVATE (obj);
-
- priv->writer = gibber_xmpp_writer_new ();
- priv->reader = gibber_xmpp_reader_new ();
-
- g_signal_connect (priv->reader, "stream-opened",
- G_CALLBACK (_reader_stream_opened_cb), obj);
- g_signal_connect (priv->reader, "stream-closed",
- G_CALLBACK (_reader_stream_closed_cb), obj);
- g_signal_connect (priv->reader, "received-stanza",
- G_CALLBACK (_reader_received_stanza_cb), obj);
-
- return obj;
-}
-
-static void
-gibber_xmpp_connection_init (GibberXmppConnection *obj)
-{
- GibberXmppConnectionPrivate *priv = GIBBER_XMPP_CONNECTION_GET_PRIVATE (obj);
- obj->transport = NULL;
- priv->last_id = 0;
-}
-
-static void gibber_xmpp_connection_dispose (GObject *object);
-static void gibber_xmpp_connection_finalize (GObject *object);
-
-static void
-gibber_xmpp_connection_class_init (
- GibberXmppConnectionClass *gibber_xmpp_connection_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (gibber_xmpp_connection_class);
-
- g_type_class_add_private (gibber_xmpp_connection_class,
- sizeof (GibberXmppConnectionPrivate));
-
- object_class->dispose = gibber_xmpp_connection_dispose;
- object_class->finalize = gibber_xmpp_connection_finalize;
-
- object_class->constructor = gibber_xmpp_connection_constructor;
-
- signals[STREAM_OPENED] = g_signal_new ("stream-opened",
- G_OBJECT_CLASS_TYPE (gibber_xmpp_connection_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
- 0,
- NULL, NULL,
- _gibber_signals_marshal_VOID__STRING_STRING_STRING,
- G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
-
- signals[STREAM_CLOSED] = g_signal_new ("stream-closed",
- G_OBJECT_CLASS_TYPE (gibber_xmpp_connection_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
- 0,
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- signals[RECEIVED_STANZA] = g_signal_new ("received-stanza",
- G_OBJECT_CLASS_TYPE (gibber_xmpp_connection_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
- 0,
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, GIBBER_TYPE_XMPP_STANZA);
-
- signals[PARSE_ERROR] = g_signal_new ("parse-error",
- G_OBJECT_CLASS_TYPE(gibber_xmpp_connection_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
- 0,
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-}
-
-void
-gibber_xmpp_connection_dispose (GObject *object)
-{
- GibberXmppConnection *self = GIBBER_XMPP_CONNECTION (object);
- GibberXmppConnectionPrivate *priv =
- GIBBER_XMPP_CONNECTION_GET_PRIVATE (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
- if (self->transport != NULL)
- {
- g_object_unref (self->transport);
- self->transport = NULL;
- }
-
- if (priv->reader != NULL)
- {
- g_object_unref (priv->reader);
- priv->reader = NULL;
- }
-
- if (priv->writer != NULL)
- {
- g_object_unref (priv->writer);
- priv->writer = NULL;
- }
-
- /* release any references held by the object here */
-
- if (G_OBJECT_CLASS (gibber_xmpp_connection_parent_class)->dispose)
- G_OBJECT_CLASS (gibber_xmpp_connection_parent_class)->dispose (object);
-}
-
-void
-gibber_xmpp_connection_finalize (GObject *object)
-{
- G_OBJECT_CLASS (gibber_xmpp_connection_parent_class)->finalize (object);
-}
-
-
-
-static GibberXmppConnection *
-new_connection (GibberTransport *transport, gboolean stream)
-{
- GibberXmppConnection * result;
-
- result = g_object_new (GIBBER_TYPE_XMPP_CONNECTION, NULL);
-
- if (transport != NULL)
- {
- gibber_xmpp_connection_engage (result, transport);
- }
-
- return result;
-}
-
-GibberXmppConnection *
-gibber_xmpp_connection_new (GibberTransport *transport)
-{
- return new_connection (transport, TRUE);
-}
-
-GibberXmppConnection *
-gibber_xmpp_connection_new_no_stream (GibberTransport *transport)
-{
- return new_connection (transport, FALSE);
-}
-
-void
-gibber_xmpp_connection_open (GibberXmppConnection *connection,
- const gchar *to, const gchar *from, const gchar *version)
-{
- GibberXmppConnectionPrivate *priv =
- GIBBER_XMPP_CONNECTION_GET_PRIVATE (connection);
- const guint8 *data;
- gsize length;
-
- g_assert ((connection->stream_flags & GIBBER_XMPP_CONNECTION_STREAM_SENT)
- == 0);
-
- gibber_xmpp_writer_stream_open (priv->writer, to, from, version, &data,
- &length);
- connection->stream_flags |= GIBBER_XMPP_CONNECTION_STREAM_SENT;
- gibber_transport_send (connection->transport, data, length, NULL);
-}
-
-void
-gibber_xmpp_connection_restart (GibberXmppConnection *connection)
-{
- GibberXmppConnectionPrivate *priv =
- GIBBER_XMPP_CONNECTION_GET_PRIVATE (connection);
-
- g_assert (connection->stream_flags
- & GIBBER_XMPP_CONNECTION_STREAM_FULLY_OPEN);
- gibber_xmpp_reader_reset (priv->reader);
- connection->stream_flags = 0;
-}
-
-void
-gibber_xmpp_connection_close (GibberXmppConnection *connection)
-{
- GibberXmppConnectionPrivate *priv =
- GIBBER_XMPP_CONNECTION_GET_PRIVATE (connection);
- const guint8 *data;
- gsize length;
-
- connection->stream_flags |= GIBBER_XMPP_CONNECTION_CLOSE_SENT;
-
- gibber_xmpp_writer_stream_close (priv->writer, &data, &length);
- gibber_transport_send (connection->transport, data, length, NULL);
-}
-
-void
-gibber_xmpp_connection_engage (GibberXmppConnection *connection,
- GibberTransport *transport)
-{
- g_assert (connection->transport == NULL);
-
- connection->transport = g_object_ref (transport);
- gibber_transport_set_handler (transport, _xmpp_connection_received_data,
- connection);
-}
-
-void
-gibber_xmpp_connection_disengage (GibberXmppConnection *connection)
-{
- g_assert (connection->transport != NULL);
-
- gibber_transport_set_handler (connection->transport, NULL, NULL);
-
- g_object_unref (connection->transport);
- connection->transport = NULL;
-}
-
-gboolean
-gibber_xmpp_connection_send (GibberXmppConnection *connection,
- GibberXmppStanza *stanza, GError **error)
-{
- GibberXmppConnectionPrivate *priv =
- GIBBER_XMPP_CONNECTION_GET_PRIVATE (connection);
- WockyNode *node = wocky_stanza_get_top_node (stanza);
- const guint8 *data;
- gsize length;
- const gchar *id;
-
- id = wocky_node_get_attribute (node, "id");
- if (id == NULL)
- {
- gchar *tmp = gibber_xmpp_connection_new_id (connection);
- wocky_node_set_attribute (node, "id", tmp);
- g_free (tmp);
- }
-
- if (!gibber_xmpp_writer_write_stanza (priv->writer, stanza,
- &data, &length, error))
- {
- return FALSE;
- }
-
- return gibber_transport_send (connection->transport, data, length, error);
-}
-
-static void
-_xmpp_connection_received_data (GibberTransport *transport,
- GibberBuffer *buffer, gpointer user_data)
-{
- GibberXmppConnection *self = GIBBER_XMPP_CONNECTION (user_data);
- GibberXmppConnectionPrivate *priv =
- GIBBER_XMPP_CONNECTION_GET_PRIVATE (self);
- gboolean ret;
- GError *error = NULL;
-
- g_assert (buffer->length > 0);
-
- /* Ensure we're not disposed inside while running the reader is busy */
- g_object_ref (self);
- ret = gibber_xmpp_reader_push (priv->reader, buffer->data, buffer->length,
- &error);
-
- if (!ret)
- {
- g_signal_emit (self, signals[PARSE_ERROR], 0);
- }
- g_object_unref (self);
-}
-
-static void
-_reader_stream_opened_cb (GibberXmppReader *reader, const gchar *to,
- const gchar *from, const gchar *version, gpointer user_data)
-{
- GibberXmppConnection *self = GIBBER_XMPP_CONNECTION (user_data);
-
- self->stream_flags |= GIBBER_XMPP_CONNECTION_STREAM_RECEIVED;
-
- g_signal_emit (self, signals[STREAM_OPENED], 0, to, from, version);
-}
-
-static void
-_reader_stream_closed_cb (GibberXmppReader *reader, gpointer user_data)
-{
- GibberXmppConnection *self = GIBBER_XMPP_CONNECTION (user_data);
-
- self->stream_flags |= GIBBER_XMPP_CONNECTION_CLOSE_RECEIVED;
-
- g_signal_emit (self, signals[STREAM_CLOSED], 0);
-}
-
-static void
-_reader_received_stanza_cb (GibberXmppReader *reader, GibberXmppStanza *stanza,
- gpointer user_data)
-{
- GibberXmppConnection *self = GIBBER_XMPP_CONNECTION (user_data);
- g_signal_emit (self, signals[RECEIVED_STANZA], 0, stanza);
-}
-
-gchar *
-gibber_xmpp_connection_new_id (GibberXmppConnection *self)
-{
- GibberXmppConnectionPrivate *priv =
- GIBBER_XMPP_CONNECTION_GET_PRIVATE (self);
- GTimeVal tv;
- glong val;
-
- g_get_current_time (&tv);
- val = (tv.tv_sec & tv.tv_usec) + priv->last_id++;
-
- return g_strdup_printf ("%ld%ld", val, tv.tv_usec);
-}
diff --git a/lib/gibber/gibber-xmpp-connection.h b/lib/gibber/gibber-xmpp-connection.h
deleted file mode 100644
index 6239b19d..00000000
--- a/lib/gibber/gibber-xmpp-connection.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * gibber-xmpp-connection.h - Header for GibberXmppConnection
- * Copyright (C) 2006 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd@luon.net>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __GIBBER_XMPP_CONNECTION_H__
-#define __GIBBER_XMPP_CONNECTION_H__
-
-#include <glib-object.h>
-
-#include "gibber-transport.h"
-#include "gibber-xmpp-stanza.h"
-
-G_BEGIN_DECLS
-
-typedef struct _GibberXmppConnection GibberXmppConnection;
-typedef struct _GibberXmppConnectionClass GibberXmppConnectionClass;
-
-typedef enum
-{
- GIBBER_XMPP_CONNECTION_STREAM_SENT = 1 << 0,
- GIBBER_XMPP_CONNECTION_STREAM_RECEIVED = 1 << 1,
- GIBBER_XMPP_CONNECTION_STREAM_FULLY_OPEN =
- GIBBER_XMPP_CONNECTION_STREAM_SENT|GIBBER_XMPP_CONNECTION_STREAM_RECEIVED,
- GIBBER_XMPP_CONNECTION_CLOSE_SENT = 1 << 2,
- GIBBER_XMPP_CONNECTION_CLOSE_RECEIVED = 1 << 3,
- GIBBER_XMPP_CONNECTION_CLOSE_FULLY_CLOSED =
- GIBBER_XMPP_CONNECTION_STREAM_FULLY_OPEN|
- GIBBER_XMPP_CONNECTION_CLOSE_SENT|GIBBER_XMPP_CONNECTION_CLOSE_RECEIVED,
-} GibberXmppConnectionFlags;
-
-struct _GibberXmppConnectionClass {
- GObjectClass parent_class;
-};
-
-struct _GibberXmppConnection {
- GObject parent;
- GibberTransport *transport;
- guint8 stream_flags;
-};
-
-GType gibber_xmpp_connection_get_type (void);
-
-/* TYPE MACROS */
-#define GIBBER_TYPE_XMPP_CONNECTION \
- (gibber_xmpp_connection_get_type ())
-#define GIBBER_XMPP_CONNECTION(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), GIBBER_TYPE_XMPP_CONNECTION, \
- GibberXmppConnection))
-#define GIBBER_XMPP_CONNECTION_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), GIBBER_TYPE_XMPP_CONNECTION, \
- GibberXmppConnectionClass))
-#define GIBBER_IS_XMPP_CONNECTION(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), GIBBER_TYPE_XMPP_CONNECTION))
-#define GIBBER_IS_XMPP_CONNECTION_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), GIBBER_TYPE_XMPP_CONNECTION))
-#define GIBBER_XMPP_CONNECTION_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), GIBBER_TYPE_XMPP_CONNECTION, \
- GibberXmppConnectionClass))
-
-GibberXmppConnection *gibber_xmpp_connection_new (GibberTransport *transport);
-
-void gibber_xmpp_connection_open (GibberXmppConnection *connection,
- const gchar *to, const gchar *from, const gchar *version);
-
-/* Prepare the connection for a reopen from the other side, for example after
- * successfull SASL authentication */
-void gibber_xmpp_connection_restart (GibberXmppConnection *connection);
-
-void gibber_xmpp_connection_close (GibberXmppConnection *connection);
-
-void gibber_xmpp_connection_engage (GibberXmppConnection *connection,
- GibberTransport *transport);
-
-void gibber_xmpp_connection_disengage (GibberXmppConnection *connection);
-
-gboolean gibber_xmpp_connection_send (GibberXmppConnection *connection,
- GibberXmppStanza *stanza, GError **error);
-
-gchar * gibber_xmpp_connection_new_id (GibberXmppConnection *connection);
-
-GibberXmppConnection * gibber_xmpp_connection_new_no_stream (
- GibberTransport *transport);
-
-G_END_DECLS
-
-#endif /* #ifndef __GIBBER_XMPP_CONNECTION_H__*/
diff --git a/lib/gibber/gibber-xmpp-error.c b/lib/gibber/gibber-xmpp-error.c
index a42df987..1d03238d 100644
--- a/lib/gibber/gibber-xmpp-error.c
+++ b/lib/gibber/gibber-xmpp-error.c
@@ -317,7 +317,7 @@ gibber_xmpp_error_quark (void)
}
GibberXmppError
-gibber_xmpp_error_from_node (GibberXmppNode *error_node)
+gibber_xmpp_error_from_node (WockyNode *error_node)
{
gint i, j;
const gchar *error_code_str;
@@ -331,7 +331,7 @@ gibber_xmpp_error_from_node (GibberXmppNode *error_node)
* numbers; the >= 0 test is OK because i is signed */
for (i = NUM_XMPP_ERRORS - 1; i >= 0; i--)
{
- if (gibber_xmpp_node_get_child_ns (error_node, xmpp_errors[i].name,
+ if (wocky_node_get_child_ns (error_node, xmpp_errors[i].name,
xmpp_errors[i].namespace))
{
return i;
@@ -340,7 +340,7 @@ gibber_xmpp_error_from_node (GibberXmppNode *error_node)
}
/* Ok, do it the legacy way */
- error_code_str = gibber_xmpp_node_get_attribute (error_node, "code");
+ error_code_str = wocky_node_get_attribute (error_node, "code");
if (error_code_str)
{
gint error_code;
@@ -382,13 +382,13 @@ gibber_xmpp_error_to_g_error (GibberXmppError error)
/*
* See RFC 3920: 4.7 Stream Errors, 9.3 Stanza Errors.
*/
-GibberXmppNode *
+WockyNode *
gibber_xmpp_error_to_node (GibberXmppError error,
- GibberXmppNode *parent_node,
+ WockyNode *parent_node,
const gchar *errmsg)
{
const XmppErrorSpec *spec, *extra;
- GibberXmppNode *error_node, *node;
+ WockyNode *error_node, *node;
gchar str[6];
g_return_val_if_fail (error != XMPP_ERROR_UNDEFINED_CONDITION &&
@@ -405,29 +405,29 @@ gibber_xmpp_error_to_node (GibberXmppError error,
spec = &xmpp_errors[error];
}
- error_node = gibber_xmpp_node_add_child (parent_node, "error");
+ error_node = wocky_node_add_child (parent_node, "error");
sprintf (str, "%d", spec->legacy_errors[0]);
- gibber_xmpp_node_set_attribute (error_node, "code", str);
+ wocky_node_set_attribute (error_node, "code", str);
if (spec->type)
{
- gibber_xmpp_node_set_attribute (error_node, "type", spec->type);
+ wocky_node_set_attribute (error_node, "type", spec->type);
}
- node = gibber_xmpp_node_add_child_ns (error_node, spec->name,
+ node = wocky_node_add_child_ns (error_node, spec->name,
GIBBER_XMPP_NS_STANZAS);
if (extra != NULL)
{
- node = gibber_xmpp_node_add_child_ns (error_node, extra->name,
+ node = wocky_node_add_child_ns (error_node, extra->name,
extra->namespace);
}
if (NULL != errmsg)
{
- node = gibber_xmpp_node_add_child (error_node, "text");
- gibber_xmpp_node_set_content (node, errmsg);
+ node = wocky_node_add_child (error_node, "text");
+ wocky_node_set_content (node, errmsg);
}
return error_node;
@@ -452,16 +452,16 @@ gibber_xmpp_error_description (GibberXmppError error)
}
GError *
-gibber_message_get_xmpp_error (GibberXmppStanza *msg)
+gibber_message_get_xmpp_error (WockyStanza *msg)
{
- GibberStanzaSubType sub_type;
+ WockyStanzaSubType sub_type;
g_return_val_if_fail (msg != NULL, NULL);
- gibber_xmpp_stanza_get_type_info (msg, NULL, &sub_type);
+ wocky_stanza_get_type_info (msg, NULL, &sub_type);
- if (sub_type == GIBBER_STANZA_SUB_TYPE_ERROR)
+ if (sub_type == WOCKY_STANZA_SUB_TYPE_ERROR)
{
- GibberXmppNode *error_node = gibber_xmpp_node_get_child (
+ WockyNode *error_node = wocky_node_get_child (
wocky_stanza_get_top_node (msg), "error");
if (error_node != NULL)
diff --git a/lib/gibber/gibber-xmpp-error.h b/lib/gibber/gibber-xmpp-error.h
index 605300e3..8e7a540a 100644
--- a/lib/gibber/gibber-xmpp-error.h
+++ b/lib/gibber/gibber-xmpp-error.h
@@ -22,7 +22,7 @@
#define __GIBBER_XMPP_ERROR_H__
#include <glib.h>
-#include "gibber-xmpp-stanza.h"
+#include <wocky/wocky-stanza.h>
typedef enum {
XMPP_ERROR_UNDEFINED_CONDITION = 0, /* 500 */
@@ -76,11 +76,11 @@ typedef enum {
GQuark gibber_xmpp_error_quark (void);
#define GIBBER_XMPP_ERROR (gibber_xmpp_error_quark ())
-GibberXmppError gibber_xmpp_error_from_node (GibberXmppNode *error_node);
-GibberXmppNode *gibber_xmpp_error_to_node (GibberXmppError error,
- GibberXmppNode *parent_node, const gchar *errmsg);
+GibberXmppError gibber_xmpp_error_from_node (WockyNode *error_node);
+WockyNode *gibber_xmpp_error_to_node (GibberXmppError error,
+ WockyNode *parent_node, const gchar *errmsg);
const gchar *gibber_xmpp_error_string (GibberXmppError error);
const gchar *gibber_xmpp_error_description (GibberXmppError error);
-GError *gibber_message_get_xmpp_error (GibberXmppStanza *msg);
+GError *gibber_message_get_xmpp_error (WockyStanza *msg);
#endif /* __GIBBER_XMPP_ERROR_H__ */
diff --git a/lib/gibber/gibber-xmpp-node.c b/lib/gibber/gibber-xmpp-node.c
deleted file mode 100644
index 852e8a30..00000000
--- a/lib/gibber/gibber-xmpp-node.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * gibber-xmpp-node.c - Code for Gibber xmpp nodes
- * Copyright (C) 2006 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd@luon.net>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <glib.h>
-#include <string.h>
-
-#include "gibber-xmpp-node.h"
diff --git a/lib/gibber/gibber-xmpp-node.h b/lib/gibber/gibber-xmpp-node.h
deleted file mode 100644
index 7d2a9f91..00000000
--- a/lib/gibber/gibber-xmpp-node.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * gibber-xmpp-node.h - Header for Gibber xmpp nodes
- * Copyright (C) 2006 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd@luon.net>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __GIBBER_XMPP_NODE_H__
-#define __GIBBER_XMPP_NODE_H__
-
-#include <glib.h>
-#include <wocky/wocky-node.h>
-
-G_BEGIN_DECLS
-
-typedef WockyNode GibberXmppNode;
-
-#define gibber_xmpp_node_each_child wocky_node_each_child
-#define gibber_xmpp_node_get_attribute wocky_node_get_attribute
-#define gibber_xmpp_node_get_attribute_ns wocky_node_get_attribute_ns
-#define gibber_xmpp_node_set_attribute wocky_node_set_attribute
-#define gibber_xmpp_node_set_attribute_ns wocky_node_set_attribute_ns
-#define gibber_xmpp_node_set_attribute_n wocky_node_set_attribute_n
-#define gibber_xmpp_node_set_attribute_n_ns wocky_node_set_attribute_n_ns
-#define gibber_xmpp_node_get_child wocky_node_get_child
-#define gibber_xmpp_node_get_child_ns wocky_node_get_child_ns
-#define gibber_xmpp_node_add_child wocky_node_add_child
-#define gibber_xmpp_node_add_child_ns wocky_node_add_child_ns
-#define gibber_xmpp_node_add_child_with_content wocky_node_add_child_with_content
-#define gibber_xmpp_node_add_child_with_content_ns wocky_node_add_child_with_content_ns
-
-#define gibber_xmpp_node_get_ns wocky_node_get_ns
-#define gibber_xmpp_node_get_language wocky_node_get_language
-#define gibber_xmpp_node_set_language wocky_node_set_language
-#define gibber_xmpp_node_set_language_n wocky_node_set_language_n
-#define gibber_xmpp_node_set_content wocky_node_set_content
-#define gibber_xmpp_node_append_content wocky_node_append_content
-#define gibber_xmpp_node_append_content_n wocky_node_append_content_n
-#define gibber_xmpp_node_to_string wocky_node_to_string
-
-#define gibber_xmpp_node_new_ns wocky_node_new
-#define gibber_xmpp_node_free wocky_node_free
-
-G_END_DECLS
-
-#endif /* #ifndef __GIBBER_XMPP_NODE_H__*/
diff --git a/lib/gibber/gibber-xmpp-reader.c b/lib/gibber/gibber-xmpp-reader.c
index a21dd017..7b265136 100644
--- a/lib/gibber/gibber-xmpp-reader.c
+++ b/lib/gibber/gibber-xmpp-reader.c
@@ -22,7 +22,7 @@
#include "gibber-signals-marshal.h"
-#include "gibber-xmpp-stanza.h"
+#include <wocky/wocky-stanza.h>
#define XMPP_STREAM_NAMESPACE "http://etherx.jabber.org/streams"
@@ -75,7 +75,7 @@ gibber_xmpp_reader_class_init (GibberXmppReaderClass *gibber_xmpp_reader_class)
0,
NULL, NULL,
g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1, GIBBER_TYPE_XMPP_STANZA);
+ G_TYPE_NONE, 1, WOCKY_TYPE_STANZA);
signals[STREAM_OPENED] = g_signal_new ("stream-opened",
G_OBJECT_CLASS_TYPE(gibber_xmpp_reader_class),
diff --git a/lib/gibber/gibber-xmpp-stanza.c b/lib/gibber/gibber-xmpp-stanza.c
deleted file mode 100644
index 0cbf02aa..00000000
--- a/lib/gibber/gibber-xmpp-stanza.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * gibber-xmpp-stanza.c - Source for GibberXmppStanza
- * Copyright (C) 2006 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd@luon.net>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gibber-xmpp-stanza.h"
diff --git a/lib/gibber/gibber-xmpp-stanza.h b/lib/gibber/gibber-xmpp-stanza.h
deleted file mode 100644
index 65cb9cd6..00000000
--- a/lib/gibber/gibber-xmpp-stanza.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * gibber-xmpp-stanza.h - Header for GibberXmppStanza
- * Copyright (C) 2006 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd@luon.net>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __GIBBER_XMPP_STANZA_H__
-#define __GIBBER_XMPP_STANZA_H__
-
-#include <glib-object.h>
-#include "gibber-xmpp-node.h"
-#include <wocky/wocky-stanza.h>
-
-G_BEGIN_DECLS
-
-typedef WockyStanza GibberXmppStanza;
-typedef WockyStanzaClass GibberXmppStanzaClass;
-
-#define GIBBER_TYPE_XMPP_STANZA WOCKY_TYPE_STANZA
-#define GIBBER_XMPP_STANZA(obj) (WOCKY_STANZA (obj))
-#define GIBBER_XMPP_STANZA_CLASS(klass) (WOCKY_STANZA_CLASS (klass))
-#define GIBBER_IS_XMPP_STANZA(obj) (WOCKY_IS_STANZA (obj))
-#define GIBBER_IS_XMPP_STANZA_CLASS(klass) (WOCKY_IS_STANZA_CLASS (klass))
-#define GIBBER_XMPP_STANZA_GET_CLASS(obj) (WOCKY_STANZA_GET_CLASS (obj))
-
-#define GIBBER_STANZA_TYPE_NONE WOCKY_STANZA_TYPE_NONE
-#define GIBBER_STANZA_TYPE_MESSAGE WOCKY_STANZA_TYPE_MESSAGE
-#define GIBBER_STANZA_TYPE_PRESENCE WOCKY_STANZA_TYPE_PRESENCE
-#define GIBBER_STANZA_TYPE_IQ WOCKY_STANZA_TYPE_IQ
-#define GIBBER_STANZA_TYPE_STREAM WOCKY_STANZA_TYPE_STREAM
-#define GIBBER_STANZA_TYPE_STREAM_FEATURES WOCKY_STANZA_TYPE_STREAM_FEATURES
-#define GIBBER_STANZA_TYPE_AUTH WOCKY_STANZA_TYPE_AUTH
-#define GIBBER_STANZA_TYPE_CHALLENGE WOCKY_STANZA_TYPE_CHALLENGE
-#define GIBBER_STANZA_TYPE_RESPONSE WOCKY_STANZA_TYPE_RESPONSE
-#define GIBBER_STANZA_TYPE_SUCCESS WOCKY_STANZA_TYPE_SUCCESS
-#define GIBBER_STANZA_TYPE_FAILURE WOCKY_STANZA_TYPE_FAILURE
-#define GIBBER_STANZA_TYPE_STREAM_ERROR WOCKY_STANZA_TYPE_STREAM_ERROR
-#define GIBBER_STANZA_TYPE_UNKNOWN WOCKY_STANZA_TYPE_UNKNOWN
-#define NUM_GIBBER_STANZA_TYPE NUM_WOCKY_STANZA_TYPE
-typedef WockyStanzaType GibberStanzaType;
-
-#define GIBBER_STANZA_SUB_TYPE_NONE WOCKY_STANZA_SUB_TYPE_NONE
-#define GIBBER_STANZA_SUB_TYPE_AVAILABLE WOCKY_STANZA_SUB_TYPE_AVAILABLE
-#define GIBBER_STANZA_SUB_TYPE_NORMAL WOCKY_STANZA_SUB_TYPE_NORMAL
-#define GIBBER_STANZA_SUB_TYPE_CHAT WOCKY_STANZA_SUB_TYPE_CHAT
-#define GIBBER_STANZA_SUB_TYPE_GROUPCHAT WOCKY_STANZA_SUB_TYPE_GROUPCHAT
-#define GIBBER_STANZA_SUB_TYPE_HEADLINE WOCKY_STANZA_SUB_TYPE_HEADLINE
-#define GIBBER_STANZA_SUB_TYPE_UNAVAILABLE WOCKY_STANZA_SUB_TYPE_UNAVAILABLE
-#define GIBBER_STANZA_SUB_TYPE_PROBE WOCKY_STANZA_SUB_TYPE_PROBE
-#define GIBBER_STANZA_SUB_TYPE_SUBSCRIBE WOCKY_STANZA_SUB_TYPE_SUBSCRIBE
-#define GIBBER_STANZA_SUB_TYPE_UNSUBSCRIBE WOCKY_STANZA_SUB_TYPE_UNSUBSCRIBE
-#define GIBBER_STANZA_SUB_TYPE_SUBSCRIBED WOCKY_STANZA_SUB_TYPE_SUBSCRIBED
-#define GIBBER_STANZA_SUB_TYPE_UNSUBSCRIBED WOCKY_STANZA_SUB_TYPE_UNSUBSCRIBED
-#define GIBBER_STANZA_SUB_TYPE_GET WOCKY_STANZA_SUB_TYPE_GET
-#define GIBBER_STANZA_SUB_TYPE_SET WOCKY_STANZA_SUB_TYPE_SET
-#define GIBBER_STANZA_SUB_TYPE_RESULT WOCKY_STANZA_SUB_TYPE_RESULT
-#define GIBBER_STANZA_SUB_TYPE_ERROR WOCKY_STANZA_SUB_TYPE_ERROR
-#define GIBBER_STANZA_SUB_TYPE_UNKNOWN WOCKY_STANZA_SUB_TYPE_UNKNOWN
-#define NUM_GIBBER_STANZA_SUB_TYPE NUM_WOCKY_STANZA_SUB_TYPE
-typedef WockyStanzaSubType GibberStanzaSubType;
-
-#define GIBBER_NODE WOCKY_NODE_START
-#define GIBBER_NODE_TEXT WOCKY_NODE_TEXT
-#define GIBBER_NODE_END WOCKY_NODE_END
-#define GIBBER_NODE_ATTRIBUTE WOCKY_NODE_ATTRIBUTE
-#define GIBBER_NODE_XMLNS WOCKY_NODE_XMLNS
-#define GIBBER_NODE_ASSIGN_TO WOCKY_NODE_ASSIGN_TO
-#define GIBBER_STANZA_END NULL
-
-#define gibber_xmpp_stanza_new_ns wocky_stanza_new
-#define gibber_xmpp_stanza_build wocky_stanza_build
-#define gibber_xmpp_stanza_get_type_info wocky_stanza_get_type_info
-
-G_END_DECLS
-
-#endif /* #ifndef __GIBBER_XMPP_STANZA_H__*/
diff --git a/lib/gibber/gibber-xmpp-writer.h b/lib/gibber/gibber-xmpp-writer.h
index ac6d529b..5a0247b4 100644
--- a/lib/gibber/gibber-xmpp-writer.h
+++ b/lib/gibber/gibber-xmpp-writer.h
@@ -55,7 +55,7 @@ gibber_xmpp_writer_stream_open (GibberXmppWriter *writer,
static inline gboolean
gibber_xmpp_writer_write_stanza (GibberXmppWriter *writer,
- GibberXmppStanza *stanza, const guint8 **data, gsize *length,
+ WockyStanza *stanza, const guint8 **data, gsize *length,
GError **error)
{
/* can't fail */
diff --git a/lib/gibber/tests/Makefile.am b/lib/gibber/tests/Makefile.am
index 97d7a3e3..03e3f6eb 100644
--- a/lib/gibber/tests/Makefile.am
+++ b/lib/gibber/tests/Makefile.am
@@ -4,34 +4,46 @@ include $(top_srcdir)/rules/check.mak
SUPPRESSIONS=valgrind.supp dlopen.supp
+AM_CFLAGS = $(ERROR_CFLAGS) @GLIB_CFLAGS@ @LIBXML2_CFLAGS@ @WOCKY_CFLAGS@ \
+ @DBUS_CFLAGS@ \
+ -I $(top_srcdir) -I $(top_builddir) \
+ -I $(top_srcdir)/lib -I $(top_builddir)/lib
+
+AM_LDFLAGS = @GLIB_LIBS@ \
+ $(top_builddir)/lib/gibber/libgibber.la
+
+clean-local:
+ -rm -rf outputs
+
+SUBDIRS = inputs
+
+EXTRA_DIST = \
+ test-transport.h \
+ test-transport.c
+
+$(check_SCRIPTS): always-run
+ chmod +x $(srcdir)/$@
+
+.PHONY: always-run
+
+# ------------------------------------------------------------------------------
+# Test programs
+
# Teach it how to make libgibber.la
$(top_builddir)/lib/gibber/libgibber.la:
${MAKE} -C $(top_builddir)/lib/gibber libgibber.la
.PHONY: $(top_builddir)/lib/gibber/libgibber.la
-TESTS = \
- run-xmpp-connection-test.sh
+TESTS =
-check_PROGRAMS = \
- test-xmpp-connection \
+noinst_PROGRAMS = \
test-r-multicast-transport-io
-check_SCRIPTS = run-xmpp-connection-test.sh
-
-EXTRA_DIST = simplemeshtest.py mesh.py $(check_SCRIPTS)
+check_SCRIPTS =
-test_xmpp_connection_SOURCES = \
- test-xmpp-connection.c \
- test-transport.c \
- test-transport.h
-
-test_xmpp_connection_LDADD = \
- $(top_builddir)/lib/gibber/libgibber.la \
- $(AM_LDFLAGS)
-
-test_xmpp_connection_CFLAGS = \
- $(AM_CFLAGS)
+EXTRA_DIST += \
+ simplemeshtest.py mesh.py $(check_SCRIPTS)
test_r_multicast_transport_io_SOURCES = \
test-r-multicast-transport-io.c \
@@ -45,66 +57,28 @@ test_r_multicast_transport_io_LDADD = \
test_r_multicast_transport_io_CFLAGS = \
$(AM_CFLAGS)
+# ------------------------------------------------------------------------------
+# Checks
-if HAVE_CHECK
-check_PROGRAMS += check-main
-TESTS += check-main
-check_main_SOURCES = \
- check-main.c \
- check-helpers.c \
- check-helpers.h \
- check-gibber.h \
- check-gibber-xmpp-node.c \
- check-gibber-xmpp-reader.c \
- check-gibber-r-multicast-causal-transport.c \
- test-transport.c \
- test-transport.h \
- check-gibber-xmpp-connection.c \
- check-gibber-r-multicast-packet.c \
- check-gibber-r-multicast-sender.c \
- check-gibber-xmpp-stanza.c \
- check-gibber-iq-helper.c \
- check-gibber-listener.c \
- check-gibber-xmpp-connection-listener.c \
- check-gibber-xmpp-error.c \
- check-gibber-unix-transport.c
-
-check_main_LDADD = \
- @CHECK_LIBS@ \
- $(top_builddir)/lib/gibber/libgibber.la \
- $(AM_LDFLAGS)
-
-check_main_CFLAGS = \
- @CHECK_CFLAGS@ \
- $(AM_CFLAGS)
+check_PROGRAMS = \
+ check-gibber-xmpp-reader \
+ check-gibber-r-multicast-causal-transport \
+ check-gibber-r-multicast-packet \
+ check-gibber-r-multicast-sender \
+ check-gibber-listener \
+ check-gibber-xmpp-error \
+ check-gibber-unix-transport
-endif
+test: ${TEST_PROGS}
+ gtester -k --verbose $(check_PROGRAMS)
-AM_CFLAGS = $(ERROR_CFLAGS) @GLIB_CFLAGS@ @LIBXML2_CFLAGS@ @WOCKY_CFLAGS@ \
- @DBUS_CFLAGS@ \
- -I $(top_srcdir) -I $(top_builddir) \
- -I $(top_srcdir)/lib -I $(top_builddir)/lib
-
-AM_LDFLAGS = @GLIB_LIBS@
+# ------------------------------------------------------------------------------
+# Code Style
# Coding style checks
check_c_sources = \
- $(test_xmpp_connection_SOURCES) \
$(test_r_multicast_transport_io_SOURCES)
-if HAVE_CHECK
- check_c_sources += $(check_main_SOURCES)
-endif
-
include $(top_srcdir)/tools/check-coding-style.mk
-check-local: check-coding-style
-
-clean-local:
- -rm -rf outputs
-SUBDIRS = inputs
-
-$(check_SCRIPTS): always-run
- chmod +x $(srcdir)/$@
-
-.PHONY: always-run
+check-local: check-coding-style test
diff --git a/lib/gibber/tests/check-gibber-iq-helper.c b/lib/gibber/tests/check-gibber-iq-helper.c
deleted file mode 100644
index 345f1d28..00000000
--- a/lib/gibber/tests/check-gibber-iq-helper.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * check-gibber-iq-helper.c - Test for GibberIqHelper
- * Copyright (C) 2007 Collabora Ltd.
- * @author Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <dbus/dbus-glib.h>
-
-#include <gibber/gibber-xmpp-stanza.h>
-#include <gibber/gibber-iq-helper.h>
-#include <gibber/gibber-xmpp-error.h>
-#include <gibber/gibber-namespaces.h>
-
-#include <check.h>
-#include "check-helpers.h"
-#include "check-gibber.h"
-
-#include "test-transport.h"
-
-gboolean received_reply = FALSE;
-
-static gboolean
-send_hook (GibberTransport *transport,
- const guint8 *data,
- gsize length,
- GError **error,
- gpointer user_data)
-{
- test_transport_write (TEST_TRANSPORT (transport), data, length);
- return TRUE;
-}
-
-static GibberXmppConnection *
-create_xmpp_connection (void)
-{
- GibberXmppConnection *xmpp_connection;
- TestTransport *transport;
-
- transport = test_transport_new (send_hook, NULL);
- xmpp_connection = gibber_xmpp_connection_new (GIBBER_TRANSPORT (transport));
- gibber_xmpp_connection_open (xmpp_connection, "to", "from", "1.0");
-
- g_object_unref (transport);
-
- return xmpp_connection;
-}
-
-START_TEST (test_iq_helper_new)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- fail_unless (iq_helper != NULL);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-static void
-reply_func (GibberIqHelper *helper,
- GibberXmppStanza *sent_stanza,
- GibberXmppStanza *reply_stanza,
- GObject *object,
- gpointer user_data)
-{
- received_reply = TRUE;
-}
-
-static void
-send_stanza_and_reply (GibberXmppConnection *xmpp_connection,
- GibberIqHelper *iq_helper,
- GibberXmppStanza *stanza,
- GibberXmppStanza *reply)
-{
- gboolean result;
-
- if (stanza != NULL)
- {
- result = gibber_iq_helper_send_with_reply (iq_helper, stanza, reply_func,
- NULL, NULL, NULL);
- fail_unless (result);
- }
-
- if (reply != NULL)
- {
- result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
- fail_unless (result);
- }
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
-
-}
-
-START_TEST (test_send_with_reply)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza, *reply;
-
- received_reply = FALSE;
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_NODE_ATTRIBUTE, "id", "69",
- GIBBER_STANZA_END);
-
- /* Reply of the stanza */
- reply = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_RESULT,
- "to", "from",
- GIBBER_NODE_ATTRIBUTE, "id", "69",
- GIBBER_STANZA_END);
-
- send_stanza_and_reply (xmpp_connection, iq_helper, stanza, reply);
- fail_unless (received_reply);
-
- g_object_unref (stanza);
- g_object_unref (reply);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-START_TEST (test_send_without_reply)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza;
-
- received_reply = FALSE;
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_NODE_ATTRIBUTE, "id", "69",
- GIBBER_STANZA_END);
-
- send_stanza_and_reply (xmpp_connection, iq_helper, stanza, NULL);
- fail_unless (!received_reply);
-
- g_object_unref (stanza);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-START_TEST (test_send_with_bad_reply_type)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza, *reply;
-
- received_reply = FALSE;
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_NODE_ATTRIBUTE, "id", "69",
- GIBBER_STANZA_END);
-
- /* Reply can't be of sub type "get" */
- reply = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_GET,
- "to", "from",
- GIBBER_NODE_ATTRIBUTE, "id", "69",
- GIBBER_STANZA_END);
-
- send_stanza_and_reply (xmpp_connection, iq_helper, stanza, reply);
- fail_unless (!received_reply);
-
- g_object_unref (stanza);
- g_object_unref (reply);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-START_TEST (test_send_without_id)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza, *reply;
- gboolean result;
- const gchar *id;
-
- received_reply = FALSE;
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_STANZA_END);
-
- result = gibber_iq_helper_send_with_reply (iq_helper, stanza, reply_func,
- NULL, NULL, NULL);
- fail_unless (result);
-
- /* gibber_iq_helper_send_with_reply generated an id */
- id = gibber_xmpp_node_get_attribute (wocky_stanza_get_top_node (stanza),
- "id");
-
- reply = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_RESULT,
- "to", "from",
- GIBBER_NODE_ATTRIBUTE, "id", id,
- GIBBER_STANZA_END);
-
- result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
- fail_unless (result);
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
-
- fail_unless (received_reply);
-
- g_object_unref (stanza);
- g_object_unref (reply);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-START_TEST (test_new_result_reply)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza, *reply;
- gboolean result;
-
- received_reply = FALSE;
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_STANZA_END);
-
- result = gibber_iq_helper_send_with_reply (iq_helper, stanza, reply_func,
- NULL, NULL, NULL);
- fail_unless (result);
-
- reply = gibber_iq_helper_new_result_reply (stanza);
- fail_unless (reply != NULL);
- fail_unless (strcmp (wocky_stanza_get_top_node (reply)->name, "iq") == 0);
- fail_unless (strcmp (
- gibber_xmpp_node_get_attribute (wocky_stanza_get_top_node (reply),
- "type"),
- "result") == 0);
- result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
- fail_unless (result);
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
-
- fail_unless (received_reply);
-
- g_object_unref (stanza);
- g_object_unref (reply);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-START_TEST (test_new_error_reply)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza, *reply;
- GibberXmppNode *error_node, *node;
- gboolean result;
-
- received_reply = FALSE;
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_STANZA_END);
-
- result = gibber_iq_helper_send_with_reply (iq_helper, stanza, reply_func,
- NULL, NULL, NULL);
- fail_unless (result);
-
- reply = gibber_iq_helper_new_error_reply (stanza,
- XMPP_ERROR_BAD_REQUEST, "test");
- fail_unless (reply != NULL);
- fail_unless (strcmp (wocky_stanza_get_top_node (reply)->name, "iq") == 0);
- fail_unless (strcmp (gibber_xmpp_node_get_attribute (
- wocky_stanza_get_top_node (reply), "type"),
- "error") == 0);
-
- error_node = gibber_xmpp_node_get_child (wocky_stanza_get_top_node (reply),
- "error");
- fail_if (error_node == NULL);
- fail_if (strcmp (gibber_xmpp_node_get_attribute (error_node, "code"),
- "400") != 0);
- fail_if (strcmp (gibber_xmpp_node_get_attribute (error_node, "type"),
- "modify") != 0);
-
- node = gibber_xmpp_node_get_child_ns (error_node, "bad-request",
- GIBBER_XMPP_NS_STANZAS);
- fail_if (node == NULL);
-
- node = gibber_xmpp_node_get_child (error_node, "text");
- fail_if (node == NULL);
- fail_if (strcmp (node->content, "test") != 0);
-
- result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
- fail_unless (result);
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
-
- fail_unless (received_reply);
-
- g_object_unref (stanza);
- g_object_unref (reply);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-START_TEST (test_send_with_object_living)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza, *reply;
- gboolean result;
- GObject *object;
-
- received_reply = FALSE;
-
- /* We don't care about the TestTransport, we just need a GObject */
- object = g_object_new (TEST_TYPE_TRANSPORT, NULL);
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_STANZA_END);
-
- result = gibber_iq_helper_send_with_reply (iq_helper, stanza, reply_func,
- object, NULL, NULL);
- fail_unless (result);
-
- reply = gibber_iq_helper_new_result_reply (stanza);
- fail_unless (reply != NULL);
- result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
- fail_unless (result);
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
-
- fail_unless (received_reply);
-
- g_object_unref (stanza);
- g_object_unref (reply);
- g_object_unref (object);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-START_TEST (test_send_with_object_destroyed)
-{
- GibberXmppConnection *xmpp_connection = create_xmpp_connection ();
- GibberIqHelper *iq_helper = gibber_iq_helper_new (xmpp_connection);
- GibberXmppStanza *stanza, *reply;
- gboolean result;
- GObject *object;
-
- received_reply = FALSE;
-
- /* We don't care about the TestTransport, we just need a GObject */
- object = g_object_new (TEST_TYPE_TRANSPORT, NULL);
-
- stanza = gibber_xmpp_stanza_build (GIBBER_STANZA_TYPE_IQ,
- GIBBER_STANZA_SUB_TYPE_SET,
- "from", "to",
- GIBBER_STANZA_END);
-
- result = gibber_iq_helper_send_with_reply (iq_helper, stanza, reply_func,
- object, NULL, NULL);
- fail_unless (result);
-
- g_object_unref (object);
-
- reply = gibber_iq_helper_new_result_reply (stanza);
- fail_unless (reply != NULL);
- result = gibber_xmpp_connection_send (xmpp_connection, reply, NULL);
- fail_unless (result);
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
-
- /* Object was destroyed before we send the reply so we don't receive
- * the reply */
- fail_unless (!received_reply);
-
- g_object_unref (stanza);
- g_object_unref (reply);
- g_object_unref (xmpp_connection);
- g_object_unref (iq_helper);
-}
-END_TEST
-
-TCase *
-make_gibber_iq_helper_tcase (void)
-{
- TCase *tc = tcase_create ("IQ helper");
- tcase_add_test (tc, test_iq_helper_new);
- tcase_add_test (tc, test_send_with_reply);
- tcase_add_test (tc, test_send_without_reply);
- tcase_add_test (tc, test_send_with_bad_reply_type);
- tcase_add_test (tc, test_send_without_id);
- tcase_add_test (tc, test_new_result_reply);
- tcase_add_test (tc, test_new_error_reply);
- tcase_add_test (tc, test_send_with_object_living);
- tcase_add_test (tc, test_send_with_object_destroyed);
-
- return tc;
-}
diff --git a/lib/gibber/tests/check-gibber-listener.c b/lib/gibber/tests/check-gibber-listener.c
index 4a1bce06..3ca01407 100644
--- a/lib/gibber/tests/check-gibber-listener.c
+++ b/lib/gibber/tests/check-gibber-listener.c
@@ -34,9 +34,6 @@
#include <gibber/gibber-unix-transport.h>
#include <gibber/gibber-listener.h>
-#include <check.h>
-#include "check-gibber.h"
-
gboolean got_connection;
gboolean signalled;
@@ -77,7 +74,8 @@ connect_to_port (int port, GMainLoop *loop)
return GIBBER_TRANSPORT (transport);
}
-START_TEST (test_unix_listen)
+static void
+test_unix_listen (void)
{
GibberListener *listener_unix;
GibberUnixTransport *unix_transport;
@@ -87,34 +85,34 @@ START_TEST (test_unix_listen)
gchar *path = "/tmp/check-gibber-listener-socket";
ret = unlink (path);
- fail_if (ret == -1 && errno != ENOENT);
+ g_assert (!(ret == -1 && errno != ENOENT));
mainloop = g_main_loop_new (NULL, FALSE);
listener_unix = gibber_listener_new ();
- fail_if (listener_unix == NULL);
+ g_assert (listener_unix != NULL);
g_signal_connect (listener_unix, "new-connection",
G_CALLBACK (new_connection_cb), mainloop);
ret = gibber_listener_listen_socket (listener_unix, path, FALSE, &error);
- fail_if (ret != TRUE);
+ g_assert (ret == TRUE);
unix_transport = gibber_unix_transport_new ();
ret = gibber_unix_transport_connect (unix_transport, path, &error);
- fail_if (ret != TRUE);
+ g_assert (ret == TRUE);
- if (!signalled)
- g_main_loop_run (mainloop);
+ g_main_loop_run (mainloop);
- fail_if (!got_connection, "Failed to connect");
+ g_assert (got_connection && "Failed to connect");
g_object_unref (listener_unix);
g_object_unref (unix_transport);
g_main_loop_unref (mainloop);
-} END_TEST
+}
-START_TEST (test_tcp_listen)
+static void
+test_tcp_listen (void)
{
GibberListener *listener;
GibberListener *listener_without_port;
@@ -128,13 +126,13 @@ START_TEST (test_tcp_listen)
/* tcp socket tests without a specified port */
listener_without_port = gibber_listener_new ();
- fail_if (listener_without_port == NULL);
+ g_assert (listener_without_port != NULL);
g_signal_connect (listener_without_port, "new-connection",
G_CALLBACK (new_connection_cb), mainloop);
ret = gibber_listener_listen_tcp (listener_without_port, 0, &error);
- fail_if (ret != TRUE);
+ g_assert (ret == TRUE);
port = gibber_listener_get_port (listener_without_port);
signalled = FALSE;
@@ -142,14 +140,14 @@ START_TEST (test_tcp_listen)
if (!signalled)
g_main_loop_run (mainloop);
- fail_if (!got_connection, "Failed to connect");
+ g_assert (got_connection);
g_object_unref (listener_without_port);
g_object_unref (transport);
/* tcp socket tests with a specified port */
listener = gibber_listener_new ();
- fail_if (listener == NULL);
+ g_assert (listener != NULL);
g_signal_connect (listener, "new-connection", G_CALLBACK (new_connection_cb),
mainloop);
@@ -159,20 +157,20 @@ START_TEST (test_tcp_listen)
if (gibber_listener_listen_tcp (listener, port, &error))
break;
- fail_if (!g_error_matches (error, GIBBER_LISTENER_ERROR,
- GIBBER_LISTENER_ERROR_ADDRESS_IN_USE));
+ g_assert_error (error, GIBBER_LISTENER_ERROR,
+ GIBBER_LISTENER_ERROR_ADDRESS_IN_USE);
g_error_free (error);
error = NULL;
}
- fail_if (port >= 5400);
- fail_if (port != gibber_listener_get_port (listener));
+ g_assert (port < 5400);
+ g_assert (port == gibber_listener_get_port (listener));
/* try a second listener on the same port */
listener2 = gibber_listener_new ();
- fail_if (listener2 == NULL);
- fail_if (gibber_listener_listen_tcp (listener2, port, &error));
- fail_if (!g_error_matches (error, GIBBER_LISTENER_ERROR,
- GIBBER_LISTENER_ERROR_ADDRESS_IN_USE));
+ g_assert (listener2 != NULL);
+ g_assert (!gibber_listener_listen_tcp (listener2, port, &error));
+ g_assert_error (error, GIBBER_LISTENER_ERROR,
+ GIBBER_LISTENER_ERROR_ADDRESS_IN_USE);
g_object_unref (listener2);
g_error_free (error);
error = NULL;
@@ -182,7 +180,7 @@ START_TEST (test_tcp_listen)
if (!signalled)
g_main_loop_run (mainloop);
- fail_if (!got_connection, "Failed to connect");
+ g_assert (got_connection);
g_object_unref (listener);
g_object_unref (transport);
@@ -194,18 +192,23 @@ START_TEST (test_tcp_listen)
if (!signalled)
g_main_loop_run (mainloop);
- fail_if (got_connection, "Connected while listening should have stopped");
+ /* Connected while listening should have stopped */
+ g_assert (!got_connection);
g_object_unref (transport);
g_main_loop_unref (mainloop);
-} END_TEST
+}
-TCase *
-make_gibber_listener_tcase (void)
+int
+main (int argc,
+ char **argv)
{
- TCase *tc = tcase_create ("GibberListener");
- tcase_add_test (tc, test_tcp_listen);
- tcase_add_test (tc, test_unix_listen);
- return tc;
+ g_test_init (&argc, &argv, NULL);
+ g_type_init ();
+
+ g_test_add_func ("/gibber/listener/tcp-listen", test_tcp_listen);
+ g_test_add_func ("/gibber/listener/unix-listen", test_unix_listen);
+
+ return g_test_run ();
}
diff --git a/lib/gibber/tests/check-gibber-r-multicast-causal-transport.c b/lib/gibber/tests/check-gibber-r-multicast-causal-transport.c
index 8dc92782..0d9f7427 100644
--- a/lib/gibber/tests/check-gibber-r-multicast-causal-transport.c
+++ b/lib/gibber/tests/check-gibber-r-multicast-causal-transport.c
@@ -24,9 +24,6 @@
#include <gibber/gibber-r-multicast-causal-transport.h>
#include <gibber/gibber-r-multicast-packet.h>
#include "test-transport.h"
-#include "check-gibber.h"
-
-#include <check.h>
/* Numer of polls we expect the id generation to do */
#define ID_GENERATION_EXPECTED_POLLS 3
@@ -45,7 +42,7 @@ create_rmulticast_transport (TestTransport **testtransport,
GibberRMulticastCausalTransport *rmctransport;
t = test_transport_new (test_send_hook, user_data);
- fail_unless (t != NULL);
+ g_assert (t != NULL);
GIBBER_TRANSPORT (t)->max_packet_size = 150;
rmctransport = gibber_r_multicast_causal_transport_new
@@ -66,9 +63,9 @@ static void
rmulticast_connect (GibberRMulticastCausalTransport *transport)
{
- fail_unless (transport != NULL);
+ g_assert (transport != NULL);
- fail_unless (gibber_r_multicast_causal_transport_connect (transport,
+ g_assert (gibber_r_multicast_causal_transport_connect (transport,
FALSE, NULL));
}
@@ -99,7 +96,7 @@ depends_send_hook (GibberTransport *transport,
guint i, n;
packet = gibber_r_multicast_packet_parse (data, length, NULL);
- fail_unless (packet != NULL);
+ g_assert (packet != NULL);
if (packet->type == PACKET_TYPE_WHOIS_REQUEST)
{
@@ -121,7 +118,7 @@ depends_send_hook (GibberTransport *transport,
goto out;
}
- fail_unless (senders[i].name != NULL);
+ g_assert (senders[i].name != NULL);
reply = gibber_r_multicast_packet_new (PACKET_TYPE_WHOIS_REPLY,
senders[i].sender_id, transport->max_packet_size);
@@ -139,7 +136,7 @@ depends_send_hook (GibberTransport *transport,
goto out;
}
- fail_unless (packet->depends->len > 0);
+ g_assert (packet->depends->len > 0);
for (n = 0; n < packet->depends->len; n++)
{
@@ -150,18 +147,18 @@ depends_send_hook (GibberTransport *transport,
GibberRMulticastPacketSenderInfo *, n);
if (senders[i].sender_id == sender_info->sender_id)
{
- fail_unless (senders[i].seen == FALSE);
- fail_unless (senders[i].packet_id + 1 == sender_info->packet_id);
+ g_assert (senders[i].seen == FALSE);
+ g_assert (senders[i].packet_id + 1 == sender_info->packet_id);
senders[i].seen = TRUE;
break;
}
}
- fail_unless (senders[i].name != NULL);
+ g_assert (senders[i].name != NULL);
}
for (i = 0; senders[i].name != NULL ; i++)
{
- fail_unless (senders[i].seen, "Not all senders in depends");
+ g_assert (senders[i].seen && "Not all senders in depends");
}
g_main_loop_quit (loop);
@@ -177,7 +174,7 @@ depends_send_test_data (gpointer data)
GIBBER_R_MULTICAST_CAUSAL_TRANSPORT (data);
guint8 testdata[] = { 1, 2, 3 };
- fail_unless (gibber_transport_send (GIBBER_TRANSPORT (t), testdata,
+ g_assert (gibber_transport_send (GIBBER_TRANSPORT (t), testdata,
3, NULL));
return FALSE;
@@ -221,7 +218,8 @@ depends_connected (GibberTransport *transport,
g_timeout_add (300, depends_send_test_data, rmctransport);
}
-START_TEST (test_depends)
+static void
+test_depends (void)
{
GibberRMulticastCausalTransport *rmctransport;
TestTransport *testtransport;
@@ -242,12 +240,11 @@ START_TEST (test_depends)
for (i = 0 ; senders[i].name != NULL; i++)
{
- fail_unless (senders[i].seen);
+ g_assert (senders[i].seen);
}
g_object_unref (rmctransport);
}
-END_TEST
/* test fragmentation testing */
@@ -266,7 +263,7 @@ fragmentation_send_hook (GibberTransport *transport,
guint8 *payload;
packet = gibber_r_multicast_packet_parse (data, length, NULL);
- fail_unless (packet != NULL);
+ g_assert (packet != NULL);
if (packet->type != PACKET_TYPE_DATA)
{
@@ -276,24 +273,24 @@ fragmentation_send_hook (GibberTransport *transport,
payload = gibber_r_multicast_packet_get_payload (packet, &size);
if (bytes == 0)
- fail_unless
+ g_assert
(packet->data.data.flags == GIBBER_R_MULTICAST_DATA_PACKET_START);
else if (bytes + size < TEST_DATA_SIZE)
- fail_unless (packet->data.data.flags == 0);
+ g_assert (packet->data.data.flags == 0);
bytes += size;
- fail_unless (bytes <= TEST_DATA_SIZE);
+ g_assert (bytes <= TEST_DATA_SIZE);
/* check our bytes */
for (i = 0; i < size; i++)
{
- fail_unless (payload[i] == next_byte);
+ g_assert (payload[i] == next_byte);
next_byte++;
}
if (bytes == TEST_DATA_SIZE)
{
- fail_unless
+ g_assert
(packet->data.data.flags == GIBBER_R_MULTICAST_DATA_PACKET_END);
g_object_unref (packet);
g_main_loop_quit (loop);
@@ -319,11 +316,12 @@ fragmentation_connected (GibberTransport *transport,
testdata[i] = (guint8) (i & 0xff);
}
- fail_unless (gibber_transport_send (GIBBER_TRANSPORT (rmctransport),
+ g_assert (gibber_transport_send (GIBBER_TRANSPORT (rmctransport),
(guint8 *) testdata, TEST_DATA_SIZE, NULL));
}
-START_TEST (test_fragmentation)
+static void
+test_fragmentation (void)
{
GibberRMulticastCausalTransport *rmctransport;
@@ -342,7 +340,6 @@ START_TEST (test_fragmentation)
g_object_unref (rmctransport);
}
-END_TEST
/* test unique id */
@@ -358,7 +355,7 @@ unique_id_send_hook (GibberTransport *transport,
packet = gibber_r_multicast_packet_parse (data, length, NULL);
- fail_unless (packet != NULL);
+ g_assert (packet != NULL);
if (*test_id == 0)
{
@@ -368,9 +365,9 @@ unique_id_send_hook (GibberTransport *transport,
gsize psize;
/* First packet must be a whois request to see if the id is taken */
- fail_unless (packet->type == PACKET_TYPE_WHOIS_REQUEST);
+ g_assert (packet->type == PACKET_TYPE_WHOIS_REQUEST);
/* Sender must be 0 as it couldn't choose a id just yet */
- fail_unless (packet->sender == 0);
+ g_assert (packet->sender == 0);
*test_id = packet->data.whois_request.sender_id;
@@ -385,11 +382,11 @@ unique_id_send_hook (GibberTransport *transport,
}
else
{
- fail_unless (*test_id != packet->sender);
+ g_assert (*test_id != packet->sender);
switch (packet->type)
{
case PACKET_TYPE_WHOIS_REQUEST:
- fail_unless (*test_id != packet->data.whois_request.sender_id);
+ g_assert (*test_id != packet->data.whois_request.sender_id);
break;
case PACKET_TYPE_WHOIS_REPLY:
/* transport sends a unsolicited whois reply after choosing a
@@ -397,7 +394,9 @@ unique_id_send_hook (GibberTransport *transport,
g_main_loop_quit (loop);
break;
default:
- fail ("Unexpected packet type: %x", packet->type);
+ g_warning ("Unexpected packet type: %x", packet->type);
+ g_assert_not_reached ();
+ break;
}
}
@@ -405,7 +404,8 @@ unique_id_send_hook (GibberTransport *transport,
return TRUE;
}
-START_TEST (test_unique_id)
+static void
+test_unique_id (void)
{
/* Test if the multicast transport correctly handles the case that it gets a
* WHOIS_REPLY on one of it's WHOIS_REQUESTS when it's determining a unique
@@ -426,7 +426,6 @@ START_TEST (test_unique_id)
g_object_unref (rmctransport);
}
-END_TEST
/* test id generation conflict */
typedef struct {
@@ -446,14 +445,14 @@ id_generation_conflict_send_hook (GibberTransport *transport,
unique_id_conflict_test_t *test = (unique_id_conflict_test_t *) user_data;
packet = gibber_r_multicast_packet_parse (data, length, NULL);
- fail_unless (packet != NULL);
+ g_assert (packet != NULL);
if (test->id == 0)
{
/* First packet must be a whois request to see if the id is taken */
- fail_unless (packet->type == PACKET_TYPE_WHOIS_REQUEST);
+ g_assert (packet->type == PACKET_TYPE_WHOIS_REQUEST);
/* Sender must be 0 as it couldn't choose a id just yet */
- fail_unless (packet->sender == 0);
+ g_assert (packet->sender == 0);
test->id = packet->data.whois_request.sender_id;
}
@@ -465,7 +464,7 @@ id_generation_conflict_send_hook (GibberTransport *transport,
if (test->count < test->wait)
{
- fail_unless (test->id == packet->data.whois_request.sender_id);
+ g_assert (test->id == packet->data.whois_request.sender_id);
}
else if (test->count == test->wait)
{
@@ -474,7 +473,7 @@ id_generation_conflict_send_hook (GibberTransport *transport,
guint8 *pdata;
gsize psize;
- fail_unless (test->id == packet->data.whois_request.sender_id);
+ g_assert (test->id == packet->data.whois_request.sender_id);
reply = gibber_r_multicast_packet_new (PACKET_TYPE_WHOIS_REQUEST,
0, transport->max_packet_size);
@@ -487,7 +486,7 @@ id_generation_conflict_send_hook (GibberTransport *transport,
}
else if (test->count > test->wait)
{
- fail_unless (test->id != packet->data.whois_request.sender_id);
+ g_assert (test->id != packet->data.whois_request.sender_id);
}
break;
@@ -495,21 +494,24 @@ id_generation_conflict_send_hook (GibberTransport *transport,
case PACKET_TYPE_WHOIS_REPLY:
/* transport sends a unsolicited whois reply after choosing a
* identifier */
- fail_unless (packet->sender != test->id);
- fail_unless (test->count ==
+ g_assert (packet->sender != test->id);
+ g_assert_cmpuint (test->count, ==,
ID_GENERATION_EXPECTED_POLLS + test->wait);
g_main_loop_quit (loop);
break;
default:
- fail ("Unexpected packet type: %x", packet->type);
+ g_warning ("Unexpected packet type: %x", packet->type);
+ g_assert_not_reached ();
+ break;
}
g_object_unref (packet);
return TRUE;
}
-START_TEST (test_id_generation_conflict)
+static void
+test_id_generation_conflict (gint _i)
{
/* Test if the multicast transport correctly handles the case that it sees
* another WHOIS_REQUEST on one of its WHOIS_REQUESTS when it's determining
@@ -533,18 +535,33 @@ START_TEST (test_id_generation_conflict)
g_object_unref (rmtransport);
}
-END_TEST
+static void
+test_id_generation_conflict_loop (void)
+{
+ gint i;
+ for (i = 0; i < ID_GENERATION_EXPECTED_POLLS; ++i)
+ test_id_generation_conflict (i);
+}
-TCase *
-make_gibber_r_multicast_causal_transport_tcase (void)
+int
+main (int argc,
+ char **argv)
{
- TCase *tc = tcase_create ("Gibber R Multicast Causal transport");
- tcase_add_test (tc, test_unique_id);
- tcase_add_loop_test (tc, test_id_generation_conflict, 0,
- ID_GENERATION_EXPECTED_POLLS);
- tcase_add_test (tc, test_fragmentation);
- tcase_add_test (tc, test_depends);
-
- return tc;
+ g_test_init (&argc, &argv, NULL);
+ g_type_init ();
+
+ g_test_add_func ("/gibber/r-multicast-casual-transport/unique-id",
+ test_unique_id);
+ g_test_add_func (
+ "/gibber/r-multicast-casual-transport/id-generation-conflict",
+ test_id_generation_conflict_loop);
+ g_test_add_func ("/gibber/r-multicast-casual-transport/fragmentation",
+ test_fragmentation);
+ g_test_add_func ("/gibber/r-multicast-casual-transport/depends",
+ test_depends);
+
+ return g_test_run ();
}
+
+#include "test-transport.c"
diff --git a/lib/gibber/tests/check-gibber-r-multicast-packet.c b/lib/gibber/tests/check-gibber-r-multicast-packet.c
index 52bfef41..5d5fcfd8 100644
--- a/lib/gibber/tests/check-gibber-r-multicast-packet.c
+++ b/lib/gibber/tests/check-gibber-r-multicast-packet.c
@@ -3,11 +3,8 @@
#include <gibber/gibber-r-multicast-packet.h>
-#include <check.h>
-#include "check-gibber.h"
-
#define COMPARE(x) G_STMT_START { \
- fail_unless (a->x == b->x); \
+ g_assert (a->x == b->x); \
} G_STMT_END
typedef struct {
@@ -24,7 +21,8 @@ typedef struct {
#define NUMBER_OF_DIFF_TESTS 15
-START_TEST (test_r_multicast_packet_diff)
+static void
+test_r_multicast_packet_diff (gint _i)
{
diff_testcase cases[NUMBER_OF_DIFF_TESTS] =
{ { 0, 0, 0 },
@@ -47,11 +45,19 @@ START_TEST (test_r_multicast_packet_diff)
diff_testcase *c = cases + _i;
gint32 result = gibber_r_multicast_packet_diff (c->a, c->b);
- fail_unless (c->result == result);
+ g_assert (c->result == result);
+}
+
+static void
+test_r_multicast_packet_diff_loop (void)
+{
+ gint i;
+ for (i = 0; i < NUMBER_OF_DIFF_TESTS; ++i)
+ test_r_multicast_packet_diff (i);
}
-END_TEST
-START_TEST (test_data_packet)
+static void
+test_data_packet (void)
{
GibberRMulticastPacket *a;
GibberRMulticastPacket *b;
@@ -87,7 +93,7 @@ START_TEST (test_data_packet)
data = gibber_r_multicast_packet_get_raw_data (a, &len);
b = gibber_r_multicast_packet_parse (data, len, NULL);
- fail_unless (b != NULL);
+ g_assert (b != NULL);
COMPARE (type);
COMPARE (version);
@@ -96,7 +102,7 @@ START_TEST (test_data_packet)
COMPARE (packet_id);
COMPARE (data.data.stream_id);
- fail_unless (a->sender == b->sender);
+ g_assert (a->sender == b->sender);
for (n = 0 ; n < b->depends->len; n++)
{
@@ -106,32 +112,33 @@ START_TEST (test_data_packet)
GibberRMulticastPacketSenderInfo *, n);
if (senders[i].sender_id == s->sender_id)
{
- fail_unless (senders[i].packet_id == s->packet_id);
- fail_unless (senders[i].seen == FALSE);
+ g_assert (senders[i].packet_id == s->packet_id);
+ g_assert (senders[i].seen == FALSE);
senders[i].seen = TRUE;
break;
}
}
- fail_unless (senders[i].sender_id != 0);
+ g_assert (senders[i].sender_id != 0);
}
for (i = 0; senders[i].sender_id != 0 ; i++)
{
- fail_unless (senders[i].seen == TRUE);
+ g_assert (senders[i].seen == TRUE);
}
pdata = gibber_r_multicast_packet_get_payload (b, &plen);
- fail_unless (plen == strlen (payload));
+ g_assert (plen == strlen (payload));
- fail_unless (memcmp (payload, pdata, plen) == 0);
+ g_assert (memcmp (payload, pdata, plen) == 0);
g_object_unref (a);
g_object_unref (b);
-} END_TEST
+}
-START_TEST (test_attempt_join_packet)
+static void
+test_attempt_join_packet (void)
{
GibberRMulticastPacket *a;
GibberRMulticastPacket *b;
@@ -166,14 +173,14 @@ START_TEST (test_attempt_join_packet)
b = gibber_r_multicast_packet_parse (data, len, NULL);
- fail_unless (b != NULL);
+ g_assert (b != NULL);
COMPARE (type);
COMPARE (version);
COMPARE (packet_id);
COMPARE (data.attempt_join.senders->len);
- fail_unless (a->sender == b->sender);
+ g_assert (a->sender == b->sender);
for (n = 0; n < b->depends->len; n++)
{
@@ -183,24 +190,24 @@ START_TEST (test_attempt_join_packet)
GibberRMulticastPacketSenderInfo *, n);
if (senders[i].sender_id == s->sender_id)
{
- fail_unless (senders[i].packet_id == s->packet_id);
- fail_unless (senders[i].seen == FALSE);
+ g_assert (senders[i].packet_id == s->packet_id);
+ g_assert (senders[i].seen == FALSE);
senders[i].seen = TRUE;
break;
}
}
- fail_unless (senders[i].sender_id != 0);
+ g_assert (senders[i].sender_id != 0);
}
for (i = 0; senders[i].sender_id != 0; i++)
{
- fail_unless (senders[i].seen == TRUE);
+ g_assert (senders[i].seen == TRUE);
}
for (i = 0; new_senders[i].sender_id != 0; i++)
{
- fail_unless (new_senders[i].sender_id ==
+ g_assert (new_senders[i].sender_id ==
g_array_index (b->data.attempt_join.senders, guint32, i));
new_senders[i].seen = TRUE;
break;
@@ -208,21 +215,25 @@ START_TEST (test_attempt_join_packet)
for (i = 0; new_senders[i].sender_id != 0; i++)
{
- fail_unless (senders[i].seen == TRUE);
+ g_assert (senders[i].seen == TRUE);
}
g_object_unref (a);
g_object_unref (b);
}
-END_TEST
-TCase *
-make_gibber_r_multicast_packet_tcase (void)
+int
+main (int argc,
+ char **argv)
{
- TCase *tc = tcase_create ("RMulticast Packet");
- tcase_add_test (tc, test_data_packet);
- tcase_add_test (tc, test_attempt_join_packet);
- tcase_add_loop_test (tc, test_r_multicast_packet_diff, 0,
- NUMBER_OF_DIFF_TESTS);
- return tc;
+ g_test_init (&argc, &argv, NULL);
+ g_type_init ();
+
+ g_test_add_func ("/gibber/r-multicast-packet/data-packet", test_data_packet);
+ g_test_add_func ("/gibber/r-multicast-packet/attempt-join-packet",
+ test_attempt_join_packet);
+ g_test_add_func ("/gibber/r-multicast-packet/diff",
+ test_r_multicast_packet_diff_loop);
+
+ return g_test_run ();
}
diff --git a/lib/gibber/tests/check-gibber-r-multicast-sender.c b/lib/gibber/tests/check-gibber-r-multicast-sender.c
index b0a4c903..7eb41943 100644
--- a/lib/gibber/tests/check-gibber-r-multicast-sender.c
+++ b/lib/gibber/tests/check-gibber-r-multicast-sender.c
@@ -1,12 +1,29 @@
+/*
+ * check-gibber-r-multicast-sender.c
+ * Copyright (C) 2007 Collabora Ltd.
+ *
+ * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include <gibber/gibber-r-multicast-sender.h>
-#include <check.h>
-#include "check-gibber.h"
-
#define SENDER 4321
#define SENDER_NAME "testsender"
@@ -98,13 +115,13 @@ data_received_cb (GibberRMulticastSender *sender, guint8 stream_id,
for (i = 0 ; lines[i] != NULL && *lines[i] != '\0'; i++) {
guint32 v = atoi (lines[i]);
- fail_unless (v == expected);
- fail_unless ((v % G_MAXUINT8) - i == stream_id);
+ g_assert (v == expected);
+ g_assert ((v % G_MAXUINT8) - i == stream_id);
expected++;
}
/* serial % 3 is send out in a single packet the other two together.
* So expected can't be % 3 == 2 here */
- fail_if (expected % 3 == 2);
+ g_assert_cmpuint (expected % 3, !=, 2);
if (expected == serial_offset + NR_PACKETS
|| expected == serial_offset + NR_PACKETS + EXTRA_SEEN) {
@@ -121,7 +138,7 @@ repair_request_cb (GibberRMulticastSender *sender, guint id, gpointer data)
{
GibberRMulticastPacket *p;
- fail_unless (gibber_r_multicast_packet_diff (serial_offset, id) >= 0
+ g_assert (gibber_r_multicast_packet_diff (serial_offset, id) >= 0
|| gibber_r_multicast_packet_diff (id,
serial_offset + NR_PACKETS + EXTRA_SEEN) < 0);
@@ -135,8 +152,8 @@ repair_message_cb (GibberRMulticastSender *sender,
GibberRMulticastPacket *packet, gpointer user_data)
{
- fail_unless (packet->type == PACKET_TYPE_DATA);
- fail_unless (packet->packet_id == REPAIR_PACKET + serial_offset);
+ g_assert (packet->type == PACKET_TYPE_DATA);
+ g_assert (packet->packet_id == REPAIR_PACKET + serial_offset);
g_main_loop_quit ((GMainLoop *) user_data);
}
@@ -168,7 +185,8 @@ add_packet (gpointer data)
#define NUMBER_OF_TESTS 3
-START_TEST (test_sender)
+static void
+test_sender (gint _i)
{
GibberRMulticastSender *s;
GibberRMulticastSenderGroup *group;
@@ -227,7 +245,15 @@ START_TEST (test_sender)
g_main_loop_run (loop);
gibber_r_multicast_sender_group_free (group);
-} END_TEST
+}
+
+static void
+test_sender_loop (void)
+{
+ gint i;
+ for (i = 0; i < NUMBER_OF_TESTS; ++i)
+ test_sender (i);
+}
/* Holding test */
guint32 idle_timer = 0;
@@ -297,12 +323,12 @@ h_idle_next_step (gpointer user_data)
case START_DATA:
case FAIL:
case EXPECT:
- fail ("Should not be reached");
+ g_assert_not_reached ();
break;
case HOLD:
s = g_hash_table_find (d->group->senders,
h_find_sender, e->expected_node);
- fail_unless (s != NULL);
+ g_assert (s != NULL);
d->test_step++;
gibber_r_multicast_sender_hold_data (s, e->hold_id);
h_next_test_step (d);
@@ -310,7 +336,7 @@ h_idle_next_step (gpointer user_data)
case UNHOLD:
s = g_hash_table_find (d->group->senders,
h_find_sender, e->expected_node);
- fail_unless (s != NULL);
+ g_assert (s != NULL);
d->test_step++;
gibber_r_multicast_sender_release_data (s);
h_next_test_step (d);
@@ -336,7 +362,7 @@ h_next_test_step (h_data_t *d)
case UNHOLD_IMMEDIATE:
s = g_hash_table_find (d->group->senders,
h_find_sender, e->expected_node);
- fail_unless (s != NULL);
+ g_assert (s != NULL);
d->test_step++;
gibber_r_multicast_sender_release_data (s);
h_next_test_step (d);
@@ -344,7 +370,7 @@ h_next_test_step (h_data_t *d)
case START_DATA:
s = g_hash_table_find (d->group->senders,
h_find_sender, e->expected_node);
- fail_unless (s != NULL);
+ g_assert (s != NULL);
d->test_step++;
gibber_r_multicast_sender_set_data_start (s, e->hold_id);
h_next_test_step (d);
@@ -352,7 +378,7 @@ h_next_test_step (h_data_t *d)
case FAIL:
s = g_hash_table_find (d->group->senders,
h_find_sender, e->expected_node);
- fail_unless (s != NULL);
+ g_assert (s != NULL);
d->test_step++;
gibber_r_multicast_sender_set_failed (s);
h_next_test_step (d);
@@ -373,11 +399,11 @@ h_received_data_cb (GibberRMulticastSender *sender, guint16 stream_id,
{
h_data_t *d = (h_data_t *) user_data;
- fail_unless (d->expectation[d->test_step].type == EXPECT);
- fail_unless (d->expectation[d->test_step].packet_type == PACKET_TYPE_DATA);
- fail_unless (
- strcmp (d->expectation[d->test_step].expected_node, sender->name) == 0);
- fail_unless (d->expectation[d->test_step].data_stream_id == stream_id);
+ g_assert (d->expectation[d->test_step].type == EXPECT);
+ g_assert (d->expectation[d->test_step].packet_type == PACKET_TYPE_DATA);
+ g_assert_cmpstr (d->expectation[d->test_step].expected_node, ==,
+ sender->name);
+ g_assert (d->expectation[d->test_step].data_stream_id == stream_id);
d->test_step++;
h_next_test_step (d);
@@ -389,10 +415,10 @@ h_received_control_packet_cb (GibberRMulticastSender *sender,
{
h_data_t *d = (h_data_t *) user_data;
- fail_unless (d->expectation[d->test_step].type == EXPECT);
- fail_unless (d->expectation[d->test_step].packet_type == packet->type);
- fail_unless (
- strcmp (d->expectation[d->test_step].expected_node, sender->name) == 0);
+ g_assert (d->expectation[d->test_step].type == EXPECT);
+ g_assert (d->expectation[d->test_step].packet_type == packet->type);
+ g_assert_cmpstr (d->expectation[d->test_step].expected_node, ==,
+ sender->name);
d->test_step++;
h_next_test_step (d);
@@ -565,7 +591,9 @@ add_h_sender (guint32 sender, gchar *name, GibberRMulticastSenderGroup *group,
G_CALLBACK (h_received_control_packet_cb), data);
}
-START_TEST (test_holding) {
+static void
+test_holding (gint _i)
+{
GibberRMulticastSenderGroup *group;
guint32 sender_offset = 0xf00;
/* control packets aren't hold back, thus we get them interleaved at first
@@ -599,7 +627,7 @@ START_TEST (test_holding) {
s0 = g_hash_table_find (group->senders, h_find_sender,
test->setup[i].name);
- fail_unless (s0 != NULL);
+ g_assert (s0 != NULL);
p = gibber_r_multicast_packet_new (test->setup[i].packet_type, s0->id,
1500);
@@ -609,13 +637,13 @@ START_TEST (test_holding) {
{
s1 = g_hash_table_find (group->senders, h_find_sender,
test->setup[i].depend_node);
- fail_unless (s1 != NULL);
- fail_unless (gibber_r_multicast_packet_add_sender_info (p, s1->id,
+ g_assert (s1 != NULL);
+ g_assert (gibber_r_multicast_packet_add_sender_info (p, s1->id,
test->setup[i].depend_packet_id, NULL));
}
if (test->setup[i].packet_type == PACKET_TYPE_DATA)
{
- fail_unless (test->setup[i].data != NULL);
+ g_assert (test->setup[i].data != NULL);
gibber_r_multicast_packet_set_data_info (p,
test->setup[i].data_stream_id,
@@ -637,16 +665,29 @@ START_TEST (test_holding) {
}
while (data.expectation[data.test_step].type != DONE);
- fail_unless (idle_timer == 0);
+ g_assert (idle_timer == 0);
+}
-} END_TEST
+static void
+test_holding_loop (void)
+{
+ gint i;
+ for (i = 0; i < NUMBER_OF_H_TESTS; ++i)
+ test_holding (i);
+}
-TCase *
-make_gibber_r_multicast_sender_tcase (void)
+int
+main (int argc,
+ char **argv)
{
- TCase *tc = tcase_create ("RMulticast Sender");
- tcase_set_timeout (tc, 20);
- tcase_add_loop_test (tc, test_sender, 0, NUMBER_OF_TESTS);
- tcase_add_loop_test (tc, test_holding, 0, NUMBER_OF_H_TESTS );
- return tc;
+ g_test_init (&argc, &argv, NULL);
+ g_type_init ();
+
+ /* Kill this process after 20 seconds */
+ alarm (20);
+
+ g_test_add_func ("/gibber/r-multicast-sender/sender", test_sender_loop);
+ g_test_add_func ("/gibber/r-multicast-sender/holding", test_holding_loop);
+
+ return g_test_run ();
}
diff --git a/lib/gibber/tests/check-gibber-unix-transport.c b/lib/gibber/tests/check-gibber-unix-transport.c
index 6a048fef..c3cfbed8 100644
--- a/lib/gibber/tests/check-gibber-unix-transport.c
+++ b/lib/gibber/tests/check-gibber-unix-transport.c
@@ -34,9 +34,6 @@
#include <gibber/gibber-unix-transport.h>
#include <gibber/gibber-listener.h>
-#include <check.h>
-#include "check-gibber.h"
-
gboolean got_connection;
gboolean received_credentials;
GibberUnixTransport *unix_transport;
@@ -107,7 +104,8 @@ new_connection_cb (GibberListener *listener,
g_main_loop_quit (loop);
}
-START_TEST (test_send_credentials)
+static void
+test_send_credentials (void)
{
GibberListener *listener_unix;
int ret;
@@ -116,33 +114,34 @@ START_TEST (test_send_credentials)
gchar *path = "/tmp/check-gibber-unix-transport-socket";
ret = unlink (path);
- fail_if (ret == -1 && errno != ENOENT);
+ g_assert (!(ret == -1 && errno != ENOENT));
got_connection = FALSE;
mainloop = g_main_loop_new (NULL, FALSE);
listener_unix = gibber_listener_new ();
- fail_if (listener_unix == NULL);
+ g_assert (listener_unix != NULL);
g_signal_connect (listener_unix, "new-connection",
G_CALLBACK (new_connection_cb), mainloop);
ret = gibber_listener_listen_socket (listener_unix, path, FALSE, &error);
- fail_if (ret != TRUE);
+ g_assert (ret == TRUE);
unix_transport = gibber_unix_transport_new ();
ret = gibber_unix_transport_connect (unix_transport, path, &error);
- fail_if (ret != TRUE);
+ g_assert (ret == TRUE);
if (!got_connection)
g_main_loop_run (mainloop);
- fail_if (!got_connection, "Failed to connect");
+ /* "Failed to connect" */
+ g_assert (got_connection);
g_object_unref (listener_unix);
g_object_unref (unix_transport);
g_main_loop_unref (mainloop);
-} END_TEST
+}
static void
get_credentials_cb (GibberUnixTransport *transport,
@@ -184,7 +183,8 @@ receive_new_connection_cb (GibberListener *listener,
g_assert (ok == gibber_unix_transport_supports_credentials ());
}
-START_TEST (test_receive_credentials)
+static void
+test_receive_credentials (void)
{
GibberListener *listener_unix;
int ret;
@@ -193,41 +193,50 @@ START_TEST (test_receive_credentials)
gchar *path = "/tmp/check-gibber-unix-transport-socket";
ret = unlink (path);
- fail_if (ret == -1 && errno != ENOENT);
+ g_assert (!(ret == -1 && errno != ENOENT));
received_credentials = FALSE;
mainloop = g_main_loop_new (NULL, FALSE);
listener_unix = gibber_listener_new ();
- fail_if (listener_unix == NULL);
+ g_assert (listener_unix != NULL);
g_signal_connect (listener_unix, "new-connection",
G_CALLBACK (receive_new_connection_cb), mainloop);
ret = gibber_listener_listen_socket (listener_unix, path, FALSE, &error);
- fail_if (ret != TRUE);
+ g_assert (ret == TRUE);
unix_transport = gibber_unix_transport_new ();
ret = gibber_unix_transport_connect (unix_transport, path, &error);
- fail_if (ret != TRUE);
+ g_assert (ret == TRUE);
#if defined(__linux__)
if (!received_credentials)
g_main_loop_run (mainloop);
- fail_if (!received_credentials, "Failed to receive credentials");
+ /* Failed to receive credentials */
+ g_assert (received_credentials);
#endif
g_object_unref (listener_unix);
g_object_unref (unix_transport);
g_main_loop_unref (mainloop);
-} END_TEST
+}
-TCase *
-make_gibber_unix_transport_tcase (void)
+int
+main (int argc,
+ char **argv)
{
- TCase *tc = tcase_create ("GibberUnixTransport");
- tcase_add_test (tc, test_send_credentials);
- tcase_add_test (tc, test_receive_credentials);
- return tc;
+ g_test_init (&argc, &argv, NULL);
+ g_type_init ();
+
+ alarm (20);
+
+ g_test_add_func ("/gibber/unix-transport/send-credentials",
+ test_send_credentials);
+ g_test_add_func ("/gibber/unix-transport/receive-credentials",
+ test_receive_credentials);
+
+ return g_test_run ();
}
diff --git a/lib/gibber/tests/check-gibber-xmpp-connection-listener.c b/lib/gibber/tests/check-gibber-xmpp-connection-listener.c
deleted file mode 100644
index 8dd19314..00000000
--- a/lib/gibber/tests/check-gibber-xmpp-connection-listener.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * check-gibber-xmpp-connection-listener.c - Test for
- * GibberXmppConnectionListener
- * Copyright (C) 2007 Collabora Ltd.
- * @author Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <gibber/gibber-linklocal-transport.h>
-#include <gibber/gibber-listener.h>
-#include <gibber/gibber-xmpp-connection.h>
-#include <gibber/gibber-xmpp-connection-listener.h>
-
-#include <check.h>
-#include "check-gibber.h"
-
-gboolean got_connection;
-
-static void
-new_connection_cb (GibberXmppConnectionListener *listener,
- GibberXmppConnection *connection,
- struct sockaddr *addr,
- guint size,
- gpointer user_data)
-{
- got_connection = TRUE;
-}
-
-static gboolean
-connect_to_port (int port)
-{
- GibberLLTransport *transport;
- struct sockaddr_in addr;
- gboolean result;
-
- transport = gibber_ll_transport_new ();
-
- memset (&addr, 0, sizeof (addr));
- addr.sin_family = AF_INET;
- addr.sin_port = htons (port);
- addr.sin_addr.s_addr = inet_addr ("127.0.0.1");
-
- result = gibber_ll_transport_open_sockaddr (transport,
- (struct sockaddr_storage *) &addr, NULL);
-
- g_object_unref (transport);
- return result;
-}
-
-START_TEST (test_listen)
-{
- GibberXmppConnectionListener *listener;
- int port;
- gboolean result;
-
- got_connection = FALSE;
-
- listener = gibber_xmpp_connection_listener_new ();
- fail_if (listener == NULL);
-
- g_signal_connect (listener, "new-connection", G_CALLBACK (new_connection_cb),
- NULL);
-
- for (port = 5298; port < 5400; port++)
- {
- GError *error = NULL;
- if (gibber_xmpp_connection_listener_listen (listener, port, &error))
- break;
-
- fail_if (!g_error_matches (error, GIBBER_LISTENER_ERROR,
- GIBBER_LISTENER_ERROR_ADDRESS_IN_USE));
- g_error_free (error);
- error = NULL;
- }
- fail_if (port >= 5400);
-
- result = connect_to_port (port);
- fail_if (result == FALSE);
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
- fail_if (got_connection == FALSE);
-
- g_object_unref (listener);
-
- /* listener is destroyed, connection should be refused now */
- got_connection = FALSE;
- result = connect_to_port (port);
- fail_if (result == TRUE);
-} END_TEST
-
-TCase *
-make_gibber_xmpp_connection_listener_tcase (void)
-{
- TCase *tc = tcase_create ("GibberXmppConnectionListener");
- tcase_add_test (tc, test_listen);
- return tc;
-}
diff --git a/lib/gibber/tests/check-gibber-xmpp-connection.c b/lib/gibber/tests/check-gibber-xmpp-connection.c
deleted file mode 100644
index de9dd1da..00000000
--- a/lib/gibber/tests/check-gibber-xmpp-connection.c
+++ /dev/null
@@ -1,126 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <glib.h>
-
-#include <gibber/gibber-xmpp-connection.h>
-#include <gibber/gibber-transport.h>
-#include "test-transport.h"
-#include "check-gibber.h"
-
-#include <check.h>
-
-struct _FileChunker {
- gchar *contents;
- gsize length;
- gsize size;
- gsize offset;
-};
-typedef struct _FileChunker FileChunker;
-
-static void
-file_chunker_destroy (FileChunker *fc) {
- g_free (fc->contents);
- g_free (fc);
-}
-
-
-static FileChunker *
-file_chunker_new (const gchar *filename, gsize chunk_size) {
- FileChunker *fc;
- fc = g_new0 (FileChunker, 1);
-
- fc->size = chunk_size;
- if (!g_file_get_contents (filename, &fc->contents, &fc->length, NULL)) {
- file_chunker_destroy (fc);
- return NULL;
- }
- return fc;
-}
-
-static gboolean
-file_chunker_get_chunk (FileChunker *fc,
- gchar **chunk,
- gsize *chunk_size) {
- if (fc->offset < fc->length) {
- *chunk_size = MIN (fc->length - fc->offset, fc->size);
- *chunk = fc->contents + fc->offset;
- fc->offset += *chunk_size;
- return TRUE;
- }
- return FALSE;
-}
-
-
-START_TEST (test_instantiation)
-{
- GibberXmppConnection *connection;
- TestTransport *transport;
-
- transport = test_transport_new (NULL, NULL);
- connection = gibber_xmpp_connection_new (GIBBER_TRANSPORT(transport));
-
- fail_if (connection == NULL);
-
- connection = gibber_xmpp_connection_new (NULL);
-
- fail_if (connection == NULL);
-}
-END_TEST
-
-static void
-parse_error_cb (GibberXmppConnection *connection, gpointer user_data)
-{
- gboolean *parse_error_found = user_data;
- *parse_error_found = TRUE;
-}
-
-START_TEST (test_simple_message)
-{
- GibberXmppConnection *connection;
- TestTransport *transport;
- gchar *chunk;
- gsize chunk_length;
- gboolean parse_error_found = FALSE;
- const gchar *srcdir;
- gchar *file;
- FileChunker *fc;
-
- srcdir = g_getenv ("srcdir");
- if (srcdir == NULL)
- {
- file = g_strdup ("inputs/simple-message.input");
- }
- else
- {
- file = g_strdup_printf ("%s/inputs/simple-message.input", srcdir);
- }
-
- fc = file_chunker_new (file, 10);
- fail_if (fc == NULL);
-
- transport = test_transport_new (NULL, NULL);
- connection = gibber_xmpp_connection_new (GIBBER_TRANSPORT(transport));
-
- g_signal_connect (connection, "parse-error",
- G_CALLBACK(parse_error_cb), &parse_error_found);
-
- while (!parse_error_found &&
- file_chunker_get_chunk (fc, &chunk, &chunk_length))
- {
- test_transport_write (transport, (guint8 *) chunk, chunk_length);
- }
-
- fail_if (parse_error_found);
-
- g_free (file);
- file_chunker_destroy (fc);
-} END_TEST
-
-TCase *
-make_gibber_xmpp_connection_tcase (void)
-{
- TCase *tc = tcase_create ("XMPP Connection");
- tcase_add_test (tc, test_instantiation);
- tcase_add_test (tc, test_simple_message);
- return tc;
-}
diff --git a/lib/gibber/tests/check-gibber-xmpp-error.c b/lib/gibber/tests/check-gibber-xmpp-error.c
index b7e4ba26..926b2720 100644
--- a/lib/gibber/tests/check-gibber-xmpp-error.c
+++ b/lib/gibber/tests/check-gibber-xmpp-error.c
@@ -28,35 +28,32 @@
#define DEBUG_FLAG DEBUG_XMPP
#include <gibber/gibber-debug.h>
-#include <check.h>
-#include "check-gibber.h"
-
static void
test_xmpp_error_to_node_with_bad_request (void)
{
- GibberXmppStanza *stanza;
- GibberXmppNode *node;
+ WockyStanza *stanza;
+ WockyNode *node;
const gchar *code;
const gchar *type;
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_ERROR,
+ stanza = wocky_stanza_build (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_ERROR,
"from", "to",
- GIBBER_STANZA_END);
+ NULL);
node = gibber_xmpp_error_to_node (XMPP_ERROR_BAD_REQUEST,
wocky_stanza_get_top_node (stanza), NULL);
- fail_if (node == NULL);
- fail_if (strcmp (node->name, "error") != 0);
+ g_assert (node != NULL);
+ g_assert_cmpstr (node->name, ==, "error");
- code = gibber_xmpp_node_get_attribute (node, "code");
- fail_if (code == NULL || strcmp (code, "400") != 0);
+ code = wocky_node_get_attribute (node, "code");
+ g_assert (!(code == NULL || strcmp (code, "400") != 0));
- type = gibber_xmpp_node_get_attribute (node, "type");
- fail_if (type == NULL || strcmp (type, "modify") != 0);
+ type = wocky_node_get_attribute (node, "type");
+ g_assert (!(type == NULL || strcmp (type, "modify") != 0));
- fail_if (gibber_xmpp_node_get_child_ns (node, "bad-request",
- "urn:ietf:params:xml:ns:xmpp-stanzas") == NULL);
+ g_assert (wocky_node_get_child_ns (node, "bad-request",
+ "urn:ietf:params:xml:ns:xmpp-stanzas") != NULL);
g_object_unref (stanza);
}
@@ -64,77 +61,85 @@ test_xmpp_error_to_node_with_bad_request (void)
static void
test_xmpp_error_to_node_with_si_bad_profile (void)
{
- GibberXmppStanza *stanza;
- GibberXmppNode *node;
+ WockyStanza *stanza;
+ WockyNode *node;
const gchar *code;
const gchar *type;
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_ERROR,
+ stanza = wocky_stanza_build (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_ERROR,
"from", "to",
- GIBBER_STANZA_END);
+ NULL);
node = gibber_xmpp_error_to_node (XMPP_ERROR_SI_BAD_PROFILE,
wocky_stanza_get_top_node (stanza), NULL);
- fail_if (node == NULL);
- fail_if (strcmp (node->name, "error") != 0);
+ g_assert (node != NULL);
+ g_assert_cmpstr (node->name, ==, "error");
- code = gibber_xmpp_node_get_attribute (node, "code");
- fail_if (code == NULL || strcmp (code, "400") != 0);
+ code = wocky_node_get_attribute (node, "code");
+ g_assert (!(code == NULL || strcmp (code, "400") != 0));
- type = gibber_xmpp_node_get_attribute (node, "type");
- fail_if (type == NULL || strcmp (type, "modify") != 0);
+ type = wocky_node_get_attribute (node, "type");
+ g_assert (!(type == NULL || strcmp (type, "modify") != 0));
- fail_if (gibber_xmpp_node_get_child_ns (node, "bad-request",
- "urn:ietf:params:xml:ns:xmpp-stanzas") == NULL);
+ g_assert (wocky_node_get_child_ns (node, "bad-request",
+ "urn:ietf:params:xml:ns:xmpp-stanzas") != NULL);
- fail_if (gibber_xmpp_node_get_child_ns (node, "bad-profile",
- "http://jabber.org/protocol/si") == NULL);
+ g_assert (wocky_node_get_child_ns (node, "bad-profile",
+ "http://jabber.org/protocol/si") != NULL);
g_object_unref (stanza);
}
-START_TEST (test_xmpp_error_to_node)
+static void
+test_xmpp_error_to_node (void)
{
test_xmpp_error_to_node_with_bad_request ();
test_xmpp_error_to_node_with_si_bad_profile ();
-} END_TEST
+}
-START_TEST (test_message_get_xmpp_error)
+static void
+test_message_get_xmpp_error (void)
{
GibberXmppError xmpp_error;
for (xmpp_error = 1; xmpp_error < NUM_XMPP_ERRORS; xmpp_error++)
{
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
GError *error = NULL;
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_ERROR,
+ stanza = wocky_stanza_build (
+ WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_ERROR,
"from", "to",
- GIBBER_STANZA_END);
+ NULL);
gibber_xmpp_error_to_node (xmpp_error,
wocky_stanza_get_top_node (stanza), NULL);
error = gibber_message_get_xmpp_error (stanza);
- fail_if (error == NULL);
+ g_assert (error != NULL);
- fail_if (error->domain != GIBBER_XMPP_ERROR);
- fail_if (error->code != (gint) xmpp_error);
- fail_if (strcmp (error->message, gibber_xmpp_error_description (
- xmpp_error)) != 0);
+ g_assert (error->domain == GIBBER_XMPP_ERROR);
+ g_assert (error->code == (gint) xmpp_error);
+ g_assert_cmpstr (error->message, ==,
+ gibber_xmpp_error_description (xmpp_error));
g_object_unref (stanza);
g_error_free (error);
}
-} END_TEST
+}
-TCase *
-make_gibber_xmpp_error_tcase (void)
+int
+main (int argc,
+ char **argv)
{
- TCase *tc = tcase_create ("XMPP Error");
- tcase_add_test (tc, test_xmpp_error_to_node);
- tcase_add_test (tc, test_message_get_xmpp_error);
- return tc;
+ g_test_init (&argc, &argv, NULL);
+ g_type_init ();
+
+ g_test_add_func ("/gibber/xmpp-error/to-node",
+ test_xmpp_error_to_node);
+ g_test_add_func ("/gibber/xmpp-error/message-get-xmpp-error",
+ test_message_get_xmpp_error);
+
+ return g_test_run ();
}
diff --git a/lib/gibber/tests/check-gibber-xmpp-node.c b/lib/gibber/tests/check-gibber-xmpp-node.c
deleted file mode 100644
index e7663ff8..00000000
--- a/lib/gibber/tests/check-gibber-xmpp-node.c
+++ /dev/null
@@ -1,146 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <gibber/gibber-xmpp-node.h>
-
-#include <check.h>
-#include "check-helpers.h"
-#include "check-gibber.h"
-
-START_TEST (test_instantiation)
-{
- GibberXmppNode *node;
- node = gibber_xmpp_node_new_ns ("test", "http://example.com/badgers/");
- fail_unless (node != NULL);
-
- gibber_xmpp_node_free (node);
-}
-END_TEST
-
-START_TEST (test_language)
-{
- GibberXmppNode *node;
- const gchar *lang;
-
- node = gibber_xmpp_node_new_ns ("test", "http://example.com/badgers/");
- lang = gibber_xmpp_node_get_language (node);
- fail_unless (lang == NULL);
-
- gibber_xmpp_node_set_language (node, "en");
- lang = gibber_xmpp_node_get_language (node);
- fail_unless (strcmp (lang, "en") == 0);
-
- gibber_xmpp_node_set_language (node, NULL);
- lang = gibber_xmpp_node_get_language (node);
- fail_unless (lang == NULL);
-
- gibber_xmpp_node_set_language_n (node, "en-US", 2);
- lang = gibber_xmpp_node_get_language (node);
- fail_unless (strcmp (lang, "en") == 0);
-
- gibber_xmpp_node_set_language_n (node, NULL, 2);
- lang = gibber_xmpp_node_get_language (node);
- fail_unless (lang == NULL);
-
- gibber_xmpp_node_free (node);
-}
-END_TEST
-
-START_TEST (test_namespace)
-{
- GibberXmppNode *node;
- const gchar *ns;
-
- node = gibber_xmpp_node_new_ns ("test", "foo");
- ns = gibber_xmpp_node_get_ns (node);
- fail_unless (strcmp (ns, "foo") == 0);
- gibber_xmpp_node_free (node);
-}
-END_TEST
-
-
-START_TEST (test_attribute)
-{
- GibberXmppNode *node;
- const gchar *attribute;
-
- node = gibber_xmpp_node_new_ns ("test", "about:blank");
-
- attribute = gibber_xmpp_node_get_attribute (node, "foo");
- fail_unless (attribute == NULL);
-
- attribute = gibber_xmpp_node_get_attribute (node, NULL);
- fail_unless (attribute == NULL);
-
- attribute = gibber_xmpp_node_get_attribute_ns (node, "foo", "bar");
- fail_unless (attribute == NULL);
-
- gibber_xmpp_node_set_attribute (node, "foo", "baz");
-
- attribute = gibber_xmpp_node_get_attribute (node, "foo");
- fail_unless (strcmp ( attribute, "baz") == 0);
-
- attribute = gibber_xmpp_node_get_attribute_ns (node, "foo", "bar");
- fail_unless (attribute == NULL);
-
- gibber_xmpp_node_set_attribute_ns (node, "foobar", "barbaz", "bar");
-
- attribute = gibber_xmpp_node_get_attribute (node, "foobar");
- fail_unless (strcmp (attribute, "barbaz") == 0);
-
- attribute = gibber_xmpp_node_get_attribute_ns (node, "foobar", "bar");
- fail_unless (strcmp (attribute, "barbaz") == 0);
-
- attribute = gibber_xmpp_node_get_attribute_ns (node, "barfoo", "bar");
- fail_unless (attribute == NULL);
-
- gibber_xmpp_node_free (node);
-}
-END_TEST
-
-START_TEST (test_child)
-{
- GibberXmppNode *node, *child;
-
- node = gibber_xmpp_node_new_ns ("test", "about:blank");
-
- child = gibber_xmpp_node_get_child (node, "foo");
- fail_unless (child == NULL);
-
- gibber_xmpp_node_add_child (node, "foo");
- child = gibber_xmpp_node_get_child (node, "foo");
- fail_if (child == NULL);
- fail_unless (strcmp (child->name, "foo") == 0);
-
- child = gibber_xmpp_node_get_child_ns (node, "foo", "bar");
- fail_unless (child == NULL);
-
- gibber_xmpp_node_add_child_ns (node, "foobar", "bar");
- child = gibber_xmpp_node_get_child_ns (node, "foobar", "foo");
- fail_unless (child == NULL);
- child = gibber_xmpp_node_get_child_ns (node, "foobar", "bar");
- fail_if (child == NULL);
- fail_unless (strcmp (child->name, "foobar") == 0);
-
- gibber_xmpp_node_add_child_with_content (node, "foo2", "blah");
- child = gibber_xmpp_node_get_child (node, "foo2");
- fail_if (child->content == NULL);
- fail_unless (strcmp (child->content, "blah") == 0);
-
- gibber_xmpp_node_free (node);
-}
-END_TEST
-
-
-TCase *
-make_gibber_xmpp_node_tcase (void)
-{
- TCase *tc = tcase_create ("XMPP Node");
- tcase_add_test (tc, test_instantiation);
- tcase_add_test (tc, test_language);
- tcase_add_test (tc, test_namespace);
- tcase_add_test (tc, test_attribute);
- tcase_add_test (tc, test_child);
- return tc;
-}
diff --git a/lib/gibber/tests/check-gibber-xmpp-reader.c b/lib/gibber/tests/check-gibber-xmpp-reader.c
index 43b60d1b..42bf9930 100644
--- a/lib/gibber/tests/check-gibber-xmpp-reader.c
+++ b/lib/gibber/tests/check-gibber-xmpp-reader.c
@@ -3,28 +3,24 @@
#include <string.h>
#include <gibber/gibber-xmpp-reader.h>
-#include <gibber/gibber-xmpp-stanza.h>
-
-#include <check.h>
-
-#include "check-gibber.h"
+#include <wocky/wocky-stanza.h>
typedef struct _ReceivedStanzaEvent ReceivedStanzaEvent;
struct _ReceivedStanzaEvent {
GibberXmppReader *reader;
- GibberXmppStanza *stanza;
+ WockyStanza *stanza;
};
static void received_stanza_cb (GibberXmppReader *reader,
- GibberXmppStanza *stanza, gpointer user_data)
+ WockyStanza *stanza, gpointer user_data)
{
GQueue *events_queue = (GQueue *) user_data;
ReceivedStanzaEvent *event;
- fail_if (reader == NULL);
- fail_if (stanza == NULL);
- fail_if (events_queue == NULL);
+ g_assert (reader != NULL);
+ g_assert (stanza != NULL);
+ g_assert (events_queue != NULL);
g_object_ref (stanza);
@@ -36,19 +32,20 @@ static void received_stanza_cb (GibberXmppReader *reader,
}
-START_TEST (test_instantiation)
+static void
+test_instantiation (void)
{
GibberXmppReader *reader;
reader = gibber_xmpp_reader_new_no_stream ();
- fail_if (reader == NULL);
+ g_assert (reader != NULL);
g_object_unref (reader);
}
-END_TEST
-START_TEST (test_simple_message)
+static void
+test_simple_message (void)
{
GibberXmppReader *reader;
- GibberXmppNode *node;
+ WockyNode *node;
gchar *data;
gsize length;
gboolean valid;
@@ -73,41 +70,39 @@ START_TEST (test_simple_message)
file = g_strdup_printf ("%s/inputs/simple-message.input", srcdir);
}
- fail_unless (g_file_get_contents (file, &data, &length, NULL));
+ g_assert (g_file_get_contents (file, &data, &length, NULL));
g_free (file);
valid = gibber_xmpp_reader_push (reader, (guint8 *) data, length, NULL);
- fail_unless (valid);
+ g_assert (valid);
- fail_unless (g_queue_get_length (received_stanzas) == 2);
+ g_assert (g_queue_get_length (received_stanzas) == 2);
event = g_queue_pop_head (received_stanzas);
- fail_unless (event->reader == reader);
+ g_assert (event->reader == reader);
node = wocky_stanza_get_top_node (event->stanza);
- fail_if (node == NULL);
- fail_unless (strcmp (node->name, "message") == 0);
- fail_unless (strcmp (gibber_xmpp_node_get_language (node), "en") == 0);
- fail_unless (strcmp (gibber_xmpp_node_get_attribute (node, "to"),
- "juliet@example.com") == 0);
- fail_unless (strcmp (gibber_xmpp_node_get_attribute (node, "id"),
- "0") == 0);
+ g_assert (node != NULL);
+ g_assert_cmpstr (node->name, ==, "message");
+ g_assert_cmpstr (wocky_node_get_language (node), ==, "en");
+ g_assert_cmpstr (wocky_node_get_attribute (node, "to"), ==,
+ "juliet@example.com");
+ g_assert_cmpstr (wocky_node_get_attribute (node, "id"), ==, "0");
g_object_unref (event->stanza);
g_free (event);
event = g_queue_pop_head (received_stanzas);
- fail_unless (event->reader == reader);
+ g_assert (event->reader == reader);
node = wocky_stanza_get_top_node (event->stanza);
- fail_unless (strcmp (node->name, "message") == 0);
- fail_unless (strcmp (gibber_xmpp_node_get_language (node), "en") == 0);
- fail_unless (strcmp (gibber_xmpp_node_get_attribute (node, "to"),
- "juliet@example.com") == 0);
- fail_unless (strcmp (gibber_xmpp_node_get_attribute (node, "id"),
- "1") == 0);
+ g_assert_cmpstr (node->name, ==, "message");
+ g_assert_cmpstr (wocky_node_get_language (node), ==, "en");
+ g_assert_cmpstr (wocky_node_get_attribute (node, "to"), ==,
+ "juliet@example.com");
+ g_assert_cmpstr (wocky_node_get_attribute (node, "id"), ==, "1");
g_free (data);
g_queue_free (received_stanzas);
@@ -115,13 +110,18 @@ START_TEST (test_simple_message)
g_free (event);
g_object_unref (reader);
}
-END_TEST
-TCase *
-make_gibber_xmpp_reader_tcase (void)
+int
+main (int argc,
+ char **argv)
{
- TCase *tc = tcase_create ("XMPP Reader");
- tcase_add_test (tc, test_instantiation);
- tcase_add_test (tc, test_simple_message);
- return tc;
+ g_test_init (&argc, &argv, NULL);
+ g_type_init ();
+
+ g_test_add_func ("/gibber/xmpp-reader/instantiation",
+ test_instantiation);
+ g_test_add_func ("/gibber/xmpp-reader/simple-message",
+ test_simple_message);
+
+ return g_test_run ();
}
diff --git a/lib/gibber/tests/check-gibber-xmpp-stanza.c b/lib/gibber/tests/check-gibber-xmpp-stanza.c
deleted file mode 100644
index dae2ab2f..00000000
--- a/lib/gibber/tests/check-gibber-xmpp-stanza.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * check-gibber-xmpp-stanza.c - Test for gibber-xmpp-stanza functions
- * Copyright (C) 2007 Collabora Ltd.
- * @author Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <gibber/gibber-xmpp-stanza.h>
-
-#define DEBUG_FLAG DEBUG_XMPP
-#include <gibber/gibber-debug.h>
-
-#include <wocky/wocky-namespaces.h>
-
-#include <check.h>
-#include "check-gibber.h"
-
-START_TEST (test_build_with_html_message)
-{
- GibberXmppStanza *stanza;
- const gchar *body = "Telepathy rocks!",
- *xhtml_ns = "http://www.w3.org/1999/xhtml";
- GibberXmppNode *node;
- const gchar *value;
-
- g_type_init ();
-#ifdef ENABLE_DEBUG
- gibber_debug_set_flags_from_env ();
-#endif
-
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_MESSAGE, GIBBER_STANZA_SUB_TYPE_NONE,
- "alice@collabora.co.uk", "bob@collabora.co.uk",
- GIBBER_NODE, "html",
- GIBBER_NODE_XMLNS, xhtml_ns,
- GIBBER_NODE, "body",
- GIBBER_NODE_ATTRIBUTE, "textcolor", "red",
- GIBBER_NODE_TEXT, body,
- GIBBER_NODE_END,
- GIBBER_NODE_END,
- GIBBER_STANZA_END);
-
- DEBUG_STANZA (stanza, "check");
-
- fail_if (stanza == NULL);
- /* <message> */
- node = wocky_stanza_get_top_node (stanza);
- fail_if (node == NULL);
- fail_unless (strcmp (node->name, "message") == 0);
- value = gibber_xmpp_node_get_attribute (node, "type");
- fail_unless (value == NULL);
- value = gibber_xmpp_node_get_attribute (node, "from");
- fail_unless (strcmp (value, "alice@collabora.co.uk") == 0);
- value = gibber_xmpp_node_get_attribute (node, "to");
- fail_unless (strcmp (value, "bob@collabora.co.uk") == 0);
-
- /* <html> */
- node = gibber_xmpp_node_get_child_ns (node, "html", xhtml_ns);
- fail_if (node == NULL);
-
- /* <body> */
- node = gibber_xmpp_node_get_child (node, "body");
- fail_if (node == NULL);
- value = gibber_xmpp_node_get_attribute (node, "textcolor");
- fail_unless (strcmp (value, "red") == 0);
- fail_unless (strcmp (node->content, body) == 0);
-
- g_object_unref (stanza);
-} END_TEST
-
-START_TEST (test_get_type_info_with_simple_message)
-{
- GibberXmppStanza *stanza;
- GibberStanzaType type;
- GibberStanzaSubType sub_type;
-
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_MESSAGE, GIBBER_STANZA_SUB_TYPE_NONE,
- "alice@collabora.co.uk", "bob@collabora.co.uk",
- GIBBER_STANZA_END);
- fail_if (stanza == NULL);
-
- gibber_xmpp_stanza_get_type_info (stanza, &type, &sub_type);
- fail_if (type != GIBBER_STANZA_TYPE_MESSAGE);
- fail_if (sub_type != GIBBER_STANZA_SUB_TYPE_NONE);
-
- g_object_unref (stanza);
-} END_TEST
-
-START_TEST (test_get_type_info_with_iq_set)
-{
- GibberXmppStanza *stanza;
- GibberStanzaType type;
- GibberStanzaSubType sub_type;
-
- stanza = gibber_xmpp_stanza_build (
- GIBBER_STANZA_TYPE_IQ, GIBBER_STANZA_SUB_TYPE_SET,
- "alice@collabora.co.uk", "bob@collabora.co.uk",
- GIBBER_STANZA_END);
- fail_if (stanza == NULL);
-
- gibber_xmpp_stanza_get_type_info (stanza, &type, &sub_type);
- fail_if (type != GIBBER_STANZA_TYPE_IQ);
- fail_if (sub_type != GIBBER_STANZA_SUB_TYPE_SET);
-
- g_object_unref (stanza);
-} END_TEST
-
-START_TEST (test_get_type_info_with_unknown_type)
-{
- GibberXmppStanza *stanza;
- GibberStanzaType type;
-
- stanza = gibber_xmpp_stanza_new_ns ("goat", WOCKY_XMPP_NS_JABBER_CLIENT);
- fail_if (stanza == NULL);
-
- gibber_xmpp_stanza_get_type_info (stanza, &type, NULL);
- fail_if (type != GIBBER_STANZA_TYPE_UNKNOWN);
-
- g_object_unref (stanza);
-} END_TEST
-
-START_TEST (test_get_type_info_with_unknown_sub_type)
-{
- GibberXmppStanza *stanza;
- GibberStanzaSubType sub_type;
-
- stanza = gibber_xmpp_stanza_new_ns ("iq", WOCKY_XMPP_NS_JABBER_CLIENT);
- fail_if (stanza == NULL);
- gibber_xmpp_node_set_attribute (wocky_stanza_get_top_node (stanza),
- "type", "goat");
-
- gibber_xmpp_stanza_get_type_info (stanza, NULL, &sub_type);
- fail_if (sub_type != GIBBER_STANZA_SUB_TYPE_UNKNOWN);
-
- g_object_unref (stanza);
-} END_TEST
-
-
-TCase *
-make_gibber_xmpp_stanza_tcase (void)
-{
- TCase *tc = tcase_create ("XMPP Stanza");
- tcase_add_test (tc, test_build_with_html_message);
- tcase_add_test (tc, test_get_type_info_with_simple_message);
- tcase_add_test (tc, test_get_type_info_with_iq_set);
- tcase_add_test (tc, test_get_type_info_with_unknown_type);
- tcase_add_test (tc, test_get_type_info_with_unknown_sub_type);
- return tc;
-}
diff --git a/lib/gibber/tests/check-gibber.h b/lib/gibber/tests/check-gibber.h
deleted file mode 100644
index d98d3d08..00000000
--- a/lib/gibber/tests/check-gibber.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __CHECK_GIBBER_H__
-#define __CHECK_GIBBER_H__
-
-#include <check.h>
-
-TCase *make_gibber_xmpp_node_tcase (void);
-TCase *make_gibber_xmpp_reader_tcase (void);
-TCase *make_gibber_xmpp_connection_tcase (void);
-TCase *make_gibber_r_multicast_packet_tcase (void);
-TCase *make_gibber_r_multicast_causal_transport_tcase (void);
-TCase *make_gibber_r_multicast_sender_tcase (void);
-TCase *make_gibber_xmpp_stanza_tcase (void);
-TCase *make_gibber_iq_helper_tcase (void);
-TCase *make_gibber_listener_tcase (void);
-TCase *make_gibber_xmpp_connection_listener_tcase (void);
-TCase *make_gibber_xmpp_error_tcase (void);
-TCase *make_gibber_unix_transport_tcase (void);
-
-#endif /* #ifndef __CHECK_GIBBER_H__ */
diff --git a/lib/gibber/tests/check-helpers.c b/lib/gibber/tests/check-helpers.c
deleted file mode 100644
index 86ef1154..00000000
--- a/lib/gibber/tests/check-helpers.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * check-helpers.c - Source for some check helpers
- * Copyright (C) 2007 Collabora Ltd.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "check-helpers.h"
-
-static gboolean expecting_critical = FALSE;
-static gboolean received_critical = FALSE;
-
-static void
-check_helper_log_critical_func (const gchar *log_damain,
- GLogLevelFlags log_level,
- const gchar *message,
- gpointer user_data)
-{
-
- if (!expecting_critical)
- {
- fail ("Unexpected critical message: %s\n", message);
- }
-
- g_assert (log_level & G_LOG_LEVEL_CRITICAL);
-
- received_critical = TRUE;
-}
-
-gboolean
-got_critical (void)
-{
- return received_critical;
-}
-
-void
-expect_critical (gboolean expected)
-{
- expecting_critical = expected;
- received_critical = FALSE;
-}
-
-void
-check_helpers_init (void)
-{
- g_log_set_handler (NULL, G_LOG_LEVEL_CRITICAL,
- check_helper_log_critical_func, NULL);
-}
diff --git a/lib/gibber/tests/check-helpers.h b/lib/gibber/tests/check-helpers.h
deleted file mode 100644
index b71b3b65..00000000
--- a/lib/gibber/tests/check-helpers.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * check-helpers.c - Source for some check helpers
- * Copyright (C) 2007 Collabora Ltd.
- *
- * 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 St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#ifndef __CHECK_HELPERS_H__
-#define __CHECK_HELPERS_H__
-
-#include <glib.h>
-#include <check.h>
-
-void
-check_helpers_init (void);
-
-void
-expect_critical (gboolean expected);
-
-gboolean
-got_critical (void);
-
-#define fail_unless_critical(expr, ...) \
-G_STMT_START { \
- expect_critical (TRUE); \
- expr; \
- _fail_unless (got_critical (), __FILE__, __LINE__, \
- "Expected g_critical, got none", ## __VA_ARGS__, NULL); \
- expect_critical (FALSE); \
-} G_STMT_END;
-
-#endif /* #ifndef __CHECK_HELPERS_H__ */
diff --git a/lib/gibber/tests/check-main.c b/lib/gibber/tests/check-main.c
deleted file mode 100644
index 075e250a..00000000
--- a/lib/gibber/tests/check-main.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <glib-object.h>
-
-#include <wocky/wocky.h>
-
-#include <check.h>
-
-#include "check-gibber.h"
-#include "check-helpers.h"
-
-#include "config.h"
-
-static Suite *
-make_gibber_suite (void)
-{
- Suite *s = suite_create ("Gibber");
-
- suite_add_tcase (s, make_gibber_xmpp_node_tcase ());
- suite_add_tcase (s, make_gibber_xmpp_reader_tcase ());
- suite_add_tcase (s, make_gibber_xmpp_connection_tcase ());
- suite_add_tcase (s, make_gibber_r_multicast_packet_tcase ());
- suite_add_tcase (s, make_gibber_r_multicast_sender_tcase ());
- suite_add_tcase (s, make_gibber_r_multicast_causal_transport_tcase ());
- suite_add_tcase (s, make_gibber_xmpp_stanza_tcase ());
- suite_add_tcase (s, make_gibber_iq_helper_tcase ());
- suite_add_tcase (s, make_gibber_listener_tcase ());
- suite_add_tcase (s, make_gibber_xmpp_connection_listener_tcase ());
- suite_add_tcase (s, make_gibber_xmpp_error_tcase ());
- suite_add_tcase (s, make_gibber_unix_transport_tcase ());
-
- return s;
-}
-
-int
-main (void)
-{
- int number_failed = 0;
- Suite *s;
- SRunner *sr;
-
- check_helpers_init ();
- g_type_init ();
- wocky_init ();
-
- s = make_gibber_suite ();
- sr = srunner_create (s);
- srunner_run_all (sr, CK_NORMAL);
- number_failed += srunner_ntests_failed (sr);
- srunner_free (sr);
-
- wocky_deinit ();
- return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
diff --git a/lib/gibber/tests/test-xmpp-connection.c b/lib/gibber/tests/test-xmpp-connection.c
deleted file mode 100644
index b957f718..00000000
--- a/lib/gibber/tests/test-xmpp-connection.c
+++ /dev/null
@@ -1,160 +0,0 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <glib.h>
-
-#include <gibber/gibber-xmpp-connection.h>
-#include <gibber/gibber-transport.h>
-#include <wocky/wocky.h>
-#include "test-transport.h"
-
-#define BUFSIZE 10
-
-FILE *treefile = NULL;
-FILE *xmlfile = NULL;
-gboolean parsing_failed = FALSE;
-
-static gboolean
-send_hook (GibberTransport *transport, const guint8 *data,
- gsize length, GError **error, gpointer user_data)
-{
- size_t written;
- /* Nothing for now */
- written = fwrite (data, 1, length, xmlfile);
- g_assert (written == length);
- return TRUE;
-}
-
-static void
-parse_error (GibberXmppConnection *connection, gpointer user_data)
-{
- fprintf (treefile, "PARSE ERROR\n");
- fprintf (stderr, "PARSING FAILED\n");
- parsing_failed = TRUE;
-}
-
-static void
-stream_opened (GibberXmppConnection *connection, const gchar *to,
- const gchar *from, const gchar *version, gpointer user_data)
-{
- fprintf (treefile, "STREAM OPENED to=%s from=%s version=%s\n", to, from,
- version);
-
- gibber_xmpp_connection_open (connection, to, from, version);
-}
-
-static void
-stream_closed (GibberXmppConnection *connection, gpointer user_data)
-{
- fprintf (treefile, "STREAM CLOSED\n");
- gibber_xmpp_connection_close (connection);
-}
-
-static gboolean
-print_attribute (const gchar *key, const gchar *value, const gchar *pref,
- const gchar *ns, gpointer user_data)
-{
- fprintf (treefile, "%*s |-- Attribute: %s -> %s (ns: %s)\n",
- GPOINTER_TO_INT (user_data), " ", key, value, ns);
- return TRUE;
-}
-
-static void print_node (GibberXmppNode *node, gint ident);
-
-static gboolean
-print_child (GibberXmppNode *node, gpointer user_data)
-{
- print_node (node, GPOINTER_TO_INT(user_data));
- return TRUE;
-}
-
-static void
-print_node (GibberXmppNode *node, gint ident)
-{
- fprintf (treefile, "%*s`-+-- Name: %s (ns: %s)\n", ident - 1, " ",
- node->name, gibber_xmpp_node_get_ns (node));
- wocky_node_each_attribute (node, print_attribute,
- GINT_TO_POINTER(ident));
-
- if (node->content)
- fprintf (treefile, "%*s |-- Content: %s\n", ident, " ", node->content);
- if (gibber_xmpp_node_get_language (node))
- fprintf (treefile, "%*s |-- Language: %s\n", ident, " ",
- gibber_xmpp_node_get_language (node));
-
- gibber_xmpp_node_each_child (node, print_child, GINT_TO_POINTER (ident + 2));
-}
-
-static void
-received_stanza (GibberXmppConnection *connection, GibberXmppStanza *stanza,
- gpointer user_data)
-{
- fprintf (treefile, "-|\n");
- print_node (wocky_stanza_get_top_node (stanza), 2);
- g_assert (gibber_xmpp_connection_send (connection, stanza, NULL));
-}
-
-int
-main (int argc, char **argv)
-{
- GibberXmppConnection *connection;
- TestTransport *transport;
- FILE *file;
- int ret = 0;
- guint8 buf[BUFSIZE];
-
-
- g_type_init ();
- wocky_init ();
-
- transport = test_transport_new (send_hook, NULL);
- connection = gibber_xmpp_connection_new (GIBBER_TRANSPORT(transport));
-
- g_signal_connect (connection, "parse-error",
- G_CALLBACK (parse_error), NULL);
- g_signal_connect (connection, "stream-opened",
- G_CALLBACK (stream_opened), NULL);
- g_signal_connect (connection, "stream-closed",
- G_CALLBACK (stream_closed), NULL);
- g_signal_connect (connection, "received-stanza",
- G_CALLBACK (received_stanza), NULL);
-
- g_assert (argc >= 2 && argc < 5);
-
- file = fopen (argv[1], "r");
- g_assert (file != NULL);
-
- if (argc >= 3)
- {
- treefile = fopen (argv[2], "w+");
- }
- else
- {
- treefile = stdout;
- }
- g_assert (treefile != NULL);
-
- if (argc >= 4)
- {
- xmlfile = fopen (argv[3], "w+");
- }
- else
- {
- xmlfile = stderr;
- }
- g_assert (xmlfile != NULL);
-
- while (!parsing_failed && (ret = fread (buf, 1, BUFSIZE, file)) > 0)
- {
- test_transport_write (transport, buf, ret);
- }
-
- while (g_main_context_iteration (NULL, FALSE))
- ;
-
-
- g_assert (parsing_failed || ret == 0);
- fclose (file);
-
- wocky_deinit ();
- return parsing_failed ? 1 : 0;
-}