[libdmapsharing] Documentation work
- From: W. Michael Petullo <wmpetullo src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libdmapsharing] Documentation work
- Date: Thu, 20 May 2010 05:00:23 +0000 (UTC)
commit cbaa1805fd19be443448d57ea85399ba050e8982
Author: W. Michael Petullo <mike flyn org>
Date: Sun May 16 05:22:33 2010 -0500
Documentation work
In support of Alexandre Rosenfeld's Google Summer of Code work, I am
documenting libdmapsharing in a way that I hope will help people extend
libdmapsharing. This will supplement the documentation that is provided
to application developers.
Signed-off-by: W. Michael Petullo <mike flyn org>
AUTHORS | 130 ++++++++++++++++++++--------------------
ChangeLog | 4 +
docs/Makefile.am | 1 -
docs/browserapi.sgml | 28 +++++++++
docs/client-internals.sgml | 44 ++++++++++++++
docs/connectedcb.sgml | 40 +++++++++++++
docs/libdmapsharing-docs.sgml | 6 ++
docs/server-internals.sgml | 60 +++++++++++++++++++
docs/serviceaddedcb.sgml | 62 +++++++++++++++++++
9 files changed, 309 insertions(+), 66 deletions(-)
---
diff --git a/AUTHORS b/AUTHORS
index f187d21..c43bb95 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -28,77 +28,77 @@ from SourceForge to GNOME Git in August of 2009.
The original authors of Rhythmbox's DAAP plugin have endorsed the
re-licensing of their code in the following two emails:
-Date: Sun, 11 Jan 2009 14:46:35 -0500
-From: Charles Schmidt <cschmidt2[ ]gmail com>
-To: "W. Michael Petullo" <mike[ ]flyn org>
-Subject: Re: LGPL of Rhythmbox DAAP Code
-Cc: "cschmidt2[ ]emich edu" <cschmidt2[ ]emich edu>,
- "jmccann[ ]redhat com" <jmccann[ ]redhat com>,
- "jonathan[ ]d14n org" <jonathan[ ]d14n org>
+ Date: Sun, 11 Jan 2009 14:46:35 -0500
+ From: Charles Schmidt <cschmidt2[ ]gmail com>
+ To: "W. Michael Petullo" <mike[ ]flyn org>
+ Subject: Re: LGPL of Rhythmbox DAAP Code
+ Cc: "cschmidt2[ ]emich edu" <cschmidt2[ ]emich edu>,
+ "jmccann[ ]redhat com" <jmccann[ ]redhat com>,
+ "jonathan[ ]d14n org" <jonathan[ ]d14n org>
-Totally fine by me. Is there a website or vcs I can look at?
+ Totally fine by me. Is there a website or vcs I can look at?
-Charlie Schmidt
+ Charlie Schmidt
-On Jan 11, 2009, at 2:30 PM, "W. Michael Petullo" <mike[ ]flyn org> wrote:
+ On Jan 11, 2009, at 2:30 PM, "W. Michael Petullo" <mike[ ]flyn org> wrote:
-> Charles, Jon & Jonathan,
->
-> I recently began maintaining the libdmapsharing library, a DMAP
-> library originally based on Rhythmbox's DAAP plugin. The library is
-> distributed under the LGPL license. Your original work was
-> distributed under the GPL.
->
-> The original maintainer of libdmapsharing has stated that he
-> obtained permission from you regarding the relicensing of your code
-> to the LGPL. If you do not have any objections, would each of you
-> provide me with a brief statement to this effect that I may formally
-> distribute with libdmapsharing?
->
-> The following files were used in developing libdmapsharing:
->
-> rb-daap-connection.c
-> rb-daap-connection.h
-> rb-daap-hash.c
-> rb-daap-hash.h
-> rb-daap-mdns-avahi.c
-> rb-daap-mdns-avahi.h
-> rb-daap-mdns-browser-avahi.c
-> rb-daap-mdns-browser.h
-> rb-daap-mdns-publisher-avahi.c
-> rb-daap-mdns-publisher.h
-> rb-daap-share.c
-> rb-daap-share.h
-> rb-daap-structure.c
-> rb-daap-structure.h
->
-> Thank you.
->
-> Sincerely,
->
-> Mike Petullo
+ > Charles, Jon & Jonathan,
+ >
+ > I recently began maintaining the libdmapsharing library, a DMAP
+ > library originally based on Rhythmbox's DAAP plugin. The library is
+ > distributed under the LGPL license. Your original work was
+ > distributed under the GPL.
+ >
+ > The original maintainer of libdmapsharing has stated that he
+ > obtained permission from you regarding the relicensing of your code
+ > to the LGPL. If you do not have any objections, would each of you
+ > provide me with a brief statement to this effect that I may formally
+ > distribute with libdmapsharing?
+ >
+ > The following files were used in developing libdmapsharing:
+ >
+ > rb-daap-connection.c
+ > rb-daap-connection.h
+ > rb-daap-hash.c
+ > rb-daap-hash.h
+ > rb-daap-mdns-avahi.c
+ > rb-daap-mdns-avahi.h
+ > rb-daap-mdns-browser-avahi.c
+ > rb-daap-mdns-browser.h
+ > rb-daap-mdns-publisher-avahi.c
+ > rb-daap-mdns-publisher.h
+ > rb-daap-share.c
+ > rb-daap-share.h
+ > rb-daap-structure.c
+ > rb-daap-structure.h
+ >
+ > Thank you.
+ >
+ > Sincerely,
+ >
+ > Mike Petullo
-Date: Wed, 14 Jan 2009 21:00:45 +1000
-From: Jonathan Matthew <jonathan[ ]d14n org>
-To: "W. Michael Petullo" <mike[ ]flyn org>
-Subject: Re: LGPL of Rhythmbox DAAP Code
+ Date: Wed, 14 Jan 2009 21:00:45 +1000
+ From: Jonathan Matthew <jonathan[ ]d14n org>
+ To: "W. Michael Petullo" <mike[ ]flyn org>
+ Subject: Re: LGPL of Rhythmbox DAAP Code
-On Sun, Jan 11, 2009 at 02:30:15PM -0500, W. Michael Petullo wrote:
-> Charles, Jon & Jonathan,
->
-> I recently began maintaining the libdmapsharing library, a DMAP library
-> originally based on Rhythmbox's DAAP plugin. The library is distributed
-> under the LGPL license. Your original work was distributed under the GPL.
->
-> The original maintainer of libdmapsharing has stated that he obtained
-> permission from you regarding the relicensing of your code to the LGPL.
-> If you do not have any objections, would each of you provide me with a
-> brief statement to this effect that I may formally distribute with
-> libdmapsharing?
->
+ On Sun, Jan 11, 2009 at 02:30:15PM -0500, W. Michael Petullo wrote:
+ > Charles, Jon & Jonathan,
+ >
+ > I recently began maintaining the libdmapsharing library, a DMAP library
+ > originally based on Rhythmbox's DAAP plugin. The library is distributed
+ > under the LGPL license. Your original work was distributed under the GPL.
+ >
+ > The original maintainer of libdmapsharing has stated that he obtained
+ > permission from you regarding the relicensing of your code to the LGPL.
+ > If you do not have any objections, would each of you provide me with a
+ > brief statement to this effect that I may formally distribute with
+ > libdmapsharing?
+ >
-sure, why not.
+ sure, why not.
-enjoy,
+ enjoy,
--jonathan
+ -jonathan
diff --git a/ChangeLog b/ChangeLog
index 8d768be..aef71db 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+16 May 2010 W. Michael Petullo <mike flyn org>
+
+ * Documentation work.
+
07 May 2010 W. Michael Petullo <mike flyn org>
* Send artist and album sort order to DAAP clients.
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 91dbb88..bd6f455 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -14,7 +14,6 @@ DOC_MODULE=libdmapsharing
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
#DOC_MODULE_VERSION=2
-
# The top-level SGML file. You can change this if you want to.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
diff --git a/docs/browserapi.sgml b/docs/browserapi.sgml
new file mode 100644
index 0000000..f89e584
--- /dev/null
+++ b/docs/browserapi.sgml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+<refentry id="browserapi">
+ <refmeta>
+ <refentrytitle>mDNS Browser API</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>Libdmapsharing</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>mDNS Browser API</refname>
+ <refpurpose>
+ Using the mDNS browser API
+ </refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>mDNS Browser API</title>
+ <para>
+Create a mDNS browser using dmap_mdns_browser_new. This object emits
+a "service-added" signal for each DMAP service encountered. Add a
+"service-added" callback and call dmap_mdns_browser_start.
+
+ </para>
+ </refsect1>
+</refentry>
diff --git a/docs/client-internals.sgml b/docs/client-internals.sgml
new file mode 100644
index 0000000..de52111
--- /dev/null
+++ b/docs/client-internals.sgml
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+<refentry id="client-internals">
+ <refmeta>
+ <refentrytitle>Libdmapsharing Client Internals</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>Libdmapsharing</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>Libdmapsharing Client Internals</refname>
+ <refpurpose>
+ Detailed decription of libdmapsharing's code for programmers who wish to contribute to libdmapsharing
+ </refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>Libdmapsharing Client Internals</title>
+ <para>
+The DMAPMdnsBrowser class allows for asynchronous interaction with a DMAP
+server using mDNS.
+
+ </para>
+ <para>
+The DMAPConnection class's dmap_connection_connect()
+sets up a connection to a DMAP server using libsoup, stores the
+application-provided callback, sets the connection state to DMAP_GET_INFO,
+adds dmap_connection_do_something() as a GLib loop idle function
+and connects the function connected_cb() to the "operation-done"
+signal. The connection state progresses from DMAP_GET_INFO to
+DMAP_GET_PASSWORD then DMAP_LOGIN then DMAP_GET_REVISION_NUMBER then
+DMAP_GET_DB_INFO then DMAP_GET_SONGS then DMAP_GET_PLAYLISTS then
+(possibly) DMAP_GET_PLAYLIST_ENTRIES. Each time the state changes,
+dmap_connection_do_something() executes as an idle function. By the
+time these state transitions are complete, DMAPConnection has populated
+the media database. The
+connected_cb() function, in turn, executes the application-provided
+callback.
+
+ </para>
+ </refsect1>
+</refentry>
diff --git a/docs/connectedcb.sgml b/docs/connectedcb.sgml
new file mode 100644
index 0000000..7d2e59d
--- /dev/null
+++ b/docs/connectedcb.sgml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+<refentry id="connectedcb">
+ <refmeta>
+ <refentrytitle>Connected Callback</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>Libdmapsharing</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>Connected Callback</refname>
+ <refpurpose>
+ Defining a Connected Callback
+ </refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>Connected Callback</title>
+ <para>
+Once the DMAPConnection object completes its interrogation of a DMAP
+server, it will emit the "connected" signal. The "connected" callback
+will receive a fully populated media database. The following is a simple
+"connected" callback:
+
+ </para>
+ <screen>
+connected_cb (DMAPConnection *connection,
+ gboolean result,
+ const char *reason,
+ DMAPDb *db)
+{
+ g_print ("DB has %lu entries\n", dmap_db_count (db));
+ dmap_db_foreach (db, print_record, NULL);
+ g_main_loop_quit (loop);
+}
+ </screen>
+ </refsect1>
+</refentry>
diff --git a/docs/libdmapsharing-docs.sgml b/docs/libdmapsharing-docs.sgml
index 2b16098..9fd9c39 100644
--- a/docs/libdmapsharing-docs.sgml
+++ b/docs/libdmapsharing-docs.sgml
@@ -31,6 +31,12 @@
</chapter>
<chapter>
+ <title>Libdmapsharing Internals</title>
+ <xi:include href="server-internals.sgml"/>
+ <xi:include href="client-internals.sgml"/>
+ </chapter>
+
+ <chapter>
<title>Libdmapsharing Objects and Interfaces</title>
<xi:include href="xml/daap-record.xml"/>
<xi:include href="xml/daap-share.xml"/>
diff --git a/docs/server-internals.sgml b/docs/server-internals.sgml
new file mode 100644
index 0000000..9c0f2c6
--- /dev/null
+++ b/docs/server-internals.sgml
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+<refentry id="server-internals">
+ <refmeta>
+ <refentrytitle>Libdmapsharing Server Internals</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>Libdmapsharing</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>Libdmapsharing Server Internals</refname>
+ <refpurpose>
+ Detailed decription of libdmapsharing's code for programmers who wish to contribute to libdmapsharing
+ </refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>Libdmapsharing Server Internals</title>
+ <para>
+I will use DAAPShare to document the libdmapsharing internals. DAAPShare
+provides an example appropriate for any implmentation of the
+abstract class DMAPShare, including DPAPShare. DAAPShare calls
+_dmap_share_server_start() and _dmap_share_publish_start() when an
+object is created. The latter function starts a new web server by calling
+soup_server_new() and adds callbacks to the SoupServer object to handle
+the various paths required by the DMAP specification (/server-info,
+/content-codes, /login, etc). These callbacks are implemented in
+DAAPShare and provided to the SoupServer object after being wrapped
+in adapter functions (note that some callbacks are common to all
+DMAP protocols and are implemented in DMAPShare; e.g., the login
+callback). The latter function, _dmap_share_publish_start, starts the
+mDNS subsystem. It does this by using the mDNS implmentation option
+choosen at compile-time (e.g., Avahi, Howl or DNS-SD).
+
+ </para>
+ <para>
+The DMAPStructure class is used to build a representation of the data
+that makes up a DMAP request or response. The array cc_defs defines all
+possible valid entries in a DMAPStructure representation. Likewise,
+the numeric content code used by each node is defined by the enum
+DMAPContentCode. Both the cc_defs array and the DMAPContentCode enum
+must be in the same order. That is, if you add an entry to cc_defs,
+then you must add its corresponding content code to DMAPContentCode in
+the same order.
+
+ </para>
+ <para>
+Assuming DMAPStructure defines all the entries you require, the actual
+protocol-specific structures are built in DAAPShare. Note the use of the
+function dmap_structure_add(). Often, the data dmap_structure_add()
+adds is provided by a DAAPRecord object that exists in a DMAPDb
+object (both interfaces are implemented by the application). Eventually,
+the DAAPShare provides the DMAPStructure to the SoupServer object using
+the _dmap_share_message_set_from_dmap_structure() function.
+
+ </para>
+ </refsect1>
+</refentry>
diff --git a/docs/serviceaddedcb.sgml b/docs/serviceaddedcb.sgml
new file mode 100644
index 0000000..80e06bc
--- /dev/null
+++ b/docs/serviceaddedcb.sgml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
+]>
+<refentry id="serviceaddedcb">
+ <refmeta>
+ <refentrytitle>Service Added Callback</refentrytitle>
+ <manvolnum>3</manvolnum>
+ <refmiscinfo>Libdmapsharing</refmiscinfo>
+ </refmeta>
+
+ <refnamediv>
+ <refname>Service Added Callback</refname>
+ <refpurpose>
+ Defining a Service Added Callback
+ </refpurpose>
+ </refnamediv>
+
+ <refsect1>
+ <title>Service Added Callback</title>
+ <para>
+A "service-added" callback should create a media DB and a record
+factory. Both of these objects will be passed to dmap_connection_new. This
+object will interact with a DMAP share and populate the media DB. In
+order to instruct the object to begin interrogating the DMAP service,
+call the dmap_connection_connect function and pass it a "connected"
+callback. The following is a simple "service-added" callback that creates
+a DAAP connection:
+
+ </para>
+ <screen>
+static void
+service_added_cb (DMAPMdnsBrowser *browser,
+ DMAPMdnsBrowserService *service,
+ gpointer user_data)
+{
+ DMAPRecordFactory *factory;
+ DMAPConnection *conn;
+ DMAPDb *db;
+
+ db = DMAP_DB (my_dmap_db_new ());
+ if (db == NULL) {
+ g_error ("Error creating DB");
+ }
+
+ factory = DMAP_RECORD_FACTORY (my_daap_record_factory_new ());
+ if (factory == NULL) {
+ g_error ("Error creating record factory");
+ }
+ conn = DMAP_CONNECTION (dmap_connection_new (service->name,
+ service->host,
+ service->port,
+ FALSE,
+ db,
+ factory));
+ dmap_connection_connect (DMAP_CONNECTION (conn),
+ (DMAPConnectionCallback) connected_cb,
+ db);
+}
+ </screen>
+ </refsect1>
+</refentry>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]