Commit Graph

1656 Commits

Author SHA1 Message Date
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
Julien BLACHE
a52dcd264c Force a full rescan after DB migration 2009-12-27 08:17:25 +01:00
Julien BLACHE
7cb0eec5d5 Don't increase play count if not streaming at least half of the file
When streaming AAC/MP4 files that aren't stream-optimized (metadata at the
end of the file), clients will seek through the file to grab the metadata
prior to playing the file, causing the play count to increase by 2 or 3.

To counter that, do not increase play count if not streaming at least half
of the file.
2009-12-26 09:57:37 +01:00
Julien BLACHE
403153f64b Reindent the dmap_fields table, no code changes 2009-12-26 09:28:28 +01:00
Ace Jones
000e13b7ee Return TV metadata in DMAP response 2009-12-26 09:23:13 +01:00
Julien BLACHE
66716841ea Handle database schema upgrade from v1 to v2 2009-12-26 09:20:51 +01:00
Julien BLACHE
42a7715c69 Reindent data tables, no code changes 2009-12-26 08:44:55 +01:00
Ace Jones
a0ec19ada6 Add TV metadata to the database
With this, we're bumping SCHEMA_VERSION to 2.
2009-12-26 08:39:39 +01:00
Ace Jones
2ae6fcd864 Pick up TV-related metadata in MP4 video files
TV-related metadata as found in TV shows bought on the iTunes store, for
instance.

At the time of writing, ffmpeg doesn't support this yet. Until it does,
contact Ace Jones <ace.jones1@yahoo.com> for patches and instructions.
2009-12-26 08:31:12 +01:00
Ace Jones
a0b015f1e4 Accomodate TV meta-data in internal structures
Add new fields for TV-related metadata to struct media_file_info and
struct db_media_file_info.
2009-12-26 08:28:28 +01:00
Ace Jones
30e07abae3 Check chdir() return value to silence a warning 2009-12-24 21:28:41 +01:00
Ace Jones
d231faff2d Handle DAAP activity request
Reply to the DAAP /activity request with 204 / No content. Used by iTunes to
ping the server while streaming.
2009-12-20 14:43:28 +01:00
Julien BLACHE
72b1237500 Send a Content-Length header when streaming
Patch by Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 21:46:47 +01:00
Julien BLACHE
ff89ce0183 Add support for end offset in Range header
Honor end offset provided in the Range header and do not stream more than
what the client asked for.

Based on a patch by Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 21:42:48 +01:00
Julien BLACHE
b9e7df5be3 Return a proper Content-Type when streaming videos
Clients like Front Row expect video/<type> for video streaming, whereas iTunes
likes application/x-dmap-tagged when streaming audio.

Based on a patch by Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 21:04:30 +01:00
Julien BLACHE
df2cbea9b2 Add supported codec list for Front Row and QuickTime
Patch from Ace Jones <ace.jones1@yahoo.com>.
2009-12-08 20:45:57 +01:00
Julien BLACHE
38c502cb7e Properly close the raw file that was streamed when cleaning up after streaming
Report & fix by Ace Jones <ace.jones1@yahoo.com>
2009-12-08 19:54:48 +01:00
Julien BLACHE
ab760903b1 Use stream_end() to do the cleanup in stream_fail_cb()
Introduce a new 'failed' parameter to stream_end() as some actions shouldn't
be done when cleaning up after a connection failure.
2009-12-08 19:52:51 +01:00
Julien BLACHE
6114c31c61 Hook up iTunes library scanner 2009-11-28 10:55:43 +01:00
Julien BLACHE
3154416415 Integrate iTunes library scanner as an optional component 2009-11-28 10:55:43 +01:00
Julien BLACHE
d923e8d73b Add iTunes Music Library XML scanner 2009-11-28 10:55:43 +01:00
Julien BLACHE
3ff067da4e Add itunes_overrides parameter 2009-11-28 10:55:43 +01:00
Julien BLACHE
a6cbb2a8ec Introduce db_file_id_byfilebase and db_file_id_byfile
File id lookup by basepath + filename and filename only.
2009-11-28 10:55:43 +01:00
Julien BLACHE
66cd10dc52 Introduce db_file_id_byurl and share code with db_file_id_bypath 2009-11-28 10:55:42 +01:00
Julien BLACHE
ecb2991881 Add db_pl_fetch_bytitlepath 2009-11-28 10:55:42 +01:00
Julien BLACHE
04ce09e5be Rename db_pl_add_item -> db_pl_add_item_bypath
For consistency with db_pl_add_item_byid & similar database functions.
2009-11-28 10:55:42 +01:00
Julien BLACHE
a45f46f3eb Introduce db_pl_add_item_byid() 2009-11-28 10:55:42 +01:00
Julien BLACHE
1a397ca79b Check that db_pl_fetch_byquery only gets 1 query result 2009-11-28 10:55:42 +01:00
Julien BLACHE
6a1c01fa15 Allow playlists from different files to have the same title 2009-11-28 10:55:42 +01:00
Julien BLACHE
8f07db5c10 Add support for FLAC files with ID3v2 tags.
Patch from Wolfgang Holler <woelfs@googlemail.com>.
2009-11-18 20:14:03 +01:00
Julien BLACHE
946758cec7 Rework iTunes 9 absolute request uri fix 2009-11-14 11:23:03 +01:00
Julien BLACHE
f8f183f2f6 Fixup iTunes 9 Request-URI before processing
iTunes 9 sends requests with a Request-URI like
  daap://10.1.1.20:3689/server-info

