Commit Graph

1482 Commits

Author SHA1 Message Date
Julien BLACHE b9a2e10272 Modify DAAP update request debug messages 2010-01-30 17:30:21 +01:00
Julien BLACHE 2924a98f1a Fix pairing_cb() - readd event after pairing 2010-01-30 17:30:21 +01:00
Julien BLACHE 2c6ceac486 Rework code flow in httpd_gen_cb() 2010-01-30 17:30:21 +01:00
Julien BLACHE 78275ae432 Remove useless include 2010-01-30 17:30:21 +01:00
Julien BLACHE 42f39938d5 Start implementing DAAP updates
Stall update requests if revision-number == current revision. This is a
first step that is necessary to get clients to work properly (eg Remote).
2010-01-28 19:20:00 +01:00
Julien BLACHE 7ddd135e2b Extend close detection to incoming connections
Stock evhttp has no means to detect when an incoming connection gets
closed by the client; it will notice the connection has gone down only
when sending back a reply.

For DAAP update requests working as a push mechanism with an HTTP request
stalled by the server until there actually is an update available, we need
to be notified when a connection goes down so we can perform proper cleanup
and not retain memory.

Do so by extending the close detection mechanism used for outgoing connections
and the connection failure callback we already have in place for streaming.
2010-01-28 19:19:31 +01:00
Julien BLACHE f425eddb62 Clean up remote list at deinit 2010-01-28 19:19:16 +01:00
Julien BLACHE 4321cffc87 Make queries on daap.songalbumid:0 a no-op
Remote makes queries with daap.songalbumid:0, which doesn't make sense. Make
that a no-op.
2010-01-27 18:31:13 +01:00
Julien BLACHE 21098d4c89 Fix query and path for playlist #1
The query was erroneously put into the path column; also change the query
for 1 = 1 instead of disabled = 0 which is redundant.
2010-01-27 18:29:59 +01:00
Julien BLACHE b5b9f92d97 Fix HTTP error return in daap_session_find() 2010-01-27 12:18:22 +01:00
Julien BLACHE eae5370c08 Log HTTP (non-DAAP, non-RSP) requests 2010-01-26 18:15:08 +01:00
Julien BLACHE 4701817333 Replace strlcpy() with evutil_snprintf() in evhttp
Get rid of strlcpy() and its implementation entirely, it doesn't buy anything
over snprintf(). Use evutil_snprintf() so as to match the rest of the code.
2010-01-26 17:54:45 +01:00
Julien BLACHE 98cb978b9b Set capability atoms to true in server-info reply
Capability atoms like mslr, msbr and friends should be set to true; it
seems their presence in the reply is actually enough, though.
2010-01-25 18:33:25 +01:00
Julien BLACHE 7e3b6957b2 Move the pairing agent to the main thread
The pairing agent doesn't need a thread of its own, the main thread can host
it. Move it there and save a thread.
2010-01-25 17:55:11 +01:00
Julien BLACHE 854abd8026 Specify field width for pairing hash
No field width was specified when the 128bit hash is converted to a string;
make sure we get 8 hex digits per 32bit hash component.
2010-01-25 17:51:17 +01:00
Julien BLACHE e6234c35ad Fix field width for 64bit library name hash
Was 8 hex digits, should have been 16 hex digits.
2010-01-25 17:47:37 +01:00
Julien BLACHE 672e4697ae Handle database schema upgrade from v4 to v5
Force a library rescan to fixup media_kind for regular videos.
2010-01-24 11:16:31 +01:00
Ace Jones 12e0c9268d Unspecified videos are "movies", media_kind=2
media_kind=2 (Movies) indicates a regular video, that is, a video that
isn't a TV Show (media_kind=64).

Also fix up the system playlist for Movies, and that brings us to DB
schema_version 5.
2010-01-24 11:11:08 +01:00
Julien BLACHE f85fa927c8 Dereference library directories before processing
The filescanner dereferences symlinks as it encounters them, but it did
not dereference the top-level library directories given in the config.

Also the playlist scanner always dereferences the filenames.

