static void create_connection (const DMAPMdnsBrowserServiceType protocol, const char *name, const char *host, const guint port) { DMAPRecordFactory *factory; DMAPConnection *conn; DMAPDb *db; db = DMAP_DB (g_object_new (TYPE_DMAPD_DMAP_DB_GHASHTABLE, NULL)); if (db == NULL) { g_error ("Error creating DB"); } /* FIXME: switch on DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP, _DPAP, _DACP or _INVALID */ if (protocol == DMAP_MDNS_BROWSER_SERVICE_TYPE_DAAP) { factory = DMAP_RECORD_FACTORY (g_object_new (TYPE_DMAPD_DAAP_RECORD_FACTORY, NULL)); if (factory == NULL) { g_error ("Error creating record factory"); } conn = DMAP_CONNECTION (daap_connection_new (name, host, port, db, factory)); } else { factory = DMAP_RECORD_FACTORY (g_object_new (TYPE_DMAPD_DPAP_RECORD_FACTORY, NULL)); if (factory == NULL) { g_error ("Error creating record factory"); } conn = DMAP_CONNECTION (dpap_connection_new (name, host, port, db, factory)); } dmap_connection_connect (DMAP_CONNECTION (conn), (DMAPConnectionCallback) connected_cb, db); }
static void grl_dpap_connect (gchar *name, gchar *host, guint port, ResultCbAndArgsAndDb *cb_and_db, DMAPConnectionCallback callback) { DMAPRecordFactory *factory; DMAPConnection *connection; factory = DMAP_RECORD_FACTORY (grl_dpap_record_factory_new ()); connection = DMAP_CONNECTION (dpap_connection_new (name, host, port, DMAP_DB (cb_and_db->db), factory)); dmap_connection_connect (connection, (DMAPConnectionCallback) callback, cb_and_db); }
static void dmap_connection_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { DMAPConnectionPrivate *priv = DMAP_CONNECTION (object)->priv; switch (prop_id) { case PROP_NAME: g_free (priv->name); priv->name = g_value_dup_string (value); break; case PROP_DB: priv->db = DMAP_DB (g_value_get_pointer (value)); break; case PROP_FACTORY: priv->record_factory = DMAP_RECORD_FACTORY (g_value_get_pointer (value)); break; case PROP_PASSWORD_PROTECTED: priv->password_protected = g_value_get_boolean (value); break; case PROP_HOST: g_free (priv->host); priv->host = g_value_dup_string (value); break; case PROP_PORT: priv->port = g_value_get_uint (value); break; case PROP_BASE_URI: priv->base_uri = g_value_get_pointer (value); break; case PROP_DATABASE_ID: priv->database_id = g_value_get_int (value); break; case PROP_SESSION_ID: priv->session_id = g_value_get_int (value); break; case PROP_DMAP_VERSION: priv->dmap_version = g_value_get_double (value); break; case PROP_REVISION_NUMBER: priv->revision_number = g_value_get_int (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
void dacp_share_pair (DACPShare * share, gchar * service_name, gchar passcode[4]) { gchar *pairing_code; gchar *name; gchar *path; DACPRemoteInfo *remote_info; remote_info = g_hash_table_lookup (share->priv->remotes, service_name); if (remote_info == NULL) { g_warning ("Remote %s not found.", service_name); return; } if (remote_info->connection != NULL) { g_warning ("Already pairing remote %s.", service_name); return; } g_object_get (share, "name", &name, NULL); remote_info->connection = DMAP_CONNECTION (dacp_connection_new (name, remote_info->host, remote_info->port, FALSE, NULL, NULL)); /* This is required since we don't call DMAPConnection default handler */ dmap_connection_setup (remote_info->connection); /* Get the remote path for pairing */ pairing_code = dacp_share_pairing_code (share, remote_info->pair_txt, passcode); path = g_strdup_printf ("/pair?pairingcode=%s&servicename=%s", pairing_code, name); g_free (pairing_code); g_debug ("Pairing remote in %s:%d/%s", remote_info->host, remote_info->port, path); /* Let DMAPConnection do the heavy work */ dmap_connection_get (remote_info->connection, path, FALSE, connection_handler_cb, share); g_free (path); }
static void dmap_connection_finalize (GObject * object) { DMAPConnection *connection; g_return_if_fail (object != NULL); g_return_if_fail (IS_DMAP_CONNECTION (object)); connection = DMAP_CONNECTION (object); g_return_if_fail (connection->priv != NULL); g_debug ("Finalize"); G_OBJECT_CLASS (dmap_connection_parent_class)->finalize (object); }
static void dmap_connection_dispose (GObject * object) { DMAPConnectionPrivate *priv = DMAP_CONNECTION (object)->priv; GSList *l; g_debug ("DAAP connection dispose"); if (priv->emit_progress_id != 0) { g_source_remove (priv->emit_progress_id); priv->emit_progress_id = 0; } if (priv->do_something_id != 0) { g_source_remove (priv->do_something_id); priv->do_something_id = 0; } if (priv->name) { g_free (priv->name); priv->name = NULL; } if (priv->username) { g_free (priv->username); priv->username = NULL; } if (priv->password) { g_free (priv->password); priv->password = NULL; } if (priv->host) { g_free (priv->host); priv->host = NULL; } if (priv->playlists) { for (l = priv->playlists; l; l = l->next) { DMAPPlaylist *playlist = l->data; /* FIXME: refstring: */ g_list_foreach (playlist->uris, (GFunc) g_free, NULL); g_list_free (playlist->uris); g_free (playlist->name); g_free (playlist); l->data = NULL; } g_slist_free (priv->playlists); priv->playlists = NULL; } if (priv->item_id_to_uri) { g_hash_table_destroy (priv->item_id_to_uri); priv->item_id_to_uri = NULL; } if (priv->session) { g_debug ("Aborting all pending requests"); soup_session_abort (priv->session); g_object_unref (G_OBJECT (priv->session)); priv->session = NULL; } if (priv->base_uri) { soup_uri_free (priv->base_uri); priv->base_uri = NULL; } if (priv->daap_base_uri) { g_free (priv->daap_base_uri); priv->daap_base_uri = NULL; } if (priv->db) { g_object_unref (G_OBJECT (priv->db)); priv->db = NULL; } if (priv->record_factory) { g_object_unref (G_OBJECT (priv->record_factory)); priv->record_factory = NULL; } if (priv->last_error_message != NULL) { g_free (priv->last_error_message); priv->last_error_message = NULL; } G_OBJECT_CLASS (dmap_connection_parent_class)->dispose (object); }