The DAAP server expected the Request-URI to be just /server-info, and so
couldn't match the request to any handler.

In addition, evhttp would declare this request a proxy request which also
broke keep-alive handling resulting in the server closing the connection
after the reply. iTunes doesn't like that.
2009-11-13 21:53:47 +01:00
Julien BLACHE
6cc9abadbd Skip files that have no audio streams 2009-11-01 12:52:30 +01:00
Julien BLACHE
9b56d51f92 Avoid divide-by-zero for files with duration < AV_TIME_BASE 2009-11-01 12:51:50 +01:00
Julien BLACHE
c36b3c360d Fix DAAP request regexps - IDs can (thankfully) be more than 1-digit long 2009-11-01 12:39:11 +01:00
Julien BLACHE
9229f3dff9 Flush log as we go. 2009-10-04 12:08:46 +02:00
Julien BLACHE
aa52f1d30b Add license and copyright statement to -v/--version and usage message 2009-09-21 19:52:05 +02:00
Julien BLACHE
11909725e2 Use ffmpeg's memory allocator for transcode buffer
ffmpeg's allocator ensures the allocated memory is properly aligned for
any kind of optimized operation used in ffmpeg.
2009-07-24 08:19:31 +02:00
Julien BLACHE
2323fd302c Fix memory leak (transcode buffer) 2009-07-24 08:18:53 +02:00
Julien BLACHE
1bd3b3a076 Fix paths and rename the project 2009-06-12 13:00:34 +02:00
Julien BLACHE
e1c0b6d4b7 Move *_offsetof() macro definitions to db.h 2009-06-11 23:17:17 +02:00
Julien BLACHE
1f92052409 Rename the songs table 2009-06-11 23:03:53 +02:00
Julien BLACHE
3cadbdb1e3 Remove unused db_file_fetch_bypath() 2009-06-11 20:46:11 +02:00
Julien BLACHE
0ad20e5220 Rework process_media_file() and related DB support routines
Avoid pulling all the file info from the DB in process_media_file() as
anything besides the file id and timestamp is not used at all.
2009-06-11 20:44:22 +02:00
Julien BLACHE
0a8c171187 Store playlist items paths instead of resolving to file ids
This allows for more dynamic playlists now that files can move
around while we're running.
2009-06-11 20:27:31 +02:00
Julien BLACHE
3b7ff30c1b Remove useless force_update field in media file info 2009-06-11 19:15:22 +02:00
Julien BLACHE
c918c5c689 Always rescan directories to update playlists 2009-06-11 19:11:03 +02:00
Julien BLACHE
538d81b402 Always rescan and update playlists
This is needed to keep relative playlist items up to date in the
database when the playlist file moves around.
2009-06-11 19:04:21 +02:00
Julien BLACHE
c589d92b14 Use db_get_count() wherever applicable; simplify db_{pl,files}_get_count() prototypes 2009-06-11 18:41:50 +02:00
Julien BLACHE
2d1c35b855 Count playlist items on the fly 2009-06-11 18:28:01 +02:00
Julien BLACHE
30204cbb76 Remove unused toplevel watch attribute 2009-06-11 17:36:13 +02:00
Julien BLACHE
c81b33bd02 Bring db_watch_delete_bywd() prototype back in line with other db_watch_delete_by*() 2009-06-11 17:35:32 +02:00
Julien BLACHE
582f0e6746 Handle inotify events for directories 2009-06-11 17:35:25 +02:00
Julien BLACHE
07e22d8870 Add watch query/enumeration 2009-06-11 16:44:49 +02:00
Julien BLACHE
129ca8dfff Add watch deletion by path/match/cookie routines 2009-06-11 16:15:35 +02:00
Julien BLACHE
267ab7cb1a Rename db_query_get_count() to db_get_count()
Make that a generic helper, given it's used outside queries.
2009-06-11 15:45:49 +02:00
Julien BLACHE
cef1636415 Add watch-moving routines 2009-06-11 15:42:51 +02:00
Julien BLACHE
87aa24454d Add watch-marking routines 2009-06-11 15:24:10 +02:00
Julien BLACHE
56127b3ecc Add file and playlist disable-by-match routines 2009-06-11 15:09:10 +02:00
Julien BLACHE
34b0c22e46 Handle symlink-to-directory creation 2009-06-11 13:51:19 +02:00
Julien BLACHE
279fb95979 Watch for IN_CLOSE_WRITE in addition to IN_MODIFY and IN_CREATE
When receiving IN_CREATE or IN_MODIFY, there's no guarantee the file is
in its final state. Similarly, IN_MOVED_TO doesn't guarantee the file is
available when we receive it. And it actually isn't.