As a result, there was a mismatch between the paths in the files table and
the paths in the playlistitems table if the library directory given in the
config contain a symlink somewhere along the way.
2010-01-24 10:54:52 +01:00
Julien BLACHE 022bebe1d9 Send back mslr in server-info reply, indicating login is required
At least FrontRow honours this atom of the server-info reply.
2010-01-24 10:53:49 +01:00
Julien BLACHE 4aa207533e Ignore empty lines in M3U playlists 2010-01-23 18:41:54 +01:00
Julien BLACHE d3fe586d5b Remove a special case for playlist #1
Not needed anymore, now that playlist #1 has been turned into a smart
playlist.
2010-01-22 19:02:29 +01:00
Ace Jones 1af1cf51c7 Return special playlists in playlist list response 2010-01-21 17:56:44 +01:00
Julien BLACHE 67b3a8c2da Handle database schema upgrade from v3 to v4 2010-01-21 17:54:50 +01:00
Ace Jones 3fef4334bb Add support for smart playlists and some default ones
Add system playlists for Music, Movies, TV Shows, equivalent to iTunes.
2010-01-21 17:52:51 +01:00
Julien BLACHE fefdb23409 Simplify DB init routine 2010-01-21 17:51:44 +01:00
Julien BLACHE 944bf3f132 Check database version first, if that fails, try DB init
Doing it the other way around is a guaranteed way to run into issues when
a schema upgrade is needed.
2010-01-21 17:51:00 +01:00
Julien BLACHE 87abc3f432 Avoid useless double attempt at converting string to integer
Fixup dmap_add_field() and one of its callers to avoid making two useless
attempts at converting a string to an integer in some cases.
2010-01-20 18:34:36 +01:00
Julien BLACHE ba251b16ae Start keeping track of DAAP sessions
This will soon be required as we'll need to keep some knowledge about
the session in some cases. This also makes us a bit more compliant.
2010-01-20 18:24:52 +01:00
Julien BLACHE f126b04521 Tell libavl to free() ITML <-> DB mappings
The mappings should be free()d with the standard free() when we are
done with the tree. This fixes a memory leak.
2010-01-20 18:19:51 +01:00
Julien BLACHE 2cb67743fc Add service type to the "ALL FOR NOW" message 2010-01-20 18:17:04 +01:00
Julien BLACHE d47c205452 Feed .remote files to the Remote pairing agent 2010-01-17 10:52:58 +01:00
Julien BLACHE 3c7456f545 Add Remote pairing services start/stop 2010-01-17 10:52:58 +01:00
Julien BLACHE c191aff5cd Add remote_pairing.[ch] to sources 2010-01-17 10:52:58 +01:00
Julien BLACHE 625b8e3177 Add a pairing agent for Remote
Remote is the iPod/iPhone application that can act as a remote control for
iTunes. Remote must be paired with an iTunes instance before it can control
it; this pairing process includes a challenge/response autentication.

This pairing agent makes it possible to pair Remote with a forked-daapd
instance. It is the very first step for Remote support.
2010-01-17 10:52:58 +01:00
Julien BLACHE 04f4622086 Add generic mDNS browsing + resolving facility 2010-01-17 10:52:58 +01:00
Julien BLACHE 2b2ec87e7e Add the "remote" logdomain for Remote pairing 2010-01-17 10:52:58 +01:00
Julien BLACHE 73fa690fd4 Advertise the _touch-able._tcp service
_touch-able._tcp is the service used by Remote.app to discover and identify
libraries it interacts with.
2010-01-17 10:52:58 +01:00
Julien BLACHE d228e0dcb8 Rename servername variable to a more appropriate libname 2010-01-17 10:52:58 +01:00
Julien BLACHE b918d14e38 Fix group_entries list traversal 2010-01-17 10:52:58 +01:00
Julien BLACHE dd1712abdc Use glibc endianness-related headers if available
BSD headers aren't working properly on kFreeBSD, so use the glibc ones.
2010-01-17 10:52:58 +01:00
Julien BLACHE bf2c2b68c0 Revert "Remove default playlist & special case"
This reverts commit af95cee79b.

