[libdmapsharing/gobject-introspection] More cleaning introspectable code; tests all compile



commit 439e794ab6bea8d0e691743528ee18c698bdbdea
Author: W. Michael Petullo <mike flyn org>
Date:   Wed Jun 25 22:15:09 2014 -0400

    More cleaning introspectable code; tests all compile
    
    Signed-off-by: W. Michael Petullo <mike flyn org>

 libdmapsharing/dmap-connection.c     |   18 +-
 libdmapsharing/dmap-connection.h     |   14 +-
 libdmapsharing/dmap-record-factory.h |    2 +-
 tests/dmapcopy.c                     |   89 +++++----
 tests/dmapcopy.vala                  |    2 +-
 tests/dpapview.c                     |  102 ++++++-----
 tests/dpapview.vala                  |    2 +-
 tests/test-dmap-client-python        |   77 ++++++--
 tests/test-dmap-client.c             |    8 +-
 tests/vala-dmap-db.c                 |    2 +-
 vala/libdmapsharing-3.0.vapi         |  342 +++++++++++++++++++---------------
 11 files changed, 387 insertions(+), 271 deletions(-)
---
diff --git a/libdmapsharing/dmap-connection.c b/libdmapsharing/dmap-connection.c
index f08fc0c..60219ee 100644
--- a/libdmapsharing/dmap-connection.c
+++ b/libdmapsharing/dmap-connection.c
@@ -1137,8 +1137,8 @@ dmap_connection_is_connected (DMAPConnection * connection)
 typedef struct
 {
        DMAPConnection *connection;
-       DMAPConnectionCallback callback;
-       DMAPDb *db;
+       DMAPConnectionFunc callback;
+       gpointer user_data;
        GDestroyNotify destroy;
 } ConnectionResponseData;
 
@@ -1171,7 +1171,7 @@ connected_cb (DMAPConnection * connection, ConnectionResponseData * rdata)
                rdata->callback (rdata->connection,
                                 result,
                                 rdata->connection->priv->last_error_message,
-                                rdata->db);
+                                rdata->user_data);
        }
 
        if (rdata->destroy) {
@@ -1235,7 +1235,7 @@ dmap_connection_setup (DMAPConnection * connection)
 // This would allow Vala to associated a lambda function with the signal.
 void
 dmap_connection_start (DMAPConnection * connection,
-                       DMAPConnectionCallback callback, DMAPDb *db)
+                       DMAPConnectionFunc callback, gpointer user_data)
 {
        ConnectionResponseData *rdata;
 
@@ -1261,7 +1261,7 @@ dmap_connection_start (DMAPConnection * connection,
        rdata = g_new (ConnectionResponseData, 1);
        rdata->connection = g_object_ref (connection);
        rdata->callback = callback;
-       rdata->db = db;
+       rdata->user_data = user_data;
        rdata->destroy = connection_response_data_free;
        g_signal_connect (connection, "operation-done",
                          G_CALLBACK (connected_cb), rdata);
@@ -1294,7 +1294,7 @@ disconnected_cb (DMAPConnection * connection, ConnectionResponseData * rdata)
                rdata->callback (rdata->connection,
                                 result,
                                 rdata->connection->priv->last_error_message,
-                                rdata->db);
+                                (gpointer) rdata->user_data);
        }
 
        if (rdata->destroy) {
@@ -1316,8 +1316,8 @@ dmap_connection_finish (DMAPConnection * connection)
 
 void
 dmap_connection_disconnect (DMAPConnection * connection,
-                           DMAPConnectionCallback callback,
-                           DMAPDb *db)
+                           DMAPConnectionFunc callback,
+                           gpointer user_data)
 {
        DMAPConnectionPrivate *priv = connection->priv;
        ConnectionResponseData *rdata;
@@ -1339,7 +1339,7 @@ dmap_connection_disconnect (DMAPConnection * connection,
        rdata = g_new (ConnectionResponseData, 1);
        rdata->connection = g_object_ref (connection);
        rdata->callback = callback;
-       rdata->db = db;
+       rdata->user_data = user_data;
        rdata->destroy = connection_response_data_free;
 
        g_signal_connect (connection, "operation-done",
diff --git a/libdmapsharing/dmap-connection.h b/libdmapsharing/dmap-connection.h
index de33a8a..c84c886 100644
--- a/libdmapsharing/dmap-connection.h
+++ b/libdmapsharing/dmap-connection.h
@@ -135,10 +135,10 @@ typedef struct
 } DMAPConnectionClass;
 
 /* hmm, maybe should give more error information? */
-typedef gboolean (*DMAPConnectionCallback) (DMAPConnection * connection,
+typedef gboolean (*DMAPConnectionFunc) (DMAPConnection * connection,
                                            gboolean result,
                                            const char *reason,
-                                           DMAPDb *db);
+                                           gpointer user_data);
 
 typedef void (*DMAPResponseHandler) (DMAPConnection * connection,
                                     guint status,
@@ -153,16 +153,16 @@ void dmap_connection_setup (DMAPConnection * connection);
  * dmap_connection_start:
  * @connection: The connection.
  * @callback: (scope async): The function to call once the connection is complete.
- * @db: The data to pass to the callback.
+ * @user_data: The data to pass to the callback.
  *
  * Connect to the remote DMAP share.
  */
 void dmap_connection_start (DMAPConnection * connection,
-                           DMAPConnectionCallback callback,
-                           DMAPDb *db);
+                           DMAPConnectionFunc callback,
+                           gpointer user_data);
 void dmap_connection_disconnect (DMAPConnection * connection,
-                                DMAPConnectionCallback callback,
-                                DMAPDb *db);
+                                DMAPConnectionFunc callback,
+                                gpointer user_data);
 
 SoupMessageHeaders *dmap_connection_get_headers (DMAPConnection * connection,
                                                 const char *uri);
diff --git a/libdmapsharing/dmap-record-factory.h b/libdmapsharing/dmap-record-factory.h
index d6773b7..ad39b19 100644
--- a/libdmapsharing/dmap-record-factory.h
+++ b/libdmapsharing/dmap-record-factory.h
@@ -81,7 +81,7 @@ GType dmap_record_factory_get_type (void);
  * @factory: A DMAPRecordFactory.
  * @user_data: Some piece of data that may be used to initialize return value.
  *
- * Returns: a new DMAPRecord as read from path.
+ * Returns: (transfer full): a new DMAPRecord.
  */
 DMAPRecord *dmap_record_factory_create (DMAPRecordFactory * factory,
                                        gpointer user_data);
diff --git a/tests/dmapcopy.c b/tests/dmapcopy.c
index e914870..da1fbce 100644
--- a/tests/dmapcopy.c
+++ b/tests/dmapcopy.c
@@ -73,6 +73,7 @@ typedef struct _ValaDPAPRecordFactoryClass ValaDPAPRecordFactoryClass;
 
 typedef struct _ValaDPAPRecord ValaDPAPRecord;
 typedef struct _ValaDPAPRecordClass ValaDPAPRecordClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
 #define _dpap_copy_unref0(var) ((var == NULL) ? NULL : (var = (dpap_copy_unref (var), NULL)))
 typedef struct _ParamSpecDPAPCopy ParamSpecDPAPCopy;
 #define _g_main_loop_unref0(var) ((var == NULL) ? NULL : (var = (g_main_loop_unref (var), NULL)))
@@ -116,19 +117,19 @@ enum  {
        DPAP_COPY_DUMMY_PROPERTY
 };
 static gboolean dpap_copy_connected_cb (DPAPCopy* self, DMAPConnection* connection, gboolean _result_, const 
gchar* reason);
-static void __lambda2_ (DPAPCopy* self, gconstpointer k, gconstpointer v);
+static void __lambda2_ (DPAPCopy* self, guint k, DMAPRecord* v);
 GType vala_dpap_record_get_type (void) G_GNUC_CONST;
 const gchar* vala_dpap_record_get_location (ValaDPAPRecord* self);
-static void ___lambda2__gh_func (gconstpointer key, gconstpointer value, gpointer self);
-static void dpap_copy_service_added_cb (DPAPCopy* self, DMAPMdnsBrowserService* service);
-static gboolean _dpap_copy_connected_cb_dmap_connection_callback (DMAPConnection* connection, gboolean 
_result_, const gchar* reason, gpointer self);
+static void ___lambda2__dmap_id_record_func (guint id, DMAPRecord* record, gpointer self);
 DPAPCopy* dpap_copy_new (GError** error);
 DPAPCopy* dpap_copy_construct (GType object_type, GError** error);
 ValaDMAPDb* vala_dmap_db_new (void);
 ValaDMAPDb* vala_dmap_db_construct (GType object_type);
 ValaDPAPRecordFactory* vala_dpap_record_factory_new (void);
 ValaDPAPRecordFactory* vala_dpap_record_factory_construct (GType object_type);
-static void _dpap_copy_service_added_cb_dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, void* 
service, gpointer self);
+static void __lambda3_ (DPAPCopy* self, DMAPMdnsBrowser* browser, DMAPMdnsService* service);
+static gboolean _dpap_copy_connected_cb_dmap_connection_func (DMAPConnection* connection, gboolean _result_, 
const gchar* reason, gpointer self);
+static void ___lambda3__dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, DMAPMdnsService* service, 
gpointer self);
 static void dpap_copy_finalize (DPAPCopy* obj);
 void debug_printf (const gchar* log_domain, GLogLevelFlags log_level, const gchar* message);
 void debug_null (const gchar* log_domain, GLogLevelFlags log_level, const gchar* message);