Watching for IN_CLOSE_WRITE fixes all that.
2009-06-11 13:45:02 +02:00
Julien BLACHE
467b177c17 Handle IN_DELETE, IN_MOVED_FROM and IN_MOVED_TO for files 2009-06-10 22:28:59 +02:00
Julien BLACHE
d63da9f08f Add file and playlist enable/disable routines 2009-06-10 22:28:54 +02:00
Julien BLACHE
9ff8913dd6 Add file and playlist deletion (by path) routines 2009-06-10 22:28:49 +02:00
Julien BLACHE
ac96ac6baf Move to the SQL database for storage of inotify watch info 2009-06-10 22:28:49 +02:00
Julien BLACHE
a9697eccdf Add storage of inotify watch info 2009-06-10 22:28:43 +02:00
Julien BLACHE
bfa2488343 Add support for disabled files and playlists 2009-06-10 19:11:12 +02:00
Julien BLACHE
177fb35d81 Add missing argument to DPRINTF() call 2009-06-10 19:11:12 +02:00
Julien BLACHE
94421b0b1b Handle IN_IGNORED events in inotify callback 2009-06-10 19:10:44 +02:00
Julien BLACHE
cbab1f80e0 ie->len is 0 for events reported on the watch subject
ie->len is non-0 only when the event is being reported for a file or
directory inside a watched directory.
2009-06-10 19:10:37 +02:00
Julien BLACHE
c8cc6bd603 Run event loop for each directory and each playlist when scanning in bulk mode 2009-06-10 19:04:18 +02:00
Julien BLACHE
4e38d168e1 Set and check database schema version 2009-06-10 19:04:18 +02:00
Julien BLACHE
ab1f9db6b3 Remove unused L_LOCK logdomain 2009-06-10 19:04:18 +02:00
Julien BLACHE
7314dd21c7 Purge old files and playlists after bulk scan 2009-06-10 19:04:18 +02:00
Julien BLACHE
4e3b29f502 Remove the old database code 2009-06-10 19:04:18 +02:00
Julien BLACHE
a200703393 Switch to the new database code 2009-06-10 19:04:18 +02:00
Julien BLACHE
f2c677462b Add new database code 2009-06-10 19:04:12 +02:00
Julien BLACHE
52d3fd1064 Clear evkeyvalq structs before use; fix crasher 2009-06-07 19:06:59 +02:00
Julien BLACHE
149d5432c6 Rework error handling and cleanup 2009-06-07 19:06:59 +02:00
Julien BLACHE
0ff33f12d6 Move mDNS services registration out of main() 2009-06-07 19:06:59 +02:00
Julien BLACHE
f3c0145346 Move runas down into daemonize() 2009-06-07 19:06:59 +02:00
Julien BLACHE
f39c48b989 Cleanup options and add long options 2009-06-07 19:06:59 +02:00
Julien BLACHE
6e64e54429 General main.c cleanup 2009-06-07 19:06:59 +02:00
Julien BLACHE
64cd2ee383 Factor out RSP query parameters handling 2009-06-07 19:06:59 +02:00
Julien BLACHE
c59217f58e Remove the unused L_PARSE logdomain 2009-06-07 19:06:58 +02:00
Julien BLACHE
2cc5f6928e Remove the unused smart parser 2009-06-07 19:06:58 +02:00
Julien BLACHE
8b5a25c972 Remove/disable last users of the smart parser 2009-06-07 19:06:58 +02:00
Julien BLACHE
91e34a77c8 Use the new ANTLR parser for RSP queries 2009-06-07 19:06:58 +02:00
Julien BLACHE
f9d9964914 Add new ANTLR parser for RSP queries
This parser actually supports way more than is needed for RSP proper,
as mt-daapd was piggybacking on the RSP queries for its smart playlists.