The default playlist is actually used by iTunes, so revert its removal. I
misremembered it being there for RSP.
2010-01-14 17:39:56 +01:00
Julien BLACHE af95cee79b Remove default playlist & special case
The default playlist (called "Library") doesn't actually have a purpose; I
though it was needed for RSP (SoundBridge) but it doesn't look like it makes
any difference with or without this playlist.
2010-01-13 19:56:15 +01:00
Ace Jones 1b34c9d555 Always set media_kind, for real
The problem is, you can't set INITIAL values for the file scanner, because
the filescanner doesn't fill in values on top of already existing values.
2010-01-13 19:45:04 +01:00
Julien BLACHE ed3dbc1f35 Fill in the watch_info struct only when it's needed 2010-01-12 18:50:04 +01:00
Julien BLACHE 364b22c030 Implement directory rescanning on top of kqueue/kevent for FreeBSD 2010-01-12 18:45:44 +01:00
Julien BLACHE 69bae139bb Make push_dir()/pop_dir() accept a stack as first argument 2010-01-12 18:45:31 +01:00
Julien BLACHE 79cdb4f9aa Make forked-daapd build on GNU/kFreeBSD 2010-01-10 17:49:01 +01:00
Ace Jones d96cdd7400 Add DAAP request handler for databases/###/groups (albums)
As of now we only support album groups, but there may be more than
album groups.
2010-01-10 14:43:23 +01:00
Ace Jones 5cfbe75bae Add database code for groups queries 2010-01-10 14:43:22 +01:00
Ace Jones e033d35195 Rework error handling in daap_reply_playlists()
Kill a bit of code duplication in the error handling.
2010-01-10 14:43:22 +01:00
Ace Jones ac82b176a0 Rework error handling in daap_reply_songlist_generic()
Kill a bit of code duplication in the error handling.
2010-01-10 14:43:22 +01:00
Ace Jones cac2c032f6 Add the daap.songalbumartist DMAP field 2010-01-10 12:11:00 +01:00
Ace Jones e948f69d0d Add safe_atoull() 2010-01-10 12:09:29 +01:00
Julien BLACHE 5b5e142c22 Replace inotify with kqueue on FreeBSD - stub
Start replacing inotify in the filescanner with kqueue. Only a stub at
this point, kqueue/kevent doesn't deliver nearly as much information
as inotify does. This will require some work, and someone willing to
do that work.
2010-01-09 13:48:52 +01:00
Julien BLACHE 9695c11186 Add an opaque pointer to watch_info
Used on FreeBSD to hold a pointer to the kevent struct.
2010-01-09 13:45:33 +01:00
Julien BLACHE 5681793534 Replace signalfd with kqueue for FreeBSD 2010-01-09 13:44:56 +01:00
Julien BLACHE 8d7c566d95 Use m_realpath(path) instead of realpath(path, NULL) 2010-01-09 13:44:10 +01:00
Julien BLACHE b9d8a5880a Introduce m_realpath() to replace realpath(path, NULL) 2010-01-09 13:43:29 +01:00
Julien BLACHE 3724f943b9 Use sys/endian.h on FreeBSD 2010-01-09 13:42:59 +01:00
Julien BLACHE 99df67b53c Include sys/param.h for PATH_MAX 2010-01-09 13:42:23 +01:00
Julien BLACHE 6c38cd2ef5 Add missing sys/types.h & sys/stat.h for stat & friends 2010-01-09 13:41:51 +01:00
Julien BLACHE 6033e29348 Use standard pipe() syscall on non-Linux platforms 2010-01-09 13:41:14 +01:00
Julien BLACHE 2f99797d9a Use sizeof(void *) instead of __WORDSIZE 2010-01-09 13:39:45 +01:00
Julien BLACHE 613717f6b8 Fix a format string mismatch (long vs uint64_t) 2010-01-09 13:38:41 +01:00
Julien BLACHE cdf0e2f9a5 Fix incorrect log domain 2010-01-09 11:14:23 +01:00
Julien BLACHE cefa51b5c6 Fix signal handler - readd event to event loop 2010-01-09 11:03:16 +01:00
Julien BLACHE 11f6b1e78f Kill duplicate fclose() 2010-01-09 11:00:41 +01:00
Julien BLACHE 5887cc2e27 Kill dead variables in signal_cb() 2010-01-08 12:29:13 +01:00
Ace Jones fc971974f0 Fill in media_kind=1 for music
Also move item_kind initialization further up.
2010-01-06 18:41:27 +01:00
Julien BLACHE 974a74a833 Update copyright notices for 2010 2010-01-05 19:34:00 +01:00
Julien BLACHE 60a06dfb0a Change album and album_artist column definitions to be NOT NULL
Unfortunately SQLite doesn't support adding constraints with ALTER TABLE,
so this constraint cannot be added upon upgrade.
2010-01-05 19:23:52 +01:00
Julien BLACHE 26d603aa61 Introduce generic database upgrade function 2010-01-05 19:18:30 +01:00
Julien BLACHE db0bff61c7 Remove -y option, as it doesn't actually exist 2010-01-05 18:32:00 +01:00
Julien BLACHE d273c72a4b Add database upgrade to populate album_artist for every file
Bump schema_version to 3, even though this isn't exactly a schema upgrade.
2010-01-05 18:25:23 +01:00
Ace Jones 67e3739bc2 Allow DMAP queries on daap.songalbumid 2010-01-05 18:25:23 +01:00
Ace Jones f2965f8ac6 Make daap_songalbumid available as a function inside SQLite 2010-01-05 18:25:18 +01:00
Ace Jones d3350713d1 Return daap.songalbumid as a hash of the album_artist + album
iPhone remote will later want to query by album. Instead of doing a
fulltext query, it uses a 64-bit hash of the album + album_artist. It
is not necessary to use the same hash algorithm that iTunes uses. The
important thing is that we can later respond to a query=('daap.songalbumid:xxx')
with this value.
2010-01-04 18:00:05 +01:00
Ace Jones 19a244095a Add daap_songalbumid() to generate the songalbumid hash
Make it an inline function as it's a short function and has only got
2 call sites.
2010-01-04 17:59:21 +01:00
Julien BLACHE 8ef57bbb41 Add the MurmurHash2, 64bit version
Hash algorithm by Austin Appleby, <http://murmurhash.googlepages.com>
2010-01-04 17:58:28 +01:00
Ace Jones e16d8a9747 Use the 'artist' field for 'album_artist' if there is no album artist set 2010-01-04 17:56:20 +01:00
Ace Jones 117ee15e44 Add handler for DMAP extra_data requests
iPhone Remote uses the following requests to get cover art for
songs and albums:

