Commit 6a45d3e9 authored by W. Michael Petullo's avatar W. Michael Petullo

Initial git commit. Moving project from SourceForge to GNOME.

parents
Andre Moreira Magalhaes <andrunko[@]gmail.com>
Jonathan Matthew <jonathan[@]d14n.org>
William Jon McCann <jmccann[@]redhat.com>
W. Michael Petullo <mike[@]flyn.org>
Charles Schmidt <cschmidt2[@]gmail.com>
A GObject-based DAAP library was first written as a plugin for
Rhythmbox by Charles Schmidt. This work was done as a part of the
2005 Google Summer of Code program. A few other developers, most
notably Jonathan Matthew and William Jon McCann, contributed to the
DAAP plugin after it was integrated into the Rhythmbox project.
Later, Andre Magalhaes expanded Charles' code into a general purpose
DMAP library, libdmapsharing. This library was used by a product
called Canola and is available on SourceForge. The Canola project
dropped support for DMAP before releasing its second version and
the development of the libdmapsharing library stopped. At this
point, libdmapsharing supported the client side of the DMAP protocol.
W. Michael Petullo pulled the libdmapsharing sources from SourceForge
in December of 2008. He began to add support for the server side of
the DMAP protocol, pulling the latest DAAP sharing code from Rhythmbox
and modifying it to support DPAP. Mike's changes were merged back into
the SourceForge in January of 2009 after he was made a member of the
libdmapsharing development team.
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>
Totally fine by me. Is there a website or vcs I can look at?
Charlie Schmidt
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
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?
>
sure, why not.
enjoy,
-jonathan
This diff is collapsed.
30 July 2009 W. Michael Petullo <mike@flyn.org>
* Modify configure.ac to require gstreamer-plugins-base >=
0.10.23.2 for GNOME Bugzilla #588205 & #587896.
* Remove newly obsolete code (daap-item.c, etc.)
* Auto-generate marshaling code for dmap-connection.c.
29 July 2009 W. Michael Petullo <mike@flyn.org>
* Port tests to new client API.
28 July 2009 W. Michael Petullo <mike@flyn.org>
* More rhythmbox-related work.
27 July 2009 W. Michael Petullo <mike@flyn.org>
* Rhythmbox-related work.
25 July 2009 W. Michael Petullo <mike@flyn.org>
* Pull DMAPConnection from more modern Rhythmbox in preparation
of implementing libdmapsharing-base Rhythmbox DAAP plugin.
22 July 2009 W. Michael Petullo <mike@flyn.org>
* D[AP]APRecord no longer had DMAPRecord as parent.
* Fixed various runtime warnings.
21 July 2009 W. Michael Petullo <mike@flyn.org>
* Fix handling of DAAP filesize.
* Work on seeking.
18 July 2009 W. Michael Petullo <mike@flyn.org>
* Fix various GLib Warnings.
13 July 2009 W. Michael Petullo <mike@flyn.org>
* Fix bug where the first stream/pipeline continues after
a fast forwarding to a second.
11 July 2009 W. Michael Petullo <mike@flyn.org>
* Change some g_warning's to g_debug.
10 July 2009 W. Michael Petullo <mike@flyn.org>
* Fix HTTP encoding decision in daap-share.c.
09 July 2009 W. Michael Petullo <mike@flyn.org>
* Fix use of giostream element (two upstream GStreamer bugs
fixed in the process).
06 July 2009 W. Michael Petullo <mike@flyn.org>
* Make all GStreamer / transcoding code optional.
05 July 2009 W. Michael Petullo <mike@flyn.org>
* Move transcoding to libdmapsharing.
02 July 2009 W. Michael Petullo <mike@flyn.org>
* Get rid of get methods in daap-record.c and replace with
GObject properties.
17 June 2009 W. Michael Petullo <mike@flyn.org>
* Slight API change to support delaying trancoding decisions
until after a file has been requested.
30 April 2009 W. Michael Petullo <mike@flyn.org>
* Fix compiler warning.
* Update RPM specification.
19 April 2009 W. Michael Petullo <mike@flyn.org>
* Fix memory leaks in dmap-db.c's filter code.
18 April 2009 W. Michael Petullo <mike@flyn.org>
* Start to implement dmap-mdns-browser-dnssd.c and
dmap-mdns-publisher-dnssd.c -- still needs work.
11 April 2009 W. Michael Petullo <mike@flyn.org>
* Add support for Apple's DNSSD to configure.ac.
10 April 2009 W. Michael Petullo <mike@flyn.org>
* Clean up some compiler warnings.
07 April 2009 W. Michael Petullo <mike@flyn.org>
* Completed DAAP browsing.
05 April 2009 W. Michael Petullo <mike@flyn.org>
* Filtering now works.
04 April 2009 W. Michael Petullo <mike@flyn.org>
* Work on DAAP browsing, start support for filter.
31 March 2009 W. Michael Petullo <mike@flyn.org>
* Began supporting DAAP browsing (e.g., list genres).
30 March 2009 W. Michael Petullo <mike@flyn.org>
* Set rating in daap-share.c.
29 March 2009 W. Michael Petullo <mike@flyn.org>
* Fix compiler warnings related to const return from
dmap_container_record_get_entries.
28 March 2009 W. Michael Petullo <mike@flyn.org>
* Fix support for Roku clients; they use query parameter, much
like iPhoto.
* Update pkg-config file to support includedir & libdir in terms
of prefix.
26 March 2009 W. Michael Petullo <mike@flyn.org>
* Work on seeking.
* Add new DAAPRecord method: itunes_compat.
24 March 2009 W. Michael Petullo <mike@flyn.org>
* Make dmap_container_record_get_entries return a const DMAPDb *.
* Remove commented out mmap code from daap-share.c.
07 March 2009 W. Michael Petullo <mike@flyn.org>
* Fix Cflags in libdmapsharing.pc.in.
06 March 2009 W. Michael Petullo <mike@flyn.org>
* Use @libdir@ in libdmapsharing.pc.in to support 64-bit
architectures.
* Do not include -<major verion> in SONAME.
* Set LDFLAGS properly when building libdmapsharing.
* Update RPM specification file.
02 March 2009 W. Michael Petullo <mike@flyn.org>
* Fix some issues that broke compiling on 64-bit platforms.
28 February 2009 W. Michael Petullo <mike@flyn.org>
* Support building with older versions of libsoup, just don't
build HTTP 1.0 / SOUP_ENCODING_EOF support.
27 February 2009 W. Michael Petullo <mike@flyn.org>
* Always use content length encoding for video data, as iTunes
seems to require this.
22 February 2009 W. Michael Petullo <mike@flyn.org>
* Require libsoup >= 2.25.92, as this version supports
SOUP_ENCODING_EOF message encoding, required for HTTP 1.0 clients.
* Decrease DMAP_SHARE_CHUNK_SIZE now that the Roku SoundBridge is
properly handled as a HTTP 1.0 client.
12 February 2009 W. Michael Petullo <mike@flyn.org>
* dmap_container_record_get_entries now returns a DMAPDb *
instead of a GSList *.
* Increase DMAP_SHARE_CHUNK_SIZE in order to keep Roku SoundBridge
client from popping.
* Send proper count to client when providing list of containers.
02 February 2009 W. Michael Petullo <mike@flyn.org>
* Bump version number to 1.9 in preparation for release.
31 January 2009 W. Michael Petullo <mike@flyn.org>
* Slight change to DAAPRecord and DPAPRecord interfaces. Add
read method that returns GInputStream * (instead of simply the
location/path). This sets the conditions for realtime transcoding
done by interface implementations.
25 January 2009 W. Michael Petullo <mike@flyn.org>
* Don't try to mmap large files for DAAP sharing; they may be
large videos that could cause the server to thrash.
19 January 2009 W. Michael Petullo <mike@flyn.org>
* Add a DMAP record factory interface.
18 January 2009 W. Michael Petullo <mike@flyn.org>
* Support sharing video (Quicktime for now).
* Merge DAAPDb and DPAPDb interfaces into DMAPDb.
10 January 2009 W. Michael Petullo <mike@flyn.org>
* Update libdmapsharing.spec.
09 January 2009 W. Michael Petullo <mike@flyn.org>
* Format some code better.
* Release mmap'ed files before mmap'ing another one.
* Implement sharing of playlists / albums.
08 January 2009 W. Michael Petullo <mike@flyn.org>
* Add to README.
* Format some code better.
* Update license headings.
07 January 2009 W. Michael Petullo <mike@flyn.org>
* Add library version to build system.
* Remove fork from dmap-test-server.c.
* Consolidate parsing of meta-data portion of query in dmap-share.c.
06 January 2009 W. Michael Petullo <mike@flyn.org>
* Add Fedora RPM spec file.
05 January 2009 W. Michael Petullo <mike@flyn.org>
* Fix test code to work with new thumbnail interface.
01 January 2009 W. Michael Petullo <mike@flyn.org>
* Reengineered database code.
30 December 2008 W. Michael Petullo <mike@flyn.org>
* DPAP sharing now works with iPhoto 6.
28 December 2008 W. Michael Petullo <mike@flyn.org>
* DAAP sharing now works with iTunes 8.
26 December 2008 W. Michael Petullo <mike@flyn.org>
* Split DAAP sharing functionality into two classes: DMAPShare
and DAAPShare. DAAPShare is a subclass of DMAPShare.
* Start work on DPAP server code.
21 December 2008 W. Michael Petullo <mike@flyn.org>
* Moved daap_mdns_publisher* to dmap_mdns_publisher*.
* Make type_of_service (e.g., _daap._tcp) configurable in
dmap_mdns_publisher*.
18 December 2008 W. Michael Petullo <mike@flyn.org>
* Begin implementing server code.
18 December 2008 W. Michael Petullo <mike@flyn.org>
* Update to compile against libsoup-2.24.
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
SUBDIRS = libdmapsharing tests
DIST_SUBDIRS = common libdmapsharing m4 media tests
### all of the standard pc files we need to generate
pcfiles = libdmapsharing-@LIBDMAPSHARING_MAJORMINOR@.pc
all-local: $(pcfiles)
### how to generate pc files
%-@LIBDMAPSHARING_MAJORMINOR@.pc: %.pc
cp $< $@
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = $(pcfiles)
EXTRA_DIST = \
autogen.sh \
libdmapsharing.pc.in
CLEANFILES = $(pcfiles)
The libdmapsharing package includes two test programs, test-client-dmap
and test-client-server. The source code for these programs provide good
examples of how to develop a DMAP client or server application.
There are three steps to writting a DMAP server:
First, define classes that implement the DAAPDb (or DPAP) and DAAPRecord
interfaces (for an example, see test-daap-db.c and test-daap-record.c). If
your application already has a media database interface, then these new
definitions will simply be adapter classes encapsulating your existing
interface.
Second, define classes that implement the DMAPContainerDb and
DMAPContainerRecord interfaces (see test-dmap-container-db.c and
test-dmap-container-record.c). These classes will allow the creation of
playlists (DAAP) or albums (DPAP).
Finally, write the code that creates a new DAAPShare object (see
test-dmap-server.c) and provide it your DAAPDb object.
The libdmapsharing package also provides an optional interface,
DMAPRecordFactory, that may be convenient for application developers.
cc1: warnings being treated as errors
daap-connection.c: In function 'daap_connection_build_message':
/usr/include/glib-2.0/glib/gthread.h:344: error: dereferencing pointer '_SOUP_METHOD_GET.21' does break strict-aliasing rules
daap-connection.c:96: note: initialized from here
Ensure client test catches newly shared files?
daap-connection.c
daap-connection.h
daap-connection.lo
daap-music.c
daap-music.h
daap-music.lo
daap-playlist.c
daap-playlist.h
daap-playlist.lo
daap-record.c
daap-record.h
daap-record.lo
daap-root-item.c
daap-root-item.h
daap-root-item.lo
daap-share.c
daap-share.h
daap-share.lo
dmap-config.h
dmap-config.h.in
dmap-connection.c
dmap-connection.h
dmap-connection.lo
dmap-container-db.c
dmap-container-db.h
dmap-container-db.lo
dmap-container-record.c
dmap-container-record.h
dmap-container-record.lo
dmap-db.c
dmap-db.h
dmap-db.lo
dmap-item.c
dmap-item.h
dmap-item.lo
dmap-marshal.c
dmap-marshal.h
dmap-marshal.list
dmap-marshal.lo
dmap-md5.c
dmap-md5.h
dmap-md5.lo
dmap-mdns-avahi.c
dmap-mdns-avahi.h
dmap-mdns-avahi.lo
dmap-mdns-browser-avahi.c
dmap-mdns-browser-avahi.lo
dmap-mdns-browser-dnssd.c
dmap-mdns-browser-howl.c
dmap-mdns-browser.h
dmap-mdns-publisher-avahi.c
dmap-mdns-publisher-avahi.lo
dmap-mdns-publisher-dnssd.c
dmap-mdns-publisher.h
dmap-record-factory.c
dmap-record-factory.h
dmap-record-factory.lo