As I don't have (yet?) the RSP specs, better safe than sorry here. This
will be revisited at some point. Or not.
2009-06-07 19:06:51 +02:00
Julien BLACHE
272d8bca04 Fix error message 2009-06-07 19:06:51 +02:00
Julien BLACHE
68c74e6a88 Replace the mxml RSP root element hack by a better one
There's no proper way to add attributes to the root XML element in mxml;
the best way to do that is to create the root element like we would
create any other element and put the whole "? ... ?" stuff in there.
2009-06-07 19:06:51 +02:00
Julien BLACHE
4872077319 Make the file scanner non-recursive 2009-06-07 19:06:51 +02:00
Julien BLACHE
ffb5a2fb06 Make wd2path static 2009-06-07 19:06:51 +02:00
Julien BLACHE
977afbbc5e Add workaround for empty XML tags in RSP replies
The SoundBridge does not support empty XML tags (<foo/>) and treats anything
containing such tags as invalid. Adding an empty string to the element works
around that, in that mxml won't produce empty tags in this case.

Hackish, but dealing with a hackish implementation on the other side :)
2009-06-07 19:06:51 +02:00
Julien BLACHE
28350ae9a6 Look for a query or filter parameter in DAAP queries
The filter is passed in the query parameter if it's a search, but if it's
a browse it's in the filter parameter.
2009-06-07 19:06:51 +02:00
Julien BLACHE
7642b1c6d7 Use the new ANTLR parser for DAAP queries 2009-06-07 19:06:50 +02:00
Julien BLACHE
68db2ae7c2 Add new ANTLR parser for DAAP queries 2009-06-07 19:06:46 +02:00
Julien BLACHE
cefd3f3d1d Make dmap_fields_hash static 2009-06-01 18:01:24 +02:00
Julien BLACHE
512731c9dc Turn DPRINTF into a wrapper to a generic logging function
DPRINTF() made a generic logging function taking a va_list called
vlogger() and reimplemented as a wrapper on top of vlogger().
2009-06-01 16:01:47 +02:00
Julien BLACHE
c3a5222f84 Log libevent errors through our own logger 2009-05-09 17:14:07 +02:00
Julien BLACHE
11f18eaf6f Remove unneeded log.c from evhttp copy 2009-05-09 17:14:07 +02:00
Julien BLACHE
be0ac2b103 Add missing cleanup calls 2009-05-09 17:14:07 +02:00
Julien BLACHE
7b3b538ea6 Rename L_REND to L_MDNS 2009-05-09 17:14:07 +02:00
Julien BLACHE
d384f3c395 Rename E_INF to E_INFO 2009-05-09 17:14:07 +02:00
Julien BLACHE
b6f23a8273 Remove old error logging facility 2009-05-09 17:14:07 +02:00
Julien BLACHE
11fd038d16 Use new logger facility 2009-05-09 17:14:06 +02:00
Julien BLACHE
3a2a218a0f Introduce new logger 2009-05-09 17:14:01 +02:00
Julien BLACHE
2127aff906 Use a single log domain on DPRINTF() calls 2009-05-05 20:28:40 +02:00
Julien BLACHE
803ca7e59f Rename foreground to background and change logic accordingly 2009-05-05 17:54:20 +02:00
Julien BLACHE
10bb9dec57 Remove useless daapd.h 2009-05-05 16:22:11 +02:00
Julien BLACHE
d2999aafec Add missing stdint.h include to ff-dbstruct.h 2009-05-05 16:21:39 +02:00
Julien BLACHE
c85f9ed7dd Move main event base extern declaration to mdns_avahi.c where it's used 2009-05-05 16:10:49 +02:00
Julien BLACHE
524bdd3f0d Remove old config framwork include and wrappers 2009-05-05 16:10:44 +02:00
Julien BLACHE
9fce6d7abd Use new config framework in main.c 2009-05-05 15:53:36 +02:00
Julien BLACHE
c1a2bf6fcf Remove conf_*() usage in DB module 2009-05-05 15:45:48 +02:00
Julien BLACHE
ed0ff0c136 Unlink PID file on exit 2009-05-04 17:51:42 +02:00
Julien BLACHE
be4286b2e8 Remove -export-dynamic libtool flag now that we don't have plugins anymore 2009-05-04 17:48:31 +02:00
Julien BLACHE
8e14495bc2 Remove unused struct tag_stats (STATS) 2009-05-03 13:33:16 +02:00
Julien BLACHE
d1449a875b Get rid of the global struct tag_config (CONFIG) config 2009-05-03 13:32:00 +02:00
Julien BLACHE
2530c3512b Rename webface_cb() to httpd_gen_cb() 2009-05-03 12:26:01 +02:00
Julien BLACHE
cd6f87401a Rename struct stream_chunk to struct stream_ctx 2009-05-03 12:19:04 +02:00
Julien BLACHE
ed7c848702 Remove I/O layer 2009-05-03 12:10:17 +02:00
Julien BLACHE
07fb43ca8c Remove I/O layer init/deinit 2009-05-03 12:09:25 +02:00
Julien BLACHE
f0ca987d78 Replace io_* routines by standard I/O functions 2009-05-03 12:08:14 +02:00
Julien BLACHE
e8843a99aa Remove util.[ch] 2009-05-03 11:38:32 +02:00
Julien BLACHE
1e0ffb6808 Remove use of util_* routines, last user 2009-05-03 11:37:30 +02:00
Julien BLACHE
9ef8acfa28 Remove old webserver 2009-05-03 11:20:12 +02:00
Julien BLACHE
6aca074f82 Remove plugin infrastructure 2009-05-03 11:20:07 +02:00
Julien BLACHE
baf529dbf2 Remove plugins directory 2009-05-03 11:20:02 +02:00
Julien BLACHE
2be04db4d2 Remove RSP output plugin 2009-05-03 11:16:58 +02:00
Julien BLACHE
ef1c2b2b89 Remove DAAP output plugin 2009-05-03 11:16:58 +02:00
Julien BLACHE
89eead66f6 Remove ssc-ffmpeg plugin 2009-05-03 11:16:58 +02:00
Julien BLACHE
417b5e0ce3 Remove ssc-script plugin 2009-05-03 11:16:58 +02:00
Julien BLACHE
81cb0efa81 Stop loading plugins, we don't need plugins anymore 2009-05-03 11:16:58 +02:00
Julien BLACHE
2fb7537346 Register RSP and DAAP services in main() 2009-05-03 11:16:58 +02:00
Julien BLACHE
c76c8165ce Enable httpd on the configured port 2009-05-03 11:16:58 +02:00
Julien BLACHE
d46bb295c5 Disable old webserver 2009-05-03 11:16:58 +02:00
Julien BLACHE
a1afb0d390 Use evhttp_send_reply_chunk_with_cb() to stream files
This evhttp extension makes it possible to schedule chunks one after
the other when (part of) the previous chunk has been written to the
client.
2009-05-03 11:16:58 +02:00
Julien BLACHE
7a37732658 Add a variant of evhttp_send_reply_chunk() with a callback on evhttp_write_buffer()
evhttp_write_buffer() used by evhttp_send_reply_chunk() can take callback
executed when (part of) the buffer has been written. Using this callback to
schedule the next chunk avoids buffering large amounts of data in memory.
2009-05-03 11:16:58 +02:00
Julien BLACHE
1d152decf7 Use evhttp_request->fail_cb to stop streaming if the client closes the connection
This is an extension to evhttp. Without this, we cannot know that the client
closes the connection, and we keep pushing chunks while the underlying
evhttp_request has been freed, leading to a segfault.
2009-05-03 11:16:57 +02:00
Julien BLACHE
1ffcbdae27 Add a fail_cb to evhttp_request for connection failures
The callback will be executed if a failure (timeout, read error) is detected
on an incoming connection.