@@ -136,11 +137,12 @@ gint _vala_main (gchar** args, int args_length1);
 static void _debug_null_glog_func (const gchar* log_domain, GLogLevelFlags log_levels, const gchar* message, 
gpointer self);
 
 
-static void __lambda2_ (DPAPCopy* self, gconstpointer k, gconstpointer v) {
+static void __lambda2_ (DPAPCopy* self, guint k, DMAPRecord* v) {
        FILE* _tmp0_ = NULL;
-       gconstpointer _tmp1_ = NULL;
+       DMAPRecord* _tmp1_ = NULL;
        const gchar* _tmp2_ = NULL;
        const gchar* _tmp3_ = NULL;
+       g_return_if_fail (v != NULL);
        _tmp0_ = stdout;
        _tmp1_ = v;
        _tmp2_ = vala_dpap_record_get_location (G_TYPE_CHECK_INSTANCE_CAST (_tmp1_, TYPE_VALA_DPAP_RECORD, 
ValaDPAPRecord));
@@ -149,8 +151,8 @@ static void __lambda2_ (DPAPCopy* self, gconstpointer k, gconstpointer v) {
 }
 
 
-static void ___lambda2__gh_func (gconstpointer key, gconstpointer value, gpointer self) {
-       __lambda2_ (self, key, value);
+static void ___lambda2__dmap_id_record_func (guint id, DMAPRecord* record, gpointer self) {
+       __lambda2_ (self, id, record);
 }
 
 
@@ -165,49 +167,62 @@ static gboolean dpap_copy_connected_cb (DPAPCopy* self, DMAPConnection* connecti
        _tmp1_ = dmap_db_count ((DMAPDb*) _tmp0_);
        g_debug ("dmapcopy.vala:30: %lld entries\n", _tmp1_);
        _tmp2_ = self->priv->db;
-       dmap_db_foreach ((DMAPDb*) _tmp2_, ___lambda2__gh_func, self);
+       dmap_db_foreach ((DMAPDb*) _tmp2_, ___lambda2__dmap_id_record_func, self);
        result = TRUE;
        return result;
 }
 
 
-static gboolean _dpap_copy_connected_cb_dmap_connection_callback (DMAPConnection* connection, gboolean 
_result_, const gchar* reason, gpointer self) {
+static gboolean _dpap_copy_connected_cb_dmap_connection_func (DMAPConnection* connection, gboolean _result_, 
const gchar* reason, gpointer self) {
        gboolean result;
        result = dpap_copy_connected_cb (self, connection, _result_, reason);
        return result;
 }
 
 
-static void dpap_copy_service_added_cb (DPAPCopy* self, DMAPMdnsBrowserService* service) {
-       DMAPMdnsBrowserService* _tmp0_ = NULL;
-       const gchar* _tmp1_ = NULL;
-       DMAPMdnsBrowserService* _tmp2_ = NULL;
-       const gchar* _tmp3_ = NULL;
-       DMAPMdnsBrowserService* _tmp4_ = NULL;
-       guint _tmp5_ = 0U;
-       ValaDMAPDb* _tmp6_ = NULL;
-       ValaDPAPRecordFactory* _tmp7_ = NULL;
-       DPAPConnection* _tmp8_ = NULL;
-       DMAPConnection* _tmp9_ = NULL;
-       g_return_if_fail (self != NULL);
+static void __lambda3_ (DPAPCopy* self, DMAPMdnsBrowser* browser, DMAPMdnsService* service) {
+       DMAPMdnsService* _tmp0_ = NULL;
+       gchar* _tmp1_ = NULL;
+       gchar* _tmp2_ = NULL;
+       gchar* _tmp3_ = NULL;
+       DMAPMdnsService* _tmp4_ = NULL;
+       gchar* _tmp5_ = NULL;
+       gchar* _tmp6_ = NULL;
+       gchar* _tmp7_ = NULL;
+       DMAPMdnsService* _tmp8_ = NULL;
+       guint _tmp9_ = 0U;
+       guint _tmp10_ = 0U;
+       ValaDMAPDb* _tmp11_ = NULL;
+       ValaDPAPRecordFactory* _tmp12_ = NULL;
+       DPAPConnection* _tmp13_ = NULL;
+       DMAPConnection* _tmp14_ = NULL;
+       g_return_if_fail (browser != NULL);
+       g_return_if_fail (service != NULL);
        _tmp0_ = service;
-       _tmp1_ = _tmp0_->service_name;
-       _tmp2_ = service;
-       _tmp3_ = _tmp2_->host;
+       g_object_get (_tmp0_, "service-name", &_tmp1_, NULL);
+       _tmp2_ = _tmp1_;
+       _tmp3_ = _tmp2_;
        _tmp4_ = service;
-       _tmp5_ = _tmp4_->port;
-       _tmp6_ = self->priv->db;
-       _tmp7_ = self->priv->factory;
-       _tmp8_ = dpap_connection_new (_tmp1_, _tmp3_, _tmp5_, (DMAPDb*) _tmp6_, (DMAPRecordFactory*) _tmp7_);
+       g_object_get (_tmp4_, "host", &_tmp5_, NULL);
+       _tmp6_ = _tmp5_;
+       _tmp7_ = _tmp6_;
+       _tmp8_ = service;
+       g_object_get (_tmp8_, "port", &_tmp9_, NULL);
+       _tmp10_ = _tmp9_;
+       _tmp11_ = self->priv->db;
+       _tmp12_ = self->priv->factory;
+       _tmp13_ = dpap_connection_new (_tmp3_, _tmp7_, _tmp10_, (DMAPDb*) _tmp11_, (DMAPRecordFactory*) 
_tmp12_);
        _g_object_unref0 (self->priv->connection);
-       self->priv->connection = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, DMAP_TYPE_CONNECTION, DMAPConnection);
-       _tmp9_ = self->priv->connection;
-       dmap_connection_connect (_tmp9_, _dpap_copy_connected_cb_dmap_connection_callback, self);
+       self->priv->connection = G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, DMAP_TYPE_CONNECTION, DMAPConnection);
+       _g_free0 (_tmp7_);
+       _g_free0 (_tmp3_);
+       _tmp14_ = self->priv->connection;
+       dmap_connection_start (_tmp14_, _dpap_copy_connected_cb_dmap_connection_func, self);
 }
 
 
-static void _dpap_copy_service_added_cb_dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, void* 
service, gpointer self) {
-       dpap_copy_service_added_cb (self, service);
+static void ___lambda3__dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, DMAPMdnsService* service, 
gpointer self) {
+       __lambda3_ (self, _sender, service);
 }
 
 
@@ -226,11 +241,11 @@ DPAPCopy* dpap_copy_construct (GType object_type, GError** error) {
        _tmp1_ = vala_dpap_record_factory_new ();
        _g_object_unref0 (self->priv->factory);
        self->priv->factory = _tmp1_;
-       _tmp2_ = dmap_mdns_browser_new (DMAP_MDNS_BROWSER_SERVICE_TYPE_DPAP);
+       _tmp2_ = dmap_mdns_browser_new (DMAP_MDNS_SERVICE_TYPE_DPAP);
        _g_object_unref0 (self->priv->browser);
        self->priv->browser = _tmp2_;
        _tmp3_ = self->priv->browser;
-       g_signal_connect (_tmp3_, "service-added", (GCallback) 
_dpap_copy_service_added_cb_dmap_mdns_browser_service_added, self);
+       g_signal_connect (_tmp3_, "service-added", (GCallback) ___lambda3__dmap_mdns_browser_service_added, 
self);
        _tmp4_ = self->priv->browser;
        dmap_mdns_browser_start (_tmp4_, &_inner_error_);
        if (_inner_error_ != NULL) {
diff --git a/tests/dmapcopy.vala b/tests/dmapcopy.vala
index 9582a7c..94891de 100644
--- a/tests/dmapcopy.vala
+++ b/tests/dmapcopy.vala
@@ -65,7 +65,7 @@ private class DPAPCopy {
                browser = new DMAP.MdnsBrowser (DMAP.MdnsServiceType.DPAP);
                browser.service_added.connect ((browser, service) => {
                        connection = (DMAP.Connection) new DPAP.Connection (service.service_name, 
service.host, service.port, db, factory);
-                       connection.connect (connected_cb);
+                       connection.start (connected_cb);
                });
                browser.start ();
        }
diff --git a/tests/dpapview.c b/tests/dpapview.c
index b2c1486..61b86c0 100644
--- a/tests/dpapview.c
+++ b/tests/dpapview.c
@@ -122,27 +122,27 @@ enum  {
        DPAP_VIEWER_DUMMY_PROPERTY
 };
 static gboolean dpap_viewer_connected_cb (DPAPViewer* self, DMAPConnection* connection, gboolean _result_, 
const gchar* reason);
-static void __lambda2_ (DPAPViewer* self, gconstpointer k, gconstpointer v);
+static void __lambda2_ (DPAPViewer* self, guint k, DMAPRecord* v);
 GType vala_dpap_record_get_type (void) G_GNUC_CONST;
 GByteArray* vala_dpap_record_get_thumbnail (ValaDPAPRecord* self);
 const gchar* vala_dpap_record_get_filename (ValaDPAPRecord* self);
-static void ___lambda2__gh_func (gconstpointer key, gconstpointer value, gpointer self);
-static void dpap_viewer_service_added_cb (DPAPViewer* self, DMAPMdnsBrowserService* service);
-static gboolean _dpap_viewer_connected_cb_dmap_connection_callback (DMAPConnection* connection, gboolean 
_result_, const gchar* reason, gpointer self);
+static void ___lambda2__dmap_id_record_func (guint id, DMAPRecord* record, gpointer self);
 DPAPViewer* dpap_viewer_new (GtkBuilder* builder, GError** error);
 DPAPViewer* dpap_viewer_construct (GType object_type, GtkBuilder* builder, GError** error);
 ValaDMAPDb* vala_dmap_db_new (void);
 ValaDMAPDb* vala_dmap_db_construct (GType object_type);
 ValaDPAPRecordFactory* vala_dpap_record_factory_new (void);
 ValaDPAPRecordFactory* vala_dpap_record_factory_construct (GType object_type);
-static void _dpap_viewer_service_added_cb_dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, void* 
service, gpointer self);
+static void __lambda3_ (DPAPViewer* self, DMAPMdnsBrowser* browser, DMAPMdnsService* service);
+static gboolean _dpap_viewer_connected_cb_dmap_connection_func (DMAPConnection* connection, gboolean 
_result_, const gchar* reason, gpointer self);
+static void ___lambda3__dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, DMAPMdnsService* service, 
gpointer self);
 static void dpap_viewer_finalize (DPAPViewer* obj);
 gint _vala_main (gchar** args, int args_length1);
 
 
-static void __lambda2_ (DPAPViewer* self, gconstpointer k, gconstpointer v) {
+static void __lambda2_ (DPAPViewer* self, guint k, DMAPRecord* v) {
        GdkPixbuf* pixbuf = NULL;
-       gconstpointer _tmp0_ = NULL;
+       DMAPRecord* _tmp0_ = NULL;
        GByteArray* _tmp1_ = NULL;
        GByteArray* _tmp2_ = NULL;
        GtkTreeIter iter = {0};
@@ -151,10 +151,11 @@ static void __lambda2_ (DPAPViewer* self, gconstpointer k, gconstpointer v) {
        GtkListStore* _tmp17_ = NULL;
        GtkTreeIter _tmp18_ = {0};
        GdkPixbuf* _tmp19_ = NULL;
-       gconstpointer _tmp20_ = NULL;
+       DMAPRecord* _tmp20_ = NULL;
        const gchar* _tmp21_ = NULL;
        const gchar* _tmp22_ = NULL;
        GError * _inner_error_ = NULL;
+       g_return_if_fail (v != NULL);
        pixbuf = NULL;
        _tmp0_ = v;
        _tmp1_ = vala_dpap_record_get_thumbnail (G_TYPE_CHECK_INSTANCE_CAST (_tmp0_, TYPE_VALA_DPAP_RECORD, 
ValaDPAPRecord));
@@ -165,7 +166,7 @@ static void __lambda2_ (DPAPViewer* self, gconstpointer k, gconstpointer v) {
                gchar* _tmp3_ = NULL;
                gint _tmp4_ = 0;
                const gchar* _tmp5_ = NULL;
-               gconstpointer _tmp6_ = NULL;
+               DMAPRecord* _tmp6_ = NULL;
                GByteArray* _tmp7_ = NULL;
                GByteArray* _tmp8_ = NULL;
                guint8* _tmp9_ = NULL;
@@ -232,8 +233,8 @@ static void __lambda2_ (DPAPViewer* self, gconstpointer k, gconstpointer v) {
 }
 
 
-static void ___lambda2__gh_func (gconstpointer key, gconstpointer value, gpointer self) {
-       __lambda2_ (self, key, value);
+static void ___lambda2__dmap_id_record_func (guint id, DMAPRecord* record, gpointer self) {
+       __lambda2_ (self, id, record);
 }
 
 
@@ -248,54 +249,67 @@ static gboolean dpap_viewer_connected_cb (DPAPViewer* self, DMAPConnection* conn
        _tmp1_ = dmap_db_count ((DMAPDb*) _tmp0_);
        g_debug ("dpapview.vala:31: %lld entries\n", _tmp1_);
        _tmp2_ = self->priv->db;
-       dmap_db_foreach ((DMAPDb*) _tmp2_, ___lambda2__gh_func, self);
+       dmap_db_foreach ((DMAPDb*) _tmp2_, ___lambda2__dmap_id_record_func, self);
        result = TRUE;
        return result;
 }
 
 
-static gboolean _dpap_viewer_connected_cb_dmap_connection_callback (DMAPConnection* connection, gboolean 
_result_, const gchar* reason, gpointer self) {
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+static gboolean _dpap_viewer_connected_cb_dmap_connection_func (DMAPConnection* connection, gboolean 
_result_, const gchar* reason, gpointer self) {
        gboolean result;
        result = dpap_viewer_connected_cb (self, connection, _result_, reason);
        return result;
 }
 
 
-static void dpap_viewer_service_added_cb (DPAPViewer* self, DMAPMdnsBrowserService* service) {
-       DMAPMdnsBrowserService* _tmp0_ = NULL;
-       const gchar* _tmp1_ = NULL;
-       DMAPMdnsBrowserService* _tmp2_ = NULL;
-       const gchar* _tmp3_ = NULL;
-       DMAPMdnsBrowserService* _tmp4_ = NULL;
-       guint _tmp5_ = 0U;
-       ValaDMAPDb* _tmp6_ = NULL;
-       ValaDPAPRecordFactory* _tmp7_ = NULL;
-       DPAPConnection* _tmp8_ = NULL;
-       DMAPConnection* _tmp9_ = NULL;
-       g_return_if_fail (self != NULL);
+static void __lambda3_ (DPAPViewer* self, DMAPMdnsBrowser* browser, DMAPMdnsService* service) {
+       DMAPMdnsService* _tmp0_ = NULL;
+       gchar* _tmp1_ = NULL;
+       gchar* _tmp2_ = NULL;
+       gchar* _tmp3_ = NULL;
+       DMAPMdnsService* _tmp4_ = NULL;
+       gchar* _tmp5_ = NULL;
+       gchar* _tmp6_ = NULL;
+       gchar* _tmp7_ = NULL;
+       DMAPMdnsService* _tmp8_ = NULL;
+       guint _tmp9_ = 0U;
+       guint _tmp10_ = 0U;
+       ValaDMAPDb* _tmp11_ = NULL;
+       ValaDPAPRecordFactory* _tmp12_ = NULL;
+       DPAPConnection* _tmp13_ = NULL;
+       DMAPConnection* _tmp14_ = NULL;
+       g_return_if_fail (browser != NULL);
+       g_return_if_fail (service != NULL);
        _tmp0_ = service;
-       _tmp1_ = _tmp0_->service_name;
-       _tmp2_ = service;
-       _tmp3_ = _tmp2_->host;
+       g_object_get (_tmp0_, "service-name", &_tmp1_, NULL);
+       _tmp2_ = _tmp1_;
+       _tmp3_ = _tmp2_;
        _tmp4_ = service;
-       _tmp5_ = _tmp4_->port;
-       _tmp6_ = self->priv->db;
-       _tmp7_ = self->priv->factory;
-       _tmp8_ = dpap_connection_new (_tmp1_, _tmp3_, _tmp5_, (DMAPDb*) _tmp6_, (DMAPRecordFactory*) _tmp7_);
+       g_object_get (_tmp4_, "host", &_tmp5_, NULL);
+       _tmp6_ = _tmp5_;
+       _tmp7_ = _tmp6_;
+       _tmp8_ = service;
+       g_object_get (_tmp8_, "port", &_tmp9_, NULL);
+       _tmp10_ = _tmp9_;
+       _tmp11_ = self->priv->db;
+       _tmp12_ = self->priv->factory;
+       _tmp13_ = dpap_connection_new (_tmp3_, _tmp7_, _tmp10_, (DMAPDb*) _tmp11_, (DMAPRecordFactory*) 
_tmp12_);
        _g_object_unref0 (self->priv->connection);
-       self->priv->connection = G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, DMAP_TYPE_CONNECTION, DMAPConnection);
-       _tmp9_ = self->priv->connection;
-       dmap_connection_connect (_tmp9_, _dpap_viewer_connected_cb_dmap_connection_callback, self);
-}
-
-
-static gpointer _g_object_ref0 (gpointer self) {
-       return self ? g_object_ref (self) : NULL;
+       self->priv->connection = G_TYPE_CHECK_INSTANCE_CAST (_tmp13_, DMAP_TYPE_CONNECTION, DMAPConnection);
+       _g_free0 (_tmp7_);
+       _g_free0 (_tmp3_);
+       _tmp14_ = self->priv->connection;
+       dmap_connection_start (_tmp14_, _dpap_viewer_connected_cb_dmap_connection_func, self);
 }
 
 
-static void _dpap_viewer_service_added_cb_dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, void* 
service, gpointer self) {
-       dpap_viewer_service_added_cb (self, service);
+static void ___lambda3__dmap_mdns_browser_service_added (DMAPMdnsBrowser* _sender, DMAPMdnsService* service, 
gpointer self) {
+       __lambda3_ (self, _sender, service);
 }
 
 
@@ -345,11 +359,11 @@ DPAPViewer* dpap_viewer_construct (GType object_type, GtkBuilder* builder, GErro
        gtk_icon_view_set_pixbuf_column (iconview, 0);
        gtk_icon_view_set_text_column (iconview, 1);
        gtk_widget_show_all (widget);
-       _tmp12_ = dmap_mdns_browser_new (DMAP_MDNS_BROWSER_SERVICE_TYPE_DPAP);
+       _tmp12_ = dmap_mdns_browser_new (DMAP_MDNS_SERVICE_TYPE_DPAP);
        _g_object_unref0 (self->priv->browser);
        self->priv->browser = _tmp12_;
        _tmp13_ = self->priv->browser;
-       g_signal_connect (_tmp13_, "service-added", (GCallback) 
_dpap_viewer_service_added_cb_dmap_mdns_browser_service_added, self);
+       g_signal_connect (_tmp13_, "service-added", (GCallback) ___lambda3__dmap_mdns_browser_service_added, 
self);
        _tmp14_ = self->priv->browser;
        dmap_mdns_browser_start (_tmp14_, &_inner_error_);
        if (_inner_error_ != NULL) {
diff --git a/tests/dpapview.vala b/tests/dpapview.vala
index 181f2b1..3c3b47a 100644
--- a/tests/dpapview.vala
+++ b/tests/dpapview.vala
@@ -66,7 +66,7 @@ private class DPAPViewer {
                browser = new DMAP.MdnsBrowser (DMAP.MdnsServiceType.DPAP);
                browser.service_added.connect ((browser, service) =>  {
                        connection = (DMAP.Connection) new DPAP.Connection (service.service_name, 
service.host, service.port, db, factory);
-                       connection.connect (connected_cb);
+                       connection.start (connected_cb);
                });
                browser.start ();
        }
diff --git a/tests/test-dmap-client-python b/tests/test-dmap-client-python
index 69e8d0d..2f18ded 100755
--- a/tests/test-dmap-client-python
+++ b/tests/test-dmap-client-python
@@ -22,31 +22,70 @@ class PyDMAPDb(GObject.GObject, DMAP.Db):
        def __init__(self):
                super(PyDMAPDb, self).__init__()
 
-def print_record(id, record, user_data):
-       title = record.get_property("title")
-       has_video = record.get_property("has-video")
-       artist = record.get_property("songartist")
+class PyDAAPRecord(GObject.GObject, DAAP.Record, DMAP.Record):
+       location    = GObject.property(type=str,  default=None)
+       title       = GObject.property(type=str,  default=None)
+       mediakind   = GObject.property(type=int,  default=0)
+       songalbum   = GObject.property(type=str,  default=None)
+       songalbumid = GObject.property(type=int,  default=0)
+       sort_album  = GObject.property(type=str,  default=None)
+       songartist  = GObject.property(type=str,  default=None)
+       sort_artist = GObject.property(type=str,  default=None)
+       songgenre   = GObject.property(type=str,  default=None)
+       format      = GObject.property(type=str,  default=None)
+       rating      = GObject.property(type=int,  default=None)
+       filesize    = GObject.property(type=int,  default=None)
+       duration    = GObject.property(type=int,  default=0)
+       track       = GObject.property(type=int,  default=0)
+       year        = GObject.property(type=int,  default=0)
+       firstseen   = GObject.property(type=int,  default=0)
+       mtime       = GObject.property(type=int,  default=0)
+       disc        = GObject.property(type=int,  default=0)
+       bitrate     = GObject.property(type=int,  default=0)
+       has_video   = GObject.property(type=bool, default=0)
 
-       print id, artist, title, has_video
+       def __init__(self):
+               super(PyDAAPRecord, self).__init__()
+
+class PyDAAPRecordFactory(GObject.GObject, DMAP.RecordFactory):
+       def do_create (self, user_data=None):
+               return PyDAAPRecord()
+
+       def __init__(self):
+               super(PyDAAPRecordFactory, self).__init__()
+
+class TestDMAPClient(GObject.GObject):
+
+       def __init__(self):
+               super(TestDMAPClient, self).__init__()
+
+               self.factory = PyDAAPRecordFactory()
+               self.db = PyDMAPDb()
+               self.browser = DMAP.MdnsBrowser.new(DMAP.MdnsServiceType.DAAP)
 
-def connected_cb(self, result, reason, db):
-       db.foreach(print_record, None)
+       def start(self):
+               self.browser.connect("service-added", self.service_added_cb, None)
+               self.browser.start()
 
-def service_added_cb(self, service, user_data):
-       service_name = service.get_property("service-name")
-       name         = service.get_property("name")
-       host         = service.get_property("host")
-       port         = service.get_property("port")
+       def print_record(self, id, record, user_data):
+               title = record.get_property("title")
+               has_video = record.get_property("has-video")
+               artist = record.get_property("songartist")
 
-       factory = DAAP.RecordFactorySimple()
-       db = PyDMAPDb()
+               print id, artist, title, has_video
 
-       connection = DAAP.Connection.new(service_name, host, port, db, factory)
+       def connected_cb(self, connection, result, reason, user_data):
+               self.db.foreach(self.print_record, None)
 
-       connection.start(connected_cb, db)
+       def service_added_cb(self, browser, service, user_data):
+               service_name = service.get_property("service-name")
+               name         = service.get_property("name")
+               host         = service.get_property("host")
+               port         = service.get_property("port")
 
-browser = DMAP.MdnsBrowser.new(DMAP.MdnsServiceType.DAAP)
-browser.connect("service-added", service_added_cb, None)
-browser.start()
+               connection = DAAP.Connection.new(service_name, host, port, self.db, self.factory)
+               connection.start(self.connected_cb, self.db)
 
+client = TestDMAPClient ()
+client.start ()
 GLib.MainLoop().run()
diff --git a/tests/test-dmap-client.c b/tests/test-dmap-client.c
index 427895b..85b748d 100644
--- a/tests/test-dmap-client.c
+++ b/tests/test-dmap-client.c
@@ -37,7 +37,7 @@ static GMainLoop *loop;
 static guint conn_type = DAAP;
 
 static void
-print_record (gpointer id, DMAPRecord *record, gpointer user_data)
+print_record (guint id, DMAPRecord *record, gpointer user_data)
 {
        gboolean has_video;
        gchar   *artist, *title;
@@ -48,7 +48,7 @@ print_record (gpointer id, DMAPRecord *record, gpointer user_data)
                     "title",  &title,
                      NULL);
 
-       g_print ("%d: %s %s (has video: %s)\n", GPOINTER_TO_UINT (id), artist, title, has_video ? "Y" : "N");
+       g_print ("%d: %s %s (has video: %s)\n", id, artist, title, has_video ? "Y" : "N");
 
        g_free (artist);
        g_free (title);
@@ -62,7 +62,7 @@ connected_cb (DMAPConnection *connection,
 {
        g_print ("Connection cb., DB has %lu entries\n", dmap_db_count (db));
 
-       dmap_db_foreach (db, (GHFunc) print_record, NULL);
+       dmap_db_foreach (db, print_record, NULL);
 }
 
 static void
@@ -123,7 +123,7 @@ service_added_cb (DMAPMdnsBrowser *browser,
         conn = DMAP_CONNECTION (dpap_connection_new (name, host, port, db, factory));
     }
     g_signal_connect (DMAP_CONNECTION (conn), "authenticate", G_CALLBACK(authenticate_cb), NULL);
-    dmap_connection_start (DMAP_CONNECTION (conn), (DMAPConnectionCallback) connected_cb, db);
+    dmap_connection_start (DMAP_CONNECTION (conn), (DMAPConnectionFunc) connected_cb, db);
 }
 
 int main(int argc, char **argv)
diff --git a/tests/vala-dmap-db.c b/tests/vala-dmap-db.c
index 208eb09..c19c376 100644
--- a/tests/vala-dmap-db.c
+++ b/tests/vala-dmap-db.c
@@ -231,7 +231,7 @@ static void vala_dmap_db_dmap_db_interface_init (DMAPDbIface * iface) {
        iface->add_path = (guint (*)(DMAPDb*, const gchar*)) vala_dmap_db_real_add_path;
        iface->add_with_id = (guint (*)(DMAPDb*, DMAPRecord*, guint)) vala_dmap_db_real_add_with_id;
        iface->count = (gint64 (*)(DMAPDb*)) vala_dmap_db_real_count;
-       iface->foreach = (void (*)(DMAPDb*, GHFunc, void*)) vala_dmap_db_real_foreach;
+       iface->foreach = (void (*)(DMAPDb*, DMAPIdRecordFunc, void*)) vala_dmap_db_real_foreach;
        iface->lookup_by_id = (DMAPRecord* (*)(DMAPDb*, guint)) vala_dmap_db_real_lookup_by_id;
        iface->lookup_id_by_location = (guint (*)(DMAPDb*, const gchar*)) 
vala_dmap_db_real_lookup_id_by_location;
 }
diff --git a/vala/libdmapsharing-3.0.vapi b/vala/libdmapsharing-3.0.vapi
index 131ba55..755e90b 100644
--- a/vala/libdmapsharing-3.0.vapi
+++ b/vala/libdmapsharing-3.0.vapi
@@ -20,10 +20,8 @@ namespace DAAP {
                public static void authenticate_message (DAAP.DMAPConnection connection, Soup.Session 
session, Soup.Message message, Soup.Auth auth, string password);
                [CCode (cname = "dmap_connection_build_message")]
                public virtual unowned Soup.Message build_message (DAAP.DMAPConnection connection, string 
path, bool need_hash, double version, int req_id, bool send_close);
-               [CCode (cname = "dmap_connection_connect")]
-               public static void connect (DAAP.DMAPConnection connection, DAAP.DMAPConnectionCallback 
callback);
                [CCode (cname = "dmap_connection_disconnect")]
-               public static void disconnect (DAAP.DMAPConnection connection, DAAP.DMAPConnectionCallback 
callback);
+               public static void disconnect (DAAP.DMAPConnection connection, DAAP.DMAPConnectionFunc 
callback);
                [CCode (cname = "dmap_connection_get")]
                public bool @get (string path, bool need_hash, DAAP.DMAPResponseHandler handler);
                [CCode (cname = "dmap_connection_get_headers")]
@@ -40,16 +38,18 @@ namespace DAAP {
                public static bool is_connected (DAAP.DMAPConnection connection);
                [CCode (cname = "dmap_connection_setup")]
                public static void setup (DAAP.DMAPConnection connection);
+               [CCode (cname = "dmap_connection_start")]
+               public static void start (DAAP.DMAPConnection connection, DAAP.DMAPConnectionFunc callback);
                [NoAccessorMethod]
                public void* base_uri { get; set; }
                [NoAccessorMethod]
                public int database_id { get; set; }
                [NoAccessorMethod]
-               public void* db { get; construct; }
+               public DMAP.Db db { owned get; construct; }
                [NoAccessorMethod]
                public double dmap_version { get; set; }
                [NoAccessorMethod]
-               public void* factory { get; construct; }
+               public GLib.Object factory { owned get; construct; }
                [NoAccessorMethod]
                public string host { owned get; construct; }
                [NoAccessorMethod]
@@ -123,32 +123,21 @@ namespace DAAP {
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class DMAPMdnsBrowser : GLib.Object {
                [CCode (cname = "dmap_mdns_browser_new", has_construct_function = false, type = 
"DMAPMdnsBrowser*")]
-               public DMAPMdnsBrowser (DAAP.DMAPMdnsBrowserServiceType type);
+               public DMAPMdnsBrowser (DAAP.DMAPMdnsServiceType type);
                [CCode (cname = "dmap_mdns_browser_error_quark")]
                public static GLib.Quark error_quark ();
                [CCode (cname = "dmap_mdns_browser_get_service_type")]
-               public static DAAP.DMAPMdnsBrowserServiceType get_service_type (DAAP.DMAPMdnsBrowser browser);
+               public static DAAP.DMAPMdnsServiceType get_service_type (DAAP.DMAPMdnsBrowser browser);
                [CCode (cname = "dmap_mdns_browser_get_services")]
                public static unowned GLib.SList get_services (DAAP.DMAPMdnsBrowser browser);
                [CCode (cname = "dmap_mdns_browser_start")]
                public static bool start (DAAP.DMAPMdnsBrowser browser) throws GLib.Error;
                [CCode (cname = "dmap_mdns_browser_stop")]
                public static bool stop (DAAP.DMAPMdnsBrowser browser) throws GLib.Error;
-               public virtual signal void service_added (void* service);
+               public virtual signal void service_added (DAAP.DMAPMdnsService service);
                public virtual signal void service_removed (string service);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       [Compact]
-       public class DMAPMdnsBrowserService {
-               public weak string host;
-               public weak string name;
-               public weak string pair;
-               public bool password_protected;
-               public uint port;
-               public weak string service_name;
-               public DAAP.DMAPMdnsBrowserTransportProtocol transport_protocol;
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class DMAPMdnsPublisher : GLib.Object {
                [CCode (cname = "dmap_mdns_publisher_new", has_construct_function = false, type = 
"DMAPMdnsPublisher*")]
                public DMAPMdnsPublisher ();
@@ -164,6 +153,29 @@ namespace DAAP {
                public virtual signal void published (string name);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public class DMAPMdnsService : GLib.Object {
+               [CCode (has_construct_function = false)]
+               protected DMAPMdnsService ();
+               [NoAccessorMethod]
+               public string host { owned get; set; }
+               [NoAccessorMethod]
+               public string name { owned get; set; }
+               [NoAccessorMethod]
+               public string pair { owned get; set; }
+               [NoAccessorMethod]
+               public bool password_protected { get; set; }
+               [NoAccessorMethod]
+               public uint port { get; set; }
+               [NoAccessorMethod]
+               public string service_name { owned get; set; }
+               [NoAccessorMethod]
+               public uint transport_protocol { get; set; }
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       [Compact]
+       public class DMAPMdnsServiceService {
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        [Compact]
        public class DMAPMetaDataMap {
        }
@@ -179,7 +191,7 @@ namespace DAAP {
                [CCode (has_construct_function = false)]
                protected DMAPShare ();
                [NoWrapper]
-               public virtual void add_entry_to_mlcl (void* id, DAAP.DMAPRecord record, void* mb);
+               public virtual void add_entry_to_mlcl (uint id, DAAP.DMAPRecord record, void* mb);
                [NoWrapper]
                public virtual void content_codes (DAAP.DMAPShare share, Soup.Server server, Soup.Message 
message, string path, GLib.HashTable query, Soup.ClientContext ctx);
                [NoWrapper]
@@ -285,7 +297,7 @@ namespace DAAP {
                [CCode (cname = "dmap_db_count")]
                public abstract int64 count (DMAP.Db db);
                [CCode (cname = "dmap_db_foreach")]
-               public abstract void @foreach (DMAP.Db db, GLib.HFunc func, void* data);
+               public abstract void @foreach (DMAP.Db db, DAAP.DMAPIdRecordFunc func, void* data);
                [CCode (cname = "dmap_db_lookup_by_id")]
                public abstract unowned DAAP.DMAPRecord lookup_by_id (DMAP.Db db, uint id);
                [CCode (cname = "dmap_db_lookup_id_by_location")]
@@ -495,8 +507,19 @@ namespace DAAP {
                NOT_RUNNING,
                FAILED
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_BROWSER_SERVICE_TYPE_")]
-       public enum DMAPMdnsBrowserServiceType {
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
+       public enum DMAPMdnsPublisherError {
+               NOT_RUNNING,
+               FAILED
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_SERVICE_TRANSPORT_PROTOCOL_")]
+       public enum DMAPMdnsServiceTransportProtocol {
+               TCP,
+               UDP,
+               LAST
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_SERVICE_TYPE_")]
+       public enum DMAPMdnsServiceType {
                INVALID,
                DAAP,
                DPAP,
@@ -504,17 +527,6 @@ namespace DAAP {
                RAOP,
                LAST
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_BROWSER_TRANSPORT_PROTOCOL_")]
-       public enum DMAPMdnsBrowserTransportProtocol {
-               TCP,
-               UDP,
-               LAST
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
-       public enum DMAPMdnsPublisherError {
-               NOT_RUNNING,
-               FAILED
-       }
        [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MEDIA_KIND_")]
        public enum DMAPMediaKind {
                MUSIC,
@@ -536,11 +548,11 @@ namespace DAAP {
                POINTER
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       public delegate bool DMAPConnectionCallback (DAAP.DMAPConnection connection, bool result, string 
reason);
+       public delegate bool DMAPConnectionFunc (DAAP.DMAPConnection connection, bool result, string reason);
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public delegate void DMAPIdRecordFunc (uint id, DAAP.DMAPRecord record);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public delegate void DMAPResponseHandler (DAAP.DMAPConnection connection, uint status, GLib.Node 
structure);
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", has_target = false)]
-       public delegate unowned string RecordGetValueFunc (DAAP.DMAPRecord record);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public const int DMAP_HASH_SIZE;
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
@@ -650,10 +662,8 @@ namespace DACP {
                public static void authenticate_message (DACP.DMAPConnection connection, Soup.Session 
session, Soup.Message message, Soup.Auth auth, string password);
                [CCode (cname = "dmap_connection_build_message")]
                public virtual unowned Soup.Message build_message (DACP.DMAPConnection connection, string 
path, bool need_hash, double version, int req_id, bool send_close);
-               [CCode (cname = "dmap_connection_connect")]
-               public static void connect (DACP.DMAPConnection connection, DACP.DMAPConnectionCallback 
callback);
                [CCode (cname = "dmap_connection_disconnect")]
-               public static void disconnect (DACP.DMAPConnection connection, DACP.DMAPConnectionCallback 
callback);
+               public static void disconnect (DACP.DMAPConnection connection, DACP.DMAPConnectionFunc 
callback);
                [CCode (cname = "dmap_connection_get")]
                public bool @get (string path, bool need_hash, DACP.DMAPResponseHandler handler);
                [CCode (cname = "dmap_connection_get_headers")]
@@ -670,16 +680,18 @@ namespace DACP {
                public static bool is_connected (DACP.DMAPConnection connection);
                [CCode (cname = "dmap_connection_setup")]
                public static void setup (DACP.DMAPConnection connection);
+               [CCode (cname = "dmap_connection_start")]
+               public static void start (DACP.DMAPConnection connection, DACP.DMAPConnectionFunc callback);
                [NoAccessorMethod]
                public void* base_uri { get; set; }
                [NoAccessorMethod]
                public int database_id { get; set; }
                [NoAccessorMethod]
-               public void* db { get; construct; }
+               public DMAP.Db db { owned get; construct; }
                [NoAccessorMethod]
                public double dmap_version { get; set; }
                [NoAccessorMethod]
-               public void* factory { get; construct; }
+               public GLib.Object factory { owned get; construct; }
                [NoAccessorMethod]
                public string host { owned get; construct; }
                [NoAccessorMethod]
@@ -753,32 +765,21 @@ namespace DACP {
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class DMAPMdnsBrowser : GLib.Object {
                [CCode (cname = "dmap_mdns_browser_new", has_construct_function = false, type = 
"DMAPMdnsBrowser*")]
-               public DMAPMdnsBrowser (DACP.DMAPMdnsBrowserServiceType type);
+               public DMAPMdnsBrowser (DACP.DMAPMdnsServiceType type);
                [CCode (cname = "dmap_mdns_browser_error_quark")]
                public static GLib.Quark error_quark ();
                [CCode (cname = "dmap_mdns_browser_get_service_type")]
-               public static DACP.DMAPMdnsBrowserServiceType get_service_type (DACP.DMAPMdnsBrowser browser);
+               public static DACP.DMAPMdnsServiceType get_service_type (DACP.DMAPMdnsBrowser browser);
                [CCode (cname = "dmap_mdns_browser_get_services")]
                public static unowned GLib.SList get_services (DACP.DMAPMdnsBrowser browser);
                [CCode (cname = "dmap_mdns_browser_start")]
                public static bool start (DACP.DMAPMdnsBrowser browser) throws GLib.Error;
                [CCode (cname = "dmap_mdns_browser_stop")]
                public static bool stop (DACP.DMAPMdnsBrowser browser) throws GLib.Error;
-               public virtual signal void service_added (void* service);
+               public virtual signal void service_added (DACP.DMAPMdnsService service);
                public virtual signal void service_removed (string service);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       [Compact]
-       public class DMAPMdnsBrowserService {
-               public weak string host;
-               public weak string name;
-               public weak string pair;
-               public bool password_protected;
-               public uint port;
-               public weak string service_name;
-               public DACP.DMAPMdnsBrowserTransportProtocol transport_protocol;
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class DMAPMdnsPublisher : GLib.Object {
                [CCode (cname = "dmap_mdns_publisher_new", has_construct_function = false, type = 
"DMAPMdnsPublisher*")]
                public DMAPMdnsPublisher ();
@@ -794,6 +795,29 @@ namespace DACP {
                public virtual signal void published (string name);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public class DMAPMdnsService : GLib.Object {
+               [CCode (has_construct_function = false)]
+               protected DMAPMdnsService ();
+               [NoAccessorMethod]
+               public string host { owned get; set; }
+               [NoAccessorMethod]
+               public string name { owned get; set; }
+               [NoAccessorMethod]
+               public string pair { owned get; set; }
+               [NoAccessorMethod]
+               public bool password_protected { get; set; }
+               [NoAccessorMethod]
+               public uint port { get; set; }
+               [NoAccessorMethod]
+               public string service_name { owned get; set; }
+               [NoAccessorMethod]
+               public uint transport_protocol { get; set; }
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       [Compact]
+       public class DMAPMdnsServiceService {
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        [Compact]
        public class DMAPMetaDataMap {
        }
@@ -809,7 +833,7 @@ namespace DACP {
                [CCode (has_construct_function = false)]
                protected DMAPShare ();
                [NoWrapper]
-               public virtual void add_entry_to_mlcl (void* id, DACP.DMAPRecord record, void* mb);
+               public virtual void add_entry_to_mlcl (uint id, DACP.DMAPRecord record, void* mb);
                [NoWrapper]
                public virtual void content_codes (DACP.DMAPShare share, Soup.Server server, Soup.Message 
message, string path, GLib.HashTable query, Soup.ClientContext ctx);
                [NoWrapper]
@@ -937,7 +961,7 @@ namespace DACP {
                [CCode (cname = "dmap_db_count")]
                public abstract int64 count (DMAP.Db db);
                [CCode (cname = "dmap_db_foreach")]
-               public abstract void @foreach (DMAP.Db db, GLib.HFunc func, void* data);
+               public abstract void @foreach (DMAP.Db db, DACP.DMAPIdRecordFunc func, void* data);
                [CCode (cname = "dmap_db_lookup_by_id")]
                public abstract unowned DACP.DMAPRecord lookup_by_id (DMAP.Db db, uint id);
                [CCode (cname = "dmap_db_lookup_id_by_location")]
@@ -1150,8 +1174,19 @@ namespace DACP {
                NOT_RUNNING,
                FAILED
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_BROWSER_SERVICE_TYPE_")]
-       public enum DMAPMdnsBrowserServiceType {
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
+       public enum DMAPMdnsPublisherError {
+               NOT_RUNNING,
+               FAILED
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_SERVICE_TRANSPORT_PROTOCOL_")]
+       public enum DMAPMdnsServiceTransportProtocol {
+               TCP,
+               UDP,
+               LAST
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_SERVICE_TYPE_")]
+       public enum DMAPMdnsServiceType {
                INVALID,
                DAAP,
                DPAP,
@@ -1159,17 +1194,6 @@ namespace DACP {
                RAOP,
                LAST
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_BROWSER_TRANSPORT_PROTOCOL_")]
-       public enum DMAPMdnsBrowserTransportProtocol {
-               TCP,
-               UDP,
-               LAST
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
-       public enum DMAPMdnsPublisherError {
-               NOT_RUNNING,
-               FAILED
-       }
        [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MEDIA_KIND_")]
        public enum DMAPMediaKind {
                MUSIC,
@@ -1203,11 +1227,11 @@ namespace DACP {
                ALL
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       public delegate bool DMAPConnectionCallback (DACP.DMAPConnection connection, bool result, string 
reason);
+       public delegate bool DMAPConnectionFunc (DACP.DMAPConnection connection, bool result, string reason);
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public delegate void DMAPIdRecordFunc (uint id, DACP.DMAPRecord record);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public delegate void DMAPResponseHandler (DACP.DMAPConnection connection, uint status, GLib.Node 
structure);
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", has_target = false)]
-       public delegate unowned string RecordGetValueFunc (DACP.DMAPRecord record);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public const int DMAP_HASH_SIZE;
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
@@ -1300,8 +1324,7 @@ namespace DMAP {
                protected Connection ();
                public void authenticate_message (Soup.Session session, Soup.Message message, Soup.Auth auth, 
string password);
                public virtual unowned Soup.Message build_message (string path, bool need_hash, double 
version, int req_id, bool send_close);
-               public void connect (DMAP.ConnectionCallback callback);
-               public void disconnect (DMAP.ConnectionCallback callback);
+               public void disconnect (DMAP.ConnectionFunc callback);
                public bool @get (string path, bool need_hash, DMAP.ResponseHandler handler);
                public unowned Soup.MessageHeaders get_headers (string uri);
                public unowned GLib.SList get_playlists ();
@@ -1313,16 +1336,17 @@ namespace DMAP {
                public virtual unowned DMAP.Record handle_mlcl (DMAP.RecordFactory factory, GLib.Node mlcl, 
int item_id);
                public bool is_connected ();
                public void setup ();
+               public void start (DMAP.ConnectionFunc callback);
                [NoAccessorMethod]
                public void* base_uri { get; set; }
                [NoAccessorMethod]
                public int database_id { get; set; }
                [NoAccessorMethod]
-               public void* db { get; construct; }
+               public DMAP.Db db { owned get; construct; }
                [NoAccessorMethod]
                public double dmap_version { get; set; }
                [NoAccessorMethod]
-               public void* factory { get; construct; }
+               public GLib.Object factory { owned get; construct; }
                [NoAccessorMethod]
                public string host { owned get; construct; }
                [NoAccessorMethod]
@@ -1396,27 +1420,16 @@ namespace DMAP {
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class MdnsBrowser : GLib.Object {
                [CCode (has_construct_function = false)]
-               public MdnsBrowser (DMAP.MdnsBrowserServiceType type);
+               public MdnsBrowser (DMAP.MdnsServiceType type);
                public static GLib.Quark error_quark ();
-               public DMAP.MdnsBrowserServiceType get_service_type ();
+               public DMAP.MdnsServiceType get_service_type ();
                public unowned GLib.SList get_services ();
                public bool start () throws GLib.Error;
                public bool stop () throws GLib.Error;
-               public virtual signal void service_added (void* service);
+               public virtual signal void service_added (DMAP.MdnsService service);
                public virtual signal void service_removed (string service);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       [Compact]
-       public class MdnsBrowserService {
-               public weak string host;
-               public weak string name;
-               public weak string pair;
-               public bool password_protected;
-               public uint port;
-               public weak string service_name;
-               public DMAP.MdnsBrowserTransportProtocol transport_protocol;
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class MdnsPublisher : GLib.Object {
                [CCode (has_construct_function = false)]
                public MdnsPublisher ();
@@ -1428,6 +1441,29 @@ namespace DMAP {
                public virtual signal void published (string name);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public class MdnsService : GLib.Object {
+               [CCode (has_construct_function = false)]
+               protected MdnsService ();
+               [NoAccessorMethod]
+               public string host { owned get; set; }
+               [NoAccessorMethod]
+               public string name { owned get; set; }
+               [NoAccessorMethod]
+               public string pair { owned get; set; }
+               [NoAccessorMethod]
+               public bool password_protected { get; set; }
+               [NoAccessorMethod]
+               public uint port { get; set; }
+               [NoAccessorMethod]
+               public string service_name { owned get; set; }
+               [NoAccessorMethod]
+               public uint transport_protocol { get; set; }
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       [Compact]
+       public class MdnsServiceService {
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        [Compact]
        public class MetaDataMap {
        }
@@ -1443,7 +1479,7 @@ namespace DMAP {
                [CCode (has_construct_function = false)]
                protected Share ();
                [NoWrapper]
-               public virtual void add_entry_to_mlcl (void* id, DMAP.Record record, void* mb);
+               public virtual void add_entry_to_mlcl (uint id, DMAP.Record record, void* mb);
                [NoWrapper]
                public virtual void content_codes (Soup.Server server, Soup.Message message, string path, 
GLib.HashTable query, Soup.ClientContext ctx);
                [NoWrapper]
@@ -1529,7 +1565,7 @@ namespace DMAP {
                public abstract uint add_with_id (DMAP.Record record, uint id);
                public unowned GLib.HashTable apply_filter (GLib.SList filter_def);
                public abstract int64 count ();
-               public abstract void @foreach (GLib.HFunc func);
+               public abstract void @foreach (DMAP.IdRecordFunc func);
                public abstract unowned DMAP.Record lookup_by_id (uint id);
                public abstract uint lookup_id_by_location (string location);
        }
@@ -1728,8 +1764,19 @@ namespace DMAP {
                NOT_RUNNING,
                FAILED
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_BROWSER_SERVICE_TYPE_")]
-       public enum MdnsBrowserServiceType {
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
+       public enum MdnsPublisherError {
+               NOT_RUNNING,
+               FAILED
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_SERVICE_TRANSPORT_PROTOCOL_")]
+       public enum MdnsServiceTransportProtocol {
+               TCP,
+               UDP,
+               LAST
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_SERVICE_TYPE_")]
+       public enum MdnsServiceType {
                INVALID,
                DAAP,
                DPAP,
@@ -1737,17 +1784,6 @@ namespace DMAP {
                RAOP,
                LAST
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_BROWSER_TRANSPORT_PROTOCOL_")]
-       public enum MdnsBrowserTransportProtocol {
-               TCP,
-               UDP,
-               LAST
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
-       public enum MdnsPublisherError {
-               NOT_RUNNING,
-               FAILED
-       }
        [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MEDIA_KIND_")]
        public enum MediaKind {
                MUSIC,
@@ -1769,9 +1805,9 @@ namespace DMAP {
                POINTER
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       public delegate bool ConnectionCallback (DMAP.Connection connection, bool result, string reason);
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", has_target = false)]
-       public delegate unowned string RecordGetValueFunc (DMAP.Record record);
+       public delegate bool ConnectionFunc (DMAP.Connection connection, bool result, string reason);
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public delegate void IdRecordFunc (uint id, DMAP.Record record);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public delegate void ResponseHandler (DMAP.Connection connection, uint status, GLib.Node structure);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
@@ -1873,10 +1909,8 @@ namespace DPAP {
                public static void authenticate_message (DPAP.DMAPConnection connection, Soup.Session 
session, Soup.Message message, Soup.Auth auth, string password);
                [CCode (cname = "dmap_connection_build_message")]
                public virtual unowned Soup.Message build_message (DPAP.DMAPConnection connection, string 
path, bool need_hash, double version, int req_id, bool send_close);
-               [CCode (cname = "dmap_connection_connect")]
-               public static void connect (DPAP.DMAPConnection connection, DPAP.DMAPConnectionCallback 
callback);
                [CCode (cname = "dmap_connection_disconnect")]
-               public static void disconnect (DPAP.DMAPConnection connection, DPAP.DMAPConnectionCallback 
callback);
+               public static void disconnect (DPAP.DMAPConnection connection, DPAP.DMAPConnectionFunc 
callback);
                [CCode (cname = "dmap_connection_get")]
                public bool @get (string path, bool need_hash, DPAP.DMAPResponseHandler handler);
                [CCode (cname = "dmap_connection_get_headers")]
@@ -1893,16 +1927,18 @@ namespace DPAP {
                public static bool is_connected (DPAP.DMAPConnection connection);
                [CCode (cname = "dmap_connection_setup")]
                public static void setup (DPAP.DMAPConnection connection);
+               [CCode (cname = "dmap_connection_start")]
+               public static void start (DPAP.DMAPConnection connection, DPAP.DMAPConnectionFunc callback);
                [NoAccessorMethod]
                public void* base_uri { get; set; }
                [NoAccessorMethod]
                public int database_id { get; set; }
                [NoAccessorMethod]
-               public void* db { get; construct; }
+               public DMAP.Db db { owned get; construct; }
                [NoAccessorMethod]
                public double dmap_version { get; set; }
                [NoAccessorMethod]
-               public void* factory { get; construct; }
+               public GLib.Object factory { owned get; construct; }
                [NoAccessorMethod]
                public string host { owned get; construct; }
                [NoAccessorMethod]
@@ -1976,32 +2012,21 @@ namespace DPAP {
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class DMAPMdnsBrowser : GLib.Object {
                [CCode (cname = "dmap_mdns_browser_new", has_construct_function = false, type = 
"DMAPMdnsBrowser*")]
-               public DMAPMdnsBrowser (DPAP.DMAPMdnsBrowserServiceType type);
+               public DMAPMdnsBrowser (DPAP.DMAPMdnsServiceType type);
                [CCode (cname = "dmap_mdns_browser_error_quark")]
                public static GLib.Quark error_quark ();
                [CCode (cname = "dmap_mdns_browser_get_service_type")]
-               public static DPAP.DMAPMdnsBrowserServiceType get_service_type (DPAP.DMAPMdnsBrowser browser);
+               public static DPAP.DMAPMdnsServiceType get_service_type (DPAP.DMAPMdnsBrowser browser);
                [CCode (cname = "dmap_mdns_browser_get_services")]
                public static unowned GLib.SList get_services (DPAP.DMAPMdnsBrowser browser);
                [CCode (cname = "dmap_mdns_browser_start")]
                public static bool start (DPAP.DMAPMdnsBrowser browser) throws GLib.Error;
                [CCode (cname = "dmap_mdns_browser_stop")]
                public static bool stop (DPAP.DMAPMdnsBrowser browser) throws GLib.Error;
-               public virtual signal void service_added (void* service);
+               public virtual signal void service_added (DPAP.DMAPMdnsService service);
                public virtual signal void service_removed (string service);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       [Compact]
-       public class DMAPMdnsBrowserService {
-               public weak string host;
-               public weak string name;
-               public weak string pair;
-               public bool password_protected;
-               public uint port;
-               public weak string service_name;
-               public DPAP.DMAPMdnsBrowserTransportProtocol transport_protocol;
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public class DMAPMdnsPublisher : GLib.Object {
                [CCode (cname = "dmap_mdns_publisher_new", has_construct_function = false, type = 
"DMAPMdnsPublisher*")]
                public DMAPMdnsPublisher ();
@@ -2017,6 +2042,29 @@ namespace DPAP {
                public virtual signal void published (string name);
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public class DMAPMdnsService : GLib.Object {
+               [CCode (has_construct_function = false)]
+               protected DMAPMdnsService ();
+               [NoAccessorMethod]
+               public string host { owned get; set; }
+               [NoAccessorMethod]
+               public string name { owned get; set; }
+               [NoAccessorMethod]
+               public string pair { owned get; set; }
+               [NoAccessorMethod]
+               public bool password_protected { get; set; }
+               [NoAccessorMethod]
+               public uint port { get; set; }
+               [NoAccessorMethod]
+               public string service_name { owned get; set; }
+               [NoAccessorMethod]
+               public uint transport_protocol { get; set; }
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       [Compact]
+       public class DMAPMdnsServiceService {
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        [Compact]
        public class DMAPMetaDataMap {
        }
@@ -2032,7 +2080,7 @@ namespace DPAP {
                [CCode (has_construct_function = false)]
                protected DMAPShare ();
                [NoWrapper]
-               public virtual void add_entry_to_mlcl (void* id, DPAP.DMAPRecord record, void* mb);
+               public virtual void add_entry_to_mlcl (uint id, DPAP.DMAPRecord record, void* mb);
                [NoWrapper]
                public virtual void content_codes (DPAP.DMAPShare share, Soup.Server server, Soup.Message 
message, string path, GLib.HashTable query, Soup.ClientContext ctx);
                [NoWrapper]
@@ -2138,7 +2186,7 @@ namespace DPAP {
                [CCode (cname = "dmap_db_count")]
                public abstract int64 count (DMAP.Db db);
                [CCode (cname = "dmap_db_foreach")]
-               public abstract void @foreach (DMAP.Db db, GLib.HFunc func, void* data);
+               public abstract void @foreach (DMAP.Db db, DPAP.DMAPIdRecordFunc func, void* data);
                [CCode (cname = "dmap_db_lookup_by_id")]
                public abstract unowned DPAP.DMAPRecord lookup_by_id (DMAP.Db db, uint id);
                [CCode (cname = "dmap_db_lookup_id_by_location")]
@@ -2346,8 +2394,19 @@ namespace DPAP {
                NOT_RUNNING,
                FAILED
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_BROWSER_SERVICE_TYPE_")]
-       public enum DMAPMdnsBrowserServiceType {
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
+       public enum DMAPMdnsPublisherError {
+               NOT_RUNNING,
+               FAILED
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_SERVICE_TRANSPORT_PROTOCOL_")]
+       public enum DMAPMdnsServiceTransportProtocol {
+               TCP,
+               UDP,
+               LAST
+       }
+       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_SERVICE_TYPE_")]
+       public enum DMAPMdnsServiceType {
                INVALID,
                DAAP,
                DPAP,
@@ -2355,17 +2414,6 @@ namespace DPAP {
                RAOP,
                LAST
        }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = 
"DMAP_MDNS_BROWSER_TRANSPORT_PROTOCOL_")]
-       public enum DMAPMdnsBrowserTransportProtocol {
-               TCP,
-               UDP,
-               LAST
-       }
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MDNS_PUBLISHER_ERROR_")]
-       public enum DMAPMdnsPublisherError {
-               NOT_RUNNING,
-               FAILED
-       }
        [CCode (cheader_filename = "libdmapsharing/dmap.h", cprefix = "DMAP_MEDIA_KIND_")]
        public enum DMAPMediaKind {
                MUSIC,
@@ -2387,11 +2435,11 @@ namespace DPAP {
                POINTER
        }
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
-       public delegate bool DMAPConnectionCallback (DPAP.DMAPConnection connection, bool result, string 
reason);
+       public delegate bool DMAPConnectionFunc (DPAP.DMAPConnection connection, bool result, string reason);
+       [CCode (cheader_filename = "libdmapsharing/dmap.h")]
+       public delegate void DMAPIdRecordFunc (uint id, DPAP.DMAPRecord record);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public delegate void DMAPResponseHandler (DPAP.DMAPConnection connection, uint status, GLib.Node 
structure);
-       [CCode (cheader_filename = "libdmapsharing/dmap.h", has_target = false)]
-       public delegate unowned string RecordGetValueFunc (DPAP.DMAPRecord record);
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]
        public const int DMAP_HASH_SIZE;
        [CCode (cheader_filename = "libdmapsharing/dmap.h")]


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]