telepathygabble/inc/disco.h
changeset 0 d0f3a028347a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telepathygabble/inc/disco.h	Tue Feb 02 01:10:06 2010 +0200
@@ -0,0 +1,137 @@
+/*
+ * disco.h - Headers for Gabble service discovery
+ *
+ * Copyright (C) 2006 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
+ *
+ * -- LET'S DISCO!!!  \o/ \o_ _o/ /\o/\ _/o/- -\o\_ --
+ */
+
+#ifndef __GABBLE_DISCO_H__
+#define __GABBLE_DISCO_H__
+
+#include <glib-object.h>
+#include "loudmouth/loudmouth.h"
+
+#include "gabble-types.h"
+
+G_BEGIN_DECLS
+
+typedef enum
+{
+  GABBLE_DISCO_TYPE_INFO,
+  GABBLE_DISCO_TYPE_ITEMS
+} GabbleDiscoType;
+
+typedef struct _GabbleDiscoClass GabbleDiscoClass;
+typedef struct _GabbleDiscoRequest GabbleDiscoRequest;
+
+/**
+ * GabbleDiscoError:
+ * @GABBLE_DISCO_ERROR_CANCELLED: The DISCO request was cancelled
+ * @GABBLE_DISCO_ERROR_TIMEOUT: The DISCO request timed out
+ * @GABBLE_DISCO_ERROR_UNKNOWN: An unknown error occured
+ */
+typedef enum
+{
+  GABBLE_DISCO_ERROR_CANCELLED,
+  GABBLE_DISCO_ERROR_TIMEOUT,
+  GABBLE_DISCO_ERROR_UNKNOWN
+} GabbleDiscoError;
+
+GQuark gabble_disco_error_quark (void);
+#define GABBLE_DISCO_ERROR gabble_disco_error_quark ()
+
+IMPORT_C GType gabble_disco_get_type(void);
+
+/* TYPE MACROS */
+#define GABBLE_TYPE_DISCO \
+  (gabble_disco_get_type())
+#define GABBLE_DISCO(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST((obj), GABBLE_TYPE_DISCO, GabbleDisco))
+#define GABBLE_DISCO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST((klass), GABBLE_TYPE_DISCO, GabbleDiscoClass))
+#define GABBLE_IS_DISCO(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE((obj), GABBLE_TYPE_DISCO))
+#define GABBLE_IS_DISCO_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE((klass), GABBLE_TYPE_DISCO))
+#define GABBLE_DISCO_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), GABBLE_TYPE_DISCO, GabbleDiscoClass))
+
+struct _GabbleDiscoClass {
+    GObjectClass parent_class;
+};
+
+struct _GabbleDisco {
+    GObject parent;
+    gpointer priv;
+};
+
+typedef void (*GabbleDiscoCb)(GabbleDisco *self, GabbleDiscoRequest *request, const gchar *jid, const gchar *node, LmMessageNode *query_result, GError* error, gpointer user_data);
+
+GabbleDisco *gabble_disco_new (GabbleConnection *);
+
+GabbleDiscoRequest *gabble_disco_request (GabbleDisco *self,
+    GabbleDiscoType type, const gchar *jid, const char *node,
+    GabbleDiscoCb callback, gpointer user_data, GObject *object,
+    GError **error);
+GabbleDiscoRequest *gabble_disco_request_with_timeout (GabbleDisco *self,
+    GabbleDiscoType type, const gchar *jid, const char *node,
+    guint timeout, GabbleDiscoCb callback, gpointer user_data,
+    GObject *object, GError **error);
+
+void gabble_disco_cancel_request (GabbleDisco *, GabbleDiscoRequest *);
+
+/* Pipelines */
+
+typedef struct _GabbleDiscoItem GabbleDiscoItem;
+
+struct _GabbleDiscoItem {
+    const gchar *jid;
+    const char *name;
+    const char *type;
+    const char *category;
+    GHashTable *features;
+};
+
+typedef void (*GabbleDiscoPipelineCb)(gpointer pipeline,
+                                      GabbleDiscoItem *item,
+                                      gpointer user_data);
+
+typedef void (*GabbleDiscoEndCb)(gpointer pipeline,
+                                 gpointer user_data);
+
+gpointer gabble_disco_pipeline_init (GabbleDisco *disco,
+                                     GabbleDiscoPipelineCb callback,
+                                     GabbleDiscoEndCb end_callback,
+                                     gpointer user_data);
+
+void gabble_disco_pipeline_run (gpointer self, const char *server);
+void gabble_disco_pipeline_destroy (gpointer self);
+
+/* Service discovery */
+
+void gabble_disco_service_discovery (GabbleDisco *disco, const char *server);
+const GabbleDiscoItem *
+gabble_disco_service_find (GabbleDisco *disco,
+                           const char *type,
+                           const char *category,
+                           const char *feature);
+
+G_END_DECLS
+
+#endif