This can be used to detect a client closing the connection while engaged in a
chunked reply and actively pushing chunks to the client. Without this
notification, it is impossible to know if/when a connection gets closed and
react appropriately (ie. stop pushing chunks) resulting in a segfault.
2009-05-03 11:16:57 +02:00
Julien BLACHE
e4fe084619 Use embedded evhttp 2009-05-03 11:16:57 +02:00
Julien BLACHE
6bce4e08ca Import evhttp from libevent 1.4.10 2009-05-03 11:16:57 +02:00
Julien BLACHE
c9868175fd Implement URI encoding quirk for iTunes and Roku
iTunes and Roku devices do not encode + as %2B in the query string and
do not encode space as + either in the query string (though at least the
Roku encode space as %20 everywhere). This needs to be worked around or
browse queries fail to parse because + was decoded as space when the query
really needs a + character.
2009-05-03 11:16:57 +02:00
Julien BLACHE
09ef188d90 Add authentication to web interface, RSP and DAAP 2009-05-03 11:16:57 +02:00
Julien BLACHE
dc68de86dd Add HTTP Basic auth support 2009-05-03 11:16:57 +02:00
Julien BLACHE
cd636cf42d Add base64 decoding routine 2009-05-03 11:16:57 +02:00
Julien BLACHE
7a601d7daa Enable streaming of transcoded content 2009-05-03 11:16:57 +02:00
Julien BLACHE
2c2498b6b4 Add transcoding infrastructure 2009-05-03 11:16:57 +02:00
Julien BLACHE
22092f555b Add L_XCODE log domain
Log domain for anything transcoding-related.
2009-05-03 11:16:57 +02:00
Julien BLACHE
e5cc417e96 Add DJB hash function to misc.[ch] and use it 2009-05-03 11:16:51 +02:00
Julien BLACHE
0a1c4545dc Move safe_ato[il]() to misc.[ch] 2009-04-30 14:46:37 +02:00
Julien BLACHE
91414c10d7 Use a hashtable for dmap fields lookup
The hashtable is built around an AVL tree and the DJB hash function;
the AVL tree is built at init time and the init routine checks for
collisions.
2009-04-30 13:57:40 +02:00
Julien BLACHE
c071a58c3c Wire up DAAP support 2009-04-30 13:57:40 +02:00
Julien BLACHE
00876facde Introduce DAAP protocol implementation
Same restrictions as RSP at the moment:
 - no transcoding
 - no authentication