/databases/#/items/#/extra_data/artwork
/databases/#/groups/#/extra_data/artwork

For now, we will return the valid and correct response that we
have "No content".  In the future, the real artwork could be
extracted and returned here.
2010-01-03 18:55:32 +01:00
Julien BLACHE d20fdbda95 Cast pANTLR3_STRING to char * to avoid printf-format warnings 2009-12-31 22:21:56 +01:00
Julien BLACHE 046e3d6d90 Fixup DPRINTF() format strings 2009-12-31 22:21:19 +01:00
Julien BLACHE 5e338b033a Add missing trk_id argument to DPRINTF() calls 2009-12-31 22:20:48 +01:00
Julien BLACHE 61c6627713 Mark DPRINTF() as a printf-like function 2009-12-31 20:39:51 +01:00
Julien BLACHE 207e85c6c0 Regain root privileges to unlink PID file at exit 2009-12-31 20:19:13 +01:00
Julien BLACHE 1ac46983b9 Use setegid/seteuid to be able to regain root privileges 2009-12-31 20:19:13 +01:00
Julien BLACHE 662ba32d35 Fix ret/iret variables usage 2009-12-31 20:12:36 +01:00
Julien BLACHE 8feeecd895 Send a Content-Length header when plainly streaming a whole file
That is, don't send a Content-Length if we're decoding a whole file,
as we do not know the exact size in this case.

Based on a patch by Ace Jones.
2009-12-31 16:50:19 +01:00
Julien BLACHE a91b1ef46e Reindent dmap_query_fields, no code changes. 2009-12-31 16:50:19 +01:00
Ace Jones ddc4c667ea Enable DMAP queries on com.apple.itunes.mediakind
Used by Remote on the iPhone.
2009-12-31 16:41:10 +01:00
Ace Jones 995c212dc7 Support query filter in playlist list query
iTunes uses query filters in DAAP containers requests, so support that here.
2009-12-30 18:53:55 +01:00
Ace Jones 040e760789 Add support for Remote, the iPhone remote control for iTunes
Remote needs the same DAAP query quirk as iTunes and supports the
same codecs.
2009-12-30 18:49:52 +01:00
Ace Jones abbba5cf47 Fix typo in DAAP error message 2009-12-30 18:47:41 +01:00
Ace Jones 76fc069f22 Fix missing argument to debug call 2009-12-30 18:46:41 +01:00
Julien BLACHE ff03c2679d DMAP comparison against empty string needs to check against NULL too
'dmap.foo!:' -> (dmap.foo <> '' AND dmap.foo IS NOT NULL)
'dmap.foo:'  -> (dmap.foo = '' OR dmap.foo IS NULL)
2009-12-29 22:04:49 +01:00
Julien BLACHE 8025db2dc2 Allow negation operator for string comparisons in DMAP queries 2009-12-29 19:10:51 +01:00
Julien BLACHE f56884015f Allow empty values in DMAP queries for string fields 2009-12-29 19:10:22 +01:00
Julien BLACHE 371725b0da Fix segfault in db_file_update
Fix wrong type (%Q instead of %d) for tv_episode_sort and tv_season_num in
the SQL query for db_file_update().
2009-12-27 08:19:16 +01:00