2009-04-30 13:57:34 +02:00
Julien BLACHE
f332f992aa Document HTTP client quirks known to mt-daapd 2009-04-28 18:00:27 +02:00
Julien BLACHE
651d946cc2 Implement RSP streaming. 2009-04-28 18:00:27 +02:00
Julien BLACHE
f05a55e7fc Implement HTTP chunked streaming
Transcoding is not supported yet.

In the current state of affairs, we will crash if the client closes the
connection before the tranfser is done. This is a limitation of evhttp,
it is not possible to detect this condition. This will need to be fixed
in evhttp.
2009-04-28 18:00:21 +02:00
Julien BLACHE
5e8275a998 Wire up RSP support 2009-04-25 23:02:21 +02:00
Julien BLACHE
718631bab5 Introduce RSP protocol implementation
Lacks a couple of things:
 - actual streaming
 - transcoding
 - authentication
2009-04-25 23:02:15 +02:00
Julien BLACHE
21209bd040 Make sp_parse() second argument (term) const
The term (filter) argument is strdup()'d and that copy gets destroyed by
the parsing.
2009-04-25 16:27:59 +02:00
Julien BLACHE
6ed689d1c9 Move FILTER_TYPE_* definitions to smart-parser.h, where they belong 2009-04-25 16:27:59 +02:00
Julien BLACHE
29db6de1bb Fixup prototype for db_enum_fetch_row()
Second argument is actually a pointer to a pointer to a struct
db_media_file_info, and not a simple pointer.

That code sucks. Plain and simple. Will be taken out and shot at the
earliest occasion. Someone badly needs to take "Pointers 101", among
a lot of other 101 courses. Sigh.
2009-04-25 16:27:58 +02:00
Julien BLACHE
bdcb5b88dc Rename struct tag_packed_m3ufile and struct tag_packed_mp3file 2009-04-25 16:27:58 +02:00
Julien BLACHE
5fc698c94f Add L_RSP log domain 2009-04-25 16:27:58 +02:00
Julien BLACHE
9d1cd9117f Enable new HTTP server alongside the old webserver 2009-04-25 16:27:58 +02:00
Julien BLACHE
095350e6eb Introduce new evhttp-based HTTP server 2009-04-25 16:27:47 +02:00
Julien BLACHE
c9494a898e Add L_HTTPD for new evhttp-based HTTPd implementation 2009-04-24 15:45:44 +02:00
Julien BLACHE
7afc55307d Change prototype and return values for new file scanners 2009-04-24 15:45:44 +02:00
Julien BLACHE
92362068c6 Remove old file scanner (mp3-scanner) 2009-04-24 15:45:43 +02:00
Julien BLACHE
3a38e62f8a Remove/replace mp3-scanner.h include 2009-04-24 15:45:43 +02:00
Julien BLACHE
1a0e1731e4 Remove iTunes XML playlist parsing code 2009-04-24 15:45:43 +02:00
Julien BLACHE
69d6acad37 Remove support for iTunes XML playlist
No plans for OS X nor Windows in the near future, and those are most
probably useless on other platforms.
2009-04-24 15:45:43 +02:00
Julien BLACHE
831016bb05 Use new m3u scanner 2009-04-24 15:45:43 +02:00
Julien BLACHE
1a0f1317e2 Add rewritten scan_static_playlist() as scan_m3u_playlist()
Get rid of the I/O layer, better code.
2009-04-24 15:45:43 +02:00
Julien BLACHE
4a9d89c007 Rename struct tag_m3ufile into struct playlist_info 2009-04-24 15:45:43 +02:00
Julien BLACHE
bc5a3db08a Rename scan-url.c to filescanner_urlfile.c 2009-04-24 15:45:43 +02:00
Julien BLACHE
0a61b5a51d Rewrite .pls/.url file parser
Get rid of the I/O layer, ameliorate bitrate parsing, restructure code.
2009-04-24 15:45:33 +02:00
Julien BLACHE
1eaa3979e6 Add missing db_deinit() calls 2009-04-20 16:41:06 +02:00
Julien BLACHE
c4f8c7c254 Use new file scanner 2009-04-20 16:41:06 +02:00
Julien BLACHE
c0e3c1bc5f Introduce new file scanner
The new file scanner has inotify support and runs in its own thread, including
for performing the initial rescan.
2009-04-20 16:41:01 +02:00
Julien BLACHE
57c698fce9 Export scan_static_playlist() 2009-04-19 19:39:15 +02:00
Julien BLACHE
bbab963fe2 Use new conffile code in main.c; remove wrappers 2009-04-19 19:39:15 +02:00
Julien BLACHE
bacdddb82f Use -v for version information 2009-04-19 19:39:11 +02:00
Julien BLACHE
5e48a8bb6a Remove -k/kill_server option 2009-04-19 19:38:41 +02:00
Julien BLACHE
362db5003b Remove config file conversion code 2009-04-19 19:37:48 +02:00
Julien BLACHE
8e4b2db99e Export cfg structure 2009-04-19 19:37:47 +02:00
Julien BLACHE
e3ab6de328 Replace old config code, remove old code
Activate the new confuse-based config code, add compatibility functions
for the old config code.
2009-04-19 19:37:47 +02:00
Julien BLACHE
a17e23010a Introduce new confuse-based conffile support 2009-04-19 19:37:47 +02:00
Julien BLACHE
9f2e088d57 Add more .gitignore stuff 2009-04-19 19:37:47 +02:00
Julien BLACHE
e8c9a04376 Remove OS abstraction layer
Migrate daemon startup code in main.c, migrate functions with a single
callsite to that file. Remove setpgrp() usage in favor of setsid(), remove
configure check for setpgrp().
2009-04-19 19:37:42 +02:00
Julien BLACHE
9d026442b2 Remove alternate plugin load paths 2009-04-19 19:37:41 +02:00
Julien BLACHE
3ec2cc0f00 Stop the TXT record encoding madness
Use a proper string array to pass the TXT record fields, get rid of the
encoding stuff.

Changes the plugin API.
2009-04-19 19:37:41 +02:00
Julien BLACHE
2e2dbc6964 Free mDNS group entries in mdns_deinit() 2009-04-19 19:37:41 +02:00
Julien BLACHE
b3b66449bc Build the string list for the mDNS TXT record once in mdns_register
Instead of rebuilding the string list at every regitration, build it once
and for all in mdns_register().
2009-04-19 19:37:41 +02:00
Julien BLACHE
8718f856df Remove unused, unfinished, useless UPnP code 2009-04-19 19:37:41 +02:00
Julien BLACHE
6db32640ef Remove no-op os_deinit() 2009-04-19 19:37:41 +02:00
Julien BLACHE
54c01d3b57 Move signal processing to the main loop using signalfd 2009-04-19 19:37:41 +02:00
Julien BLACHE
0292b9c625 Fix memory leak 2009-04-19 19:37:41 +02:00
Julien BLACHE
39e5b11bec Remove old Avahi mDNS backend 2009-04-19 19:37:41 +02:00
Julien BLACHE
97faadf6dd Enable new mDNS backend 2009-04-19 19:37:35 +02:00
Julien BLACHE
97cb82faf7 Add new Avahi mDNS backend with libevent integration. 2009-04-08 14:57:34 +02:00
Julien BLACHE
8a351e5bf8 Manage explicit event bases 2009-04-08 14:57:29 +02:00
Julien BLACHE
02f960b25b Fix Avahi races
Switch from custom thread + SimplePoll to ThreadedPoll, ensuring proper
locking of the polling thread.
2009-04-07 14:03:13 +02:00
Julien BLACHE
df0013a166 Introduce libevent for running the main loop
Start the gradual libevent conversion.
2009-04-07 12:53:04 +02:00
Julien BLACHE
3b4e0d8f74 Add missing ; 2009-04-07 11:40:14 +02:00
Julien BLACHE
b3cffd491d Add and use io_urlencode() to replace %U format spec for io_open()
Stopgap to replace the %U modifier until something happens with the whole
io_* stuff.
2009-04-05 22:42:03 +02:00
Julien BLACHE
687be1cbb6 Remove compat.[ch] 2009-04-05 19:15:44 +02:00
Julien BLACHE
7098dfbab3 Fix various trivial compiler warnings 2009-04-05 19:03:29 +02:00
Julien BLACHE
ea36855793 Fix format specifiers for 64bit integers
Use "%" PRIu64 from inttypes.h instead of "%lld" which is incorrect on 64bit
platforms.
2009-04-05 18:54:59 +02:00
Julien BLACHE
f4721a6cec Add explicit -export-dynamic
mt-daapd needs an explicit -export-dynamic so its symbols are made visible
to the plugins at load time.
2009-04-05 18:54:59 +02:00
Julien BLACHE
081a13bbea Fix ffmpeg API breakage
avcodec_audio_decode() has been removed in favor of avcodec_decode_audio2();
output buffer size must be passed to the function.
2009-04-05 18:54:59 +02:00
Julien BLACHE
888bf11d2f Replace %U format by %s
%s format specifier means the string must be URL encoded. Replace it by a
simple %s for the time being until plans about the I/O layer become clearer.
2009-04-05 18:54:59 +02:00
Julien BLACHE
e318858d44 Fill in type & codectype for .url/.pls 2009-04-05 18:54:59 +02:00
Julien BLACHE
c2ffed5e2b Remove unused iconv-dependent code.
The code was mainly used by the MP3 scanner.
2009-04-05 18:54:59 +02:00
Julien BLACHE
d8a9772afc Remove/replace non-gcc compiler-specific defines and pragmas
Remove MSVC-specific defines and pragmas, use __attribute__((packed)) where
needed.
2009-04-05 18:54:58 +02:00
Julien BLACHE
3dd76cf9e9 Remove unneeded prototypes 2009-04-05 18:54:58 +02:00
Julien BLACHE
625ffd2112 Work around ffmpeg bugs in metadata support for some formats
Fall back to the legacy format-specific scanners for WMA, FLAC and Musepack,
as ffmpeg doesn't report metadata for FLAC nor Musepack and has bugs with
some WMA variants.
2009-04-05 18:54:58 +02:00
Julien BLACHE
3a53a068af Initialize ffmpeg in main()
ffmpeg needs to be initialized before scanning songs at startup. As a
consequence, the ffmpeg plugin does not need to call av_register_all()
itself anymore.
2009-04-05 18:54:58 +02:00
Julien BLACHE
c9107ed48c Remove unneeded id3tag.h include 2009-04-05 18:54:58 +02:00
Julien BLACHE
f14ba228ec Remove Ogg Vorbis file scanner 2009-04-05 18:54:58 +02:00
Julien BLACHE
056f788c99 Remove MP3 file scanner 2009-04-05 18:54:58 +02:00
Julien BLACHE
9f45181bb3 Remove AAC file scanner 2009-04-05 18:54:58 +02:00
Julien BLACHE
84a132d166 Remove WAV file scanner 2009-04-05 18:54:58 +02:00
Julien BLACHE
23802f1866 Remove AIFF file scanner 2009-04-05 18:54:58 +02:00
Julien BLACHE
a3e83775b3 Enable ffmpeg file scanner
Replace all file scanners with the new ffmpeg file scanner. Keep pls and
url exceptions.
2009-04-05 18:54:49 +02:00
Julien BLACHE
8dce7ee0f3 Add comments pertaining to the type, codectype and description fields
Better document the type, codectype and description fields, noting they
equivalent DAAP fields and usage/restrictions.
2009-04-05 10:24:10 +02:00