chiark / gitweb /
disorder
4 weeks agocgi/cgimain.c: Make the CGI program be (a little) locale-aware. master
Mark Wooding [Mon, 23 Jul 2018 01:26:53 +0000 (02:26 +0100)]
cgi/cgimain.c: Make the CGI program be (a little) locale-aware.

Otherwise it can't properly parse configuration files which contain
non-ASCII characters, e.g., for transforming pieces of track names.

4 weeks agoclients/disorder.c: Force line buffering when writing log.
Mark Wooding [Sat, 21 Jul 2018 14:26:21 +0000 (15:26 +0100)]
clients/disorder.c: Force line buffering when writing log.

Otherwise it looks fine on a terminal, but that's not very useful.  If a
program tries to read the log over a pipe, then it sees nothing for a
good long while until the buffer gets flushed.

This change is specific to the `log' command.  Output for other commands
comes out at the same time anyway.

4 weeks agodisobedience/control.c: Follow user toolbar style in full-size window.
Mark Wooding [Fri, 20 Jul 2018 11:02:06 +0000 (12:02 +0100)]
disobedience/control.c: Follow user toolbar style in full-size window.

Compact mode forces the icons-only style still, because smaller.

4 weeks agolib/uaudio-pulseaudio.c: Add volume control support.
Mark Wooding [Fri, 20 Jul 2018 02:17:54 +0000 (03:17 +0100)]
lib/uaudio-pulseaudio.c: Add volume control support.

Now that we have everything in place, implement PulseAudio volume
control.

4 weeks agolib/uaudio-pulseaudio.c: Rewrite using the asynchronous API.
Mark Wooding [Fri, 20 Jul 2018 02:15:16 +0000 (03:15 +0100)]
lib/uaudio-pulseaudio.c: Rewrite using the asynchronous API.

It's really hard to do volume control using the `simple' synchronous
API, because that involves `introspection' requests to the server, which
aren't part of the API, and it involves knowing the stream index, which
the API won't give us.

The rewrite isn't especially painful.

4 weeks agodisobedience, playrtp: Have `playrtp' handle volume control.
Mark Wooding [Fri, 20 Jul 2018 02:06:56 +0000 (03:06 +0100)]
disobedience, playrtp: Have `playrtp' handle volume control.

If the server is playing the audio directly, then it handles the volume
control too, as before.

If the server's transmitting using RTP, DisObedience /used/ to try to
twiddle the volume itself.  Instead, arrange for it to request volume
adjustment of the running `disorder-playrtp' instance via its socket
interface.

This has two advantages.

  * Firstly, `disorder-playrtp' actually knows which audio API it's
    using and therefore which method for fiddling with the volume will
    work best.  Indeed, DisObedience doesn't even have any configuration
    for selecting audio APIs, so it's only ever right by coincidence.
    On the other hand, `disorder-playrtp' has all of the necessary
    machinery.

  * Secondly, PulseAudio in particular has independent volume controls
    per input.  DisObedience has no hope of guessing which of these is
    the right one for `disorder-playrtp' without help, and it's cleaner
    just to give the whole job to `disorder-playrtp'.

4 weeks agolib/: Use Salsa20/8 for random bits, rather than RC4.
Mark Wooding [Tue, 17 Jul 2018 12:00:26 +0000 (13:00 +0100)]
lib/: Use Salsa20/8 for random bits, rather than RC4.

It's faster and produces better quality random bits; RC4's biases are
somewhat notorious.

4 weeks agoconfigure.ac: Add `chromium' and `google-chrome' to browser possibilities.
Mark Wooding [Fri, 20 Jul 2018 10:49:01 +0000 (11:49 +0100)]
configure.ac: Add `chromium' and `google-chrome' to browser possibilities.

Prefer Chromium over the fully Googly version because free software and
less spyware.

4 weeks agoconfigure.ac, debian/rules: Use `sensible-browser' by default.
Mark Wooding [Fri, 20 Jul 2018 10:44:20 +0000 (11:44 +0100)]
configure.ac, debian/rules: Use `sensible-browser' by default.

Use this rather than `x-www-browser' because the former can be
influenced by individual users by setting `BROWSER', while the latter
uses a symlink set by the system administrator and ignores individual
user preferences.

4 weeks agoCHANGES.html: Fix miscapitalization of `Disobedience'.
Mark Wooding [Fri, 20 Jul 2018 11:06:41 +0000 (12:06 +0100)]
CHANGES.html: Fix miscapitalization of `Disobedience'.

Where did I get the idea that it was supposed to be like this?

4 weeks agoCHANGES.html: Mention GStreamer-based tracklength plugin.
Mark Wooding [Fri, 20 Jul 2018 10:50:11 +0000 (11:50 +0100)]
CHANGES.html: Mention GStreamer-based tracklength plugin.

5 weeks agoplugins/tracklength-gstreamer.c: Remove unused header inclusion.
Mark Wooding [Fri, 13 Jul 2018 11:11:11 +0000 (12:11 +0100)]
plugins/tracklength-gstreamer.c: Remove unused header inclusion.

5 weeks agoplugins/tracklength-gstreamer.c: Use `GST_SECOND' instead of `1000...'.
Mark Wooding [Fri, 13 Jul 2018 10:55:02 +0000 (11:55 +0100)]
plugins/tracklength-gstreamer.c: Use `GST_SECOND' instead of `1000...'.

Honestly I'm rather surprised that I typed the right number of zeroes.

5 weeks agodebian/control: Demote `disorder-server' requirement on `httpd-cgi'.
Mark Wooding [Thu, 12 Jul 2018 00:47:51 +0000 (01:47 +0100)]
debian/control: Demote `disorder-server' requirement on `httpd-cgi'.

Now `Recommends', since it works OK without a webserver, though it does
limit your options for controlling it to the provided dedicated
clients (and many others which someone else develops).

5 weeks agoplugins/Makefile.am: Build standalone tracklength program.
Mark Wooding [Wed, 11 Jul 2018 11:56:36 +0000 (12:56 +0100)]
plugins/Makefile.am: Build standalone tracklength program.

This is mostly how I've been testing it; it seems harmless to include it
here.

5 weeks agoplugins/tracklength-gstreamer.c: Rewrite to use `GstDiscoverer'.
Mark Wooding [Wed, 11 Jul 2018 11:54:27 +0000 (12:54 +0100)]
plugins/tracklength-gstreamer.c: Rewrite to use `GstDiscoverer'.

The old version worked, but was fiddly, and very slow at some MP3
files.  It seems that if you start playing for a few milliseconds and
then ask, then you get a good answer, but since I found this out by
tripping over the `GstDiscoverer' machinery that GStreamer already has,
it seemed like a better idea to just use that.  Which means almost all
of the code has gone.

5 weeks agodebian/: Rename `disorder-server' templates so Debhelper can find them.
Mark Wooding [Wed, 11 Jul 2018 01:20:33 +0000 (02:20 +0100)]
debian/: Rename `disorder-server' templates so Debhelper can find them.

Oops.  I bungled 026a384f68227a00b2d33ca196d7c498ba643d4a.

5 weeks agoplugins/tracklength-gstreamer.c: Add GStreamer-based tracklength plugin.
Mark Wooding [Tue, 10 Jul 2018 10:40:09 +0000 (11:40 +0100)]
plugins/tracklength-gstreamer.c: Add GStreamer-based tracklength plugin.

Now we can have the proper lengths for all supported files.

5 weeks agoconfigure.ac, debian/: Set up correct dependencies for GStreamer.
Mark Wooding [Tue, 10 Jul 2018 10:38:33 +0000 (11:38 +0100)]
configure.ac, debian/: Set up correct dependencies for GStreamer.

This involves an unpleasant back-channel from the configure script to
the Debian packaging machinery to explain which GStreamer version it
chose, so that we can set the proper package names.

5 weeks agodebian/control: Rename `disorder-gstdecode' to `disorder-gstreamer'.
Mark Wooding [Tue, 10 Jul 2018 10:37:03 +0000 (11:37 +0100)]
debian/control: Rename `disorder-gstdecode' to `disorder-gstreamer'.

This package will include other GStreamer-based goodies.

5 weeks agodebian/control: Remove server dependency on `sox'.
Mark Wooding [Tue, 10 Jul 2018 10:30:43 +0000 (11:30 +0100)]
debian/control: Remove server dependency on `sox'.

It's not needed because the Debian build always uses `libsamplerate'.

5 weeks agodebian/control: Order `Build-Depends' alternatives by preference.
Mark Wooding [Tue, 10 Jul 2018 10:29:30 +0000 (11:29 +0100)]
debian/control: Order `Build-Depends' alternatives by preference.

I think this is mostly for the benefit of maintainers using it as a
cribsheet of packages to install.

5 weeks agoserver/gstdecode.c: Remove pointless casts to `GstElement'.
Mark Wooding [Tue, 10 Jul 2018 10:28:25 +0000 (11:28 +0100)]
server/gstdecode.c: Remove pointless casts to `GstElement'.

The `pipeline' already is one.

5 weeks agoserver/gstdecode.c: Label dest element correctly on link failure.
Mark Wooding [Tue, 10 Jul 2018 10:27:33 +0000 (11:27 +0100)]
server/gstdecode.c: Label dest element correctly on link failure.

5 weeks agoserver/gstdecode.c: Report more useful messages for missing plugins.
Mark Wooding [Tue, 10 Jul 2018 10:26:56 +0000 (11:26 +0100)]
server/gstdecode.c: Report more useful messages for missing plugins.

5 weeks agoserver/gstdecode.c: Dissect the message more portably.
Mark Wooding [Tue, 10 Jul 2018 10:25:29 +0000 (11:25 +0100)]
server/gstdecode.c: Dissect the message more portably.

We can use `gst_message_get_structure' in both versions, so do that
rather than ifdeffery.  Use the `GST_MESSAGE_TYPE' macro to get the
type, for future compatibility.

5 weeks agoserver/gstdecode.c: Unref reference-counted things properly.
Mark Wooding [Tue, 10 Jul 2018 10:22:35 +0000 (11:22 +0100)]
server/gstdecode.c: Unref reference-counted things properly.

Use the correct functions, which really are available in both versions,
so we can eliminate some ifdeffery.

Also restructure `decoder_pad_arrived' to not leak the new pad's caps.

5 weeks agoserver/gstdecode.c: With GStreamer 0.10, borrow the existing caps.
Mark Wooding [Tue, 10 Jul 2018 10:21:05 +0000 (11:21 +0100)]
server/gstdecode.c: With GStreamer 0.10, borrow the existing caps.

Otherwise we'd leak them.

8 months agodebian/: Rewrite using Debhelper.
Mark Wooding [Fri, 1 Dec 2017 12:04:10 +0000 (12:04 +0000)]
debian/: Rewrite using Debhelper.

The old `debian/rules' was a nightmare.  Modern Debhelper is really
quite pleasant, and makes short work of jobs which the old do-it-all-by-
hand script made a horrible meal out of.  Really, the diffstat summary

29 files changed, 146 insertions(+), 440 deletions(-)

says everything I need to know.

Being fair, though, this is quite an overhaul, but I've tried hard to
minimize the fallout.  These are the user-visible changes that I'm aware
of.  Any other changes are unintentional bugs.

  * The `disorder-server' cron script has changed name from
    `/etc/cron.daily/disorder' to `.../disorder-server'.  I could have
    avoided this, but I decided that it was actually better like this.
    The package scripts include the necessary machinery for renaming the
    configuration file.

  * I'm using `dh_installdocs' now, and it has its own heuristics about
    whether to compress documentation files.  As a result, a number of
    the smaller files in `/usr/share/doc/disorder' are no longer
    compressed.  Maybe some users will have to adjust bookmarks or
    something; if this breaks scripts, then I'm afraid that dealing with
    the wreckage is what you signed up for when you wrote those scripts.

Internally, the differences are more significant.

  * A number of affordances for configuring the Debian build have been
    removed or changed; I'm not going to make a list, mostly because the
    `debian/rules' file is now so trivial.  I'm inclined to say that
    retaining these would have been a bad idea.  I view the Debian
    packaging as a route to a stable, standard binary package, best
    built in a fresh, clean, minimal environment provided by something
    like `sbuild'.  I don't object to nonstandard packages at all: I
    just think they're best made and maintained by actually patching the
    code.

  * I've added `#DEBHELPER#' markers to the package scripts, and deleted
    some of the smaller ones entirely.  Debhelper doesn't make a whole
    lot of difference to the `disorder-server' postinst script, which is
    the big one, but losing the `disobedience' scripts is a clear win.

  * Debhelper wants to run `make check' during the package build.  I
    think this is a good idea, but it involves a little extra work.
    Because `sbuild' by default forces `LC_ALL' to `POSIX', the
    `queue.py' test fails about half the time; overriding `LC_ALL' to
    `C.UTF-8' in `debian/rules' hacks around this.  The `t-addr' library
    test wants to check resolution of service names, which introduces a
    build-dependency on `netbase' to provide `/etc/services'.  I would
    have had to include a dependency on `wget', but I chose to include
    the necessary test files inline instead.

8 months agolibtests: Include the Unicode test files directly.
Mark Wooding [Sat, 2 Dec 2017 21:44:38 +0000 (21:44 +0000)]
libtests: Include the Unicode test files directly.

Rather than fetch the files using `wget' at test time, fire up `gzip' to
decompress them from local copies.  The files compress really rather
well, so this is an overall saving in disk space relative to the
previous version -- especially since we now share the test files among
all build trees rather than having a separate copy in each.  On the
other hand, they're moderately large things to have in the source
distribution, though small compared to the `images/' tree.

Of course, the main reason for doing this is to completely eliminate the
need for external network connectivity during a build.

The copyright notice, at https://www.unicode.org/copyright.html, appears
to be compatible with the GPL (which is good, because I think we'd have
had a problem using these files even if we didn't distribute them).
I've included the copyright notice as COPYING.unicode-tests, in order to
comply with requirement (a).

Should it be necessary to update the copies of the test files, there's a
(slightly hairy) make target `update-unicode-tests' which can be invoked
by hand to do this.

8 months agoREADME: Update my copyright claim.
Mark Wooding [Wed, 29 Nov 2017 23:15:47 +0000 (23:15 +0000)]
README: Update my copyright claim.

8 months agodebian/rules: Omit disorder-gstdecode(8) from `disorder-server' package.
Mark Wooding [Wed, 29 Nov 2017 20:05:51 +0000 (20:05 +0000)]
debian/rules: Omit disorder-gstdecode(8) from `disorder-server' package.

Otherwise it turns up in two packages, and there is sadness.

8 months agoREADME: Update dependency versions.
Mark Wooding [Wed, 29 Nov 2017 11:45:45 +0000 (11:45 +0000)]
README: Update dependency versions.

8 months agodebian/control: Include `libdb5.3' as a suitable version.
Mark Wooding [Wed, 29 Nov 2017 11:41:28 +0000 (11:41 +0000)]
debian/control: Include `libdb5.3' as a suitable version.

8 months agoconfigure.ac, acinclude.m4, lib/regexp.[ch]: Support `libpcre2'.
Mark Wooding [Wed, 29 Nov 2017 11:37:56 +0000 (11:37 +0000)]
configure.ac, acinclude.m4, lib/regexp.[ch]: Support `libpcre2'.

This is the future of `pcre', so we'll have to support it sooner or
later.  Indeed, I think this probably counts as `later'.

8 months agoConcentrate knowledge about the `pcre' API in one place.
Mark Wooding [Wed, 29 Nov 2017 11:28:18 +0000 (11:28 +0000)]
Concentrate knowledge about the `pcre' API in one place.

Introduce a new `regexp' API in the library which knows about `pcre' and
actually invokes `pcre_...' functions.  Remove this knowledge from
everywhere else.

The new API is, of course, suspiciously similar to `pcre' in many ways,
but there are some differences.

  * Sizes, lengths, and offsets, are all `size_t' now.  In particular,
    this means that the `ovector' type has changed.

  * Errors are reported differently: rather than returning a pointer to
    a static string, `regexp_compile' writes the error string into a
    caller-provided buffer.

Observant readers might notice that these changes make the interface
more similar to the `pcre2' API.  They'd be right, and this is not a
coincidence.  But for now, there's no functional change.

8 months agoRemove ifdeffery for `HAVE_PCRE_H'.
Mark Wooding [Wed, 29 Nov 2017 11:22:48 +0000 (11:22 +0000)]
Remove ifdeffery for `HAVE_PCRE_H'.

This isn't actually an optional extra: the build simply won't work
without it, so the ifdeffery is just unnecessary complication.  Remove
it all.

Also, remove `#include <pcre.h>' from files which don't actually need
it.

8 months agoconfigure.ac, server/gstdecode.c: Support GStreamer 1.0.
Mark Wooding [Sun, 26 Nov 2017 20:28:20 +0000 (20:28 +0000)]
configure.ac, server/gstdecode.c: Support GStreamer 1.0.

I currently don't have plans to drop support for GStreamer 0.10, though
the differences are quite significant.

8 months agoconfigure.ac, server/Makefile.am: Refactor GStreamer autoconfery.
Mark Wooding [Sun, 26 Nov 2017 20:25:59 +0000 (20:25 +0000)]
configure.ac, server/Makefile.am: Refactor GStreamer autoconfery.

  * Introduce `--with-gstreamer=VERSIONS' configure option, which
    searches for the (space-separated) VERSIONS in order.

  * Pick up the `gstapp' and `gstaudio' libraries from `pkg-config'
    rather than probing randomly at `gstreamer-plugins-base-0.10' and
    hoping for the best.

  * Define a preprocessor symbol explaining which version we found.

8 months agoserver/gstdecode.c: Limit the buildup of internal buffers.
Mark Wooding [Sun, 26 Nov 2017 20:30:00 +0000 (20:30 +0000)]
server/gstdecode.c: Limit the buildup of internal buffers.

Block upstream decoding if we start to build up too many buffers
(presumably because downstream is waiting for real time to pass while it
plays audio at us).

The magic number 16 is plucked from nowhere in particular.  I have no
idea how to choose a number properly.

8 months agoserver/gstdecode.c: Add `-s' option to omit DisOrder's usual framing.
Mark Wooding [Sun, 26 Nov 2017 19:30:41 +0000 (19:30 +0000)]
server/gstdecode.c: Add `-s' option to omit DisOrder's usual framing.

The result can be piped into something like

play -b16 -c2 -esigned-integer -r44100 -L -traw -

to verify that its output approximates decoded audio.

8 months agodoc/disorder-gstdecode.8.in: Typeset option dashes correctly.
Mark Wooding [Sun, 26 Nov 2017 19:28:50 +0000 (19:28 +0000)]
doc/disorder-gstdecode.8.in: Typeset option dashes correctly.

8 months agotests/dtest.py: Refer to the home directory via a symlink.
Mark Wooding [Mon, 27 Nov 2017 10:18:11 +0000 (10:18 +0000)]
tests/dtest.py: Refer to the home directory via a symlink.

Pathnames during `make distcheck' are remarkably long, even if the
original project path is very short.  Indeed, the previous change which
added the test name into the `testroot' path is enough to push the
server's socket name over the magic 108-byte limit.

As an additional hack, arrange to refer to the home directory via a
symbolic link in `/tmp' (or wherever $TMPDIR points), which should be
much shorter.  The symlink is deleted on test completion, because
otherwise we'll fill up `/tmp' with cruft, but I hope this doesn't cause
too much in the way of diagnostic trouble.

8 months agotests/dtest.py: Maintain a separate test root for each test.
Mark Wooding [Mon, 27 Nov 2017 02:03:52 +0000 (02:03 +0000)]
tests/dtest.py: Maintain a separate test root for each test.

Now they can run in parallel without breaking each other, which is nice.
It's nice for two reasons: firstly, Automake changed behaviour and runs
tests in parallel by default nowadays; and secondly, the tests are
rather slow because they involve a bunch of waiting around for things,
and waiting for stuff in parallel is easy.

The downside is that we end up gobbling a lot of disk space with all of
the logfiles.  I think this is a good trade.

8 months agoserver/Makefile.am: Link `disorder_gstdecode' with `-lpcre'.
Mark Wooding [Fri, 17 Nov 2017 22:16:46 +0000 (22:16 +0000)]
server/Makefile.am: Link `disorder_gstdecode' with `-lpcre'.

Linkers which don't transitively follow shared-library dependencies
complain.  This is fair enough, because there's a real direct dependency
here.

8 months agodisobedience/misc.c: Muffle warning about `gdk_pixbuf_new_from_inline'.
Mark Wooding [Fri, 17 Nov 2017 22:15:38 +0000 (22:15 +0000)]
disobedience/misc.c: Muffle warning about `gdk_pixbuf_new_from_inline'.

Maybe we should use GResource at some point, but (a) it involves some
awful XML disaster, and (b) it's looking like way more effort than I
want to spend right now.

8 months agolib/configuration.c: Remove `type_stringlist', which nothing was using.
Mark Wooding [Fri, 17 Nov 2017 22:15:13 +0000 (22:15 +0000)]
lib/configuration.c: Remove `type_stringlist', which nothing was using.

8 months agoconfigure.ac: Link `-lgc' when searching for `GC_mumble' functions.
Mark Wooding [Fri, 17 Nov 2017 22:14:02 +0000 (22:14 +0000)]
configure.ac: Link `-lgc' when searching for `GC_mumble' functions.

Otherwise we can't find them and fall back to using deprecated things.
This is a shame.

8 months agoREADME, debian/control: Deprecate `sox' support.
Mark Wooding [Wed, 22 Nov 2017 23:03:34 +0000 (23:03 +0000)]
README, debian/control: Deprecate `sox' support.

sox introduced yet more command-line options in 14.2, whinges about the
old ones in 14.4, and threatens to remove them in 14.5 (because
obviously compatibility between minor versions is an old-fashioned idea
whose day is long past).

Rather than chase this obnoxiously moving target,

  (a) report that sox support is deprecated and will be removed in some
      future major version of DisOrder; and

  (b) have the Debian package Build-Depend on `libsamplerate0-dev' so
      that at least Debian users don't have to put up with sox's moaning
      in the logs.

Reported-by: Ross Younger
8 months agoREADME: Mention optional support for GStreamer.
Mark Wooding [Wed, 22 Nov 2017 23:03:11 +0000 (23:03 +0000)]
README: Mention optional support for GStreamer.

8 months agodebian/etc.disorder.config: Remove bogus `trust root' line.
Mark Wooding [Wed, 22 Nov 2017 22:29:12 +0000 (22:29 +0000)]
debian/etc.disorder.config: Remove bogus `trust root' line.

The `trust' option was removed in 657fdb79cbec..., but the default
Debian configuration wasn't changed to match.  Fix this.

Reported-by: Ross Younger
15 months agoEmail address
Richard Kettlewell [Thu, 18 May 2017 17:47:28 +0000 (18:47 +0100)]
Email address

2 years agoUpdate .gitignore
Richard Kettlewell [Sun, 24 Jan 2016 10:22:32 +0000 (10:22 +0000)]
Update .gitignore

2 years agoReplace code.google references with github references
Richard Kettlewell [Sun, 24 Jan 2016 10:20:42 +0000 (10:20 +0000)]
Replace code.google references with github references

2 years agoFix `distcheck' complaints.
Mark Wooding [Fri, 22 Jan 2016 10:58:36 +0000 (10:58 +0000)]
Fix `distcheck' complaints.

  * Have `disobedience/Makefile.am' remove the images and desktop file
    it installs.

  * Remove `lib/versionstring.c' as well as its header file during
    clean.

  * Move source files (but not headers) from `lib/' to new `common/'
    directory if they're needed by other directories, and refer to them
    via the `VPATH' feature rather than using explicit pathnames.  (It
    doesn't work to have the whole of `lib/' on the VPATH because there
    are files in some of the other directories with the same names,
    which breaks in-tree builds.)

2 years agodisobedience/disobedience.c: Show track title (or excuse) in title.
Mark Wooding [Thu, 21 Jan 2016 19:06:18 +0000 (19:06 +0000)]
disobedience/disobedience.c: Show track title (or excuse) in title.

This doesn't do a great deal of good when the window is mapped.  But, in
some window managers at least, the title can be seen in a tooltip or
similar when the window is iconified or otherwise not visible.

2 years agoMerge branch 'mdw/gstdecode'
Mark Wooding [Tue, 15 Dec 2015 19:15:23 +0000 (19:15 +0000)]
Merge branch 'mdw/gstdecode'

* mdw/gstdecode:
  Add documentation and administrivia about `disorder-gstdecode'.
  server/gstdecode.c: Produce the configured sample format directly.
  server/gstdecode.c: Allow user to tweak the various parameters.
  server/gstdecode.c: New program, like `disorder-decode'.

Conflicts:
.gitignore
CHANGES.html
README
debian/control

2 years agoCHANGES.html, README: Update the administrivia.
Mark Wooding [Tue, 15 Dec 2015 19:15:23 +0000 (19:15 +0000)]
CHANGES.html, README: Update the administrivia.

2 years agodebian/control: Add Build-Depends for PulseAudio.
Mark Wooding [Tue, 15 Dec 2015 19:15:23 +0000 (19:15 +0000)]
debian/control: Add Build-Depends for PulseAudio.

It really won't build without; and it probably shouldn't.

2 years agoAdd documentation and administrivia about `disorder-gstdecode'.
Mark Wooding [Tue, 15 Dec 2015 19:15:23 +0000 (19:15 +0000)]
Add documentation and administrivia about `disorder-gstdecode'.

2 years agolib/cgi.c (cgi__input): Write terminating null within allocated buffer.
Mark Wooding [Tue, 15 Dec 2015 19:15:23 +0000 (19:15 +0000)]
lib/cgi.c (cgi__input): Write terminating null within allocated buffer.

This one's been there forever.  It sometimes results in `malloc'
reporting a (rather impressive) assertion failure

disorder: malloc.c:3096: sYSMALLOc: Assertion `(old_top ==
(((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) -
__builtin_offsetof (struct malloc_chunk, fd)))) &&
old_size == 0) || ((unsigned long) (old_size) >=
(unsigned long)((((__builtin_offsetof (struct malloc_chunk,
fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 *
(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) &&
((unsigned long)old_end & pagemask) == 0)' failed.

often after producing the beginning of the output page, so the end user
gets a blank window.  Not really what we want.

This fix closes issue #57.

2 years agodisobedience/choose-search.c: Fix segfault when search terms change.
Mark Wooding [Sat, 9 Jan 2016 01:37:36 +0000 (01:37 +0000)]
disobedience/choose-search.c: Fix segfault when search terms change.

The observed problem:  Sometimes, when typing search terms into the box,
DisObedience crashes.  This seems to happen more often when the server
is slow to respond.

Here's what's going on.  Suppose that a search finds some results.  Then
`choose_make_visible' tries to expand the tree to display them.  If some
of the results aren't populated in the tree yet, then
`choose_make_one_visible' arranges to fetch the necessary information
from the server and informs its caller, `choose_make_visible', that
it'll have to try again later.  When this happens, `choose_make_visible'
hooks itself onto the `choose-more-tracks' event and waits for the
information to arrive.

Suppose that, while this is happening, the user edits the search terms;
a new search starts, but this one returns no results.  Then
`choose_search_completed' zaps the `choose_search_results' vector and
returns.

Now the metadata from the old search arrives from the server;
`choose_make_visible' is called back.  There are now no search results,
so it thinks its work is done and tries to scroll the list widget so
that the first result is visible -- but the result vector has been
clobbered.  Result: misery.

To fix this, cancel the `choose-more-tracks' event handler when a new
search finishes.  Now we can't get into this situation any more.

2 years agocgi/actions.c, lib/client*.[ch]: Don't use priv connection to check passwd.
Mark Wooding [Thu, 31 Dec 2015 21:02:28 +0000 (21:02 +0000)]
cgi/actions.c, lib/client*.[ch]: Don't use priv connection to check passwd.

If the CGI runs as the main `jukebox' user, then it can connect using
the special `.../private/socket', and the `find_server' function
arranges to do this if it can and no network address has been assigned
in the configuration.

The server doesn't bother to check passwords from clients on privileged
connections.  The result is that if the CGI program runs as the
`jukebox' user, its attempt to check the end-user's password through the
usual login machinery is stymied, since the library automatically sets
up a privileged connection and then the server ignores the password
entirely.  The end result is that, if you set things up in this way,
anyone can log into the CGI program with any known user and any password
at all, at which point they're given a cookie which can be used in
direct communication with the server.

Fix this as follows.

  * Introduce a new version (in the correct namespace for a change) of
    `find_server' which accepts some flags to guide the choice of server
    addresses.

  * Add a flag for the new `disorder_find_server' function to prevent
    trying the privileged socket.

  * Add a function to the client interface (and a bit of state to the
    client structure) to instruct the connection functions not to use a
    privileged connection even if they can.

  * Get the CGI program to use this new function when logging in with a
    password, so that it will always be checked.

Cookies are checked properly, even from privileged clients, so there's
nothing to fix there.

2 years agoscripts/sedfiles.make, doc/disorder.cgi.8.in: Say where the file is.
Mark Wooding [Thu, 31 Dec 2015 20:52:00 +0000 (20:52 +0000)]
scripts/sedfiles.make, doc/disorder.cgi.8.in: Say where the file is.

The manpage used to say that the Makefile doesn't install the CGI
program anywhere, which hasn't been true for a while.  Remove the old
lies and just say where it was put.

2 years agoconfigure.ac, lib/mem.c: Compatibility with older versions of libgc.
Mark Wooding [Thu, 31 Dec 2015 20:49:02 +0000 (20:49 +0000)]
configure.ac, lib/mem.c: Compatibility with older versions of libgc.

The `GC_get_all_interior_pointers()' function and its friends were
introduced after the libgc in Debian wheezy (which is quite impressive
seeing as they were added in 2009).  Make sure it's there; use the old
now-deprecated variable directly if it isn't.

2 years agoRespond to libgc deprecation warning
Richard Kettlewell [Sat, 24 Oct 2015 09:10:13 +0000 (10:10 +0100)]
Respond to libgc deprecation warning

2 years agoAdd nonnull attribute to a few function args.
Richard Kettlewell [Sun, 13 Sep 2015 11:06:31 +0000 (12:06 +0100)]
Add nonnull attribute to a few function args.

2 years agoTinker with loop bounding to placate GCC 5.2.1
Richard Kettlewell [Sun, 13 Sep 2015 11:06:02 +0000 (12:06 +0100)]
Tinker with loop bounding to placate GCC 5.2.1

3 years agogzip -n in aid of reproducible builds
Richard Kettlewell [Sat, 14 Feb 2015 10:24:45 +0000 (10:24 +0000)]
gzip -n in aid of reproducible builds

4 years agoWarning tidy-up for FreeBSD.
Richard Kettlewell [Sun, 1 Jun 2014 13:04:08 +0000 (14:04 +0100)]
Warning tidy-up for FreeBSD.

- if dlfunc is available use that. Allows -Werror to be re-enabled.
- use modern struct member initializers
- cope with FD_SETSIZE being explicitly unsigned
- remove stray brackets
- remove unused objects
- use %ju to print sig_atomic_t, it might be bigger than int

4 years agoAssign default http/cgi directories
Richard Kettlewell [Fri, 30 May 2014 19:20:23 +0000 (20:20 +0100)]
Assign default http/cgi directories

4 years agoFreeBSD doesn't have IFF_DYNAMIC
Richard Kettlewell [Fri, 30 May 2014 17:41:35 +0000 (18:41 +0100)]
FreeBSD doesn't have IFF_DYNAMIC

4 years agoFreeBSD fixes
Richard Kettlewell [Fri, 30 May 2014 17:39:43 +0000 (18:39 +0100)]
FreeBSD fixes

Update list of libdb versions.
Bodge in -liconv.

4 years agoPlacate gcc -flto
Richard Kettlewell [Sun, 25 May 2014 13:40:10 +0000 (14:40 +0100)]
Placate gcc -flto

I don't think either of these are real bugs, but it keeps the compiler
happy.

4 years agoinit: source lsb init functions
Richard Kettlewell [Mon, 27 Jan 2014 19:54:47 +0000 (19:54 +0000)]
init: source lsb init functions

Placates lintian a bit.

4 years agoSuppress bogus doc-base registration warnings from lintian.
Richard Kettlewell [Sun, 26 Jan 2014 14:26:41 +0000 (14:26 +0000)]
Suppress bogus doc-base registration warnings from lintian.

4 years agoRemove redundant entry from .desktop file
Richard Kettlewell [Sat, 25 Jan 2014 23:25:12 +0000 (23:25 +0000)]
Remove redundant entry from .desktop file

4 years agoEnable hardening flags harder.
Richard Kettlewell [Sat, 18 Jan 2014 19:47:21 +0000 (19:47 +0000)]
Enable hardening flags harder.

Now with a workaround for broken GCC diagnostic.

4 years agodebian: use debian compiler flags
Richard Kettlewell [Tue, 14 Jan 2014 18:51:36 +0000 (18:51 +0000)]
debian: use debian compiler flags

4 years agodebian: don't depend on essential packages
Richard Kettlewell [Tue, 14 Jan 2014 18:51:28 +0000 (18:51 +0000)]
debian: don't depend on essential packages

4 years agodisorder.h: more consistent approach to function attributes
Richard Kettlewell [Sun, 22 Dec 2013 11:17:42 +0000 (11:17 +0000)]
disorder.h: more consistent approach to function attributes

4 years agogitignore
Richard Kettlewell [Sat, 23 Nov 2013 11:21:51 +0000 (11:21 +0000)]
gitignore

4 years agotests: python unbuffered revisited
Richard Kettlewell [Sat, 23 Nov 2013 11:21:45 +0000 (11:21 +0000)]
tests: python unbuffered revisited

4 years agoSet AUTOMAKE_OPTIONS=subdir-objects where necessary.
Richard Kettlewell [Sat, 23 Nov 2013 11:11:38 +0000 (11:11 +0000)]
Set AUTOMAKE_OPTIONS=subdir-objects where necessary.

4 years agoWindows support for command line client
Richard Kettlewell [Sun, 17 Nov 2013 11:38:02 +0000 (11:38 +0000)]
Windows support for command line client

Non-ASCII characters not properly supported.

4 years agoProvide for a network initialization step
Richard Kettlewell [Sun, 17 Nov 2013 11:34:52 +0000 (11:34 +0000)]
Provide for a network initialization step

4 years agotable search: cope without typeof
Richard Kettlewell [Sun, 17 Nov 2013 11:34:18 +0000 (11:34 +0000)]
table search: cope without typeof

4 years agoRemove some redundant includes.
Richard Kettlewell [Sun, 17 Nov 2013 11:33:42 +0000 (11:33 +0000)]
Remove some redundant includes.

4 years agoAdd uint16_t if missing.
Richard Kettlewell [Sun, 17 Nov 2013 11:32:44 +0000 (11:32 +0000)]
Add uint16_t if missing.

4 years agoMove up file inclusion.
Richard Kettlewell [Sun, 17 Nov 2013 11:31:52 +0000 (11:31 +0000)]
Move up file inclusion.

4 years agoUTF-16 support
Richard Kettlewell [Sun, 17 Nov 2013 11:31:33 +0000 (11:31 +0000)]
UTF-16 support

4 years agoSynchronous client now uses socketio sources and sinks instead of stdio
Richard Kettlewell [Sun, 17 Nov 2013 11:25:50 +0000 (11:25 +0000)]
Synchronous client now uses socketio sources and sinks instead of stdio

4 years agoinputline variant which uses a source
Richard Kettlewell [Sun, 17 Nov 2013 11:24:51 +0000 (11:24 +0000)]
inputline variant which uses a source

4 years agoSources, by analogy with sinks
Richard Kettlewell [Sun, 17 Nov 2013 11:22:55 +0000 (11:22 +0000)]
Sources, by analogy with sinks

4 years agosocketio sink
Richard Kettlewell [Sun, 17 Nov 2013 11:22:33 +0000 (11:22 +0000)]
socketio sink

4 years agoMore general error handling for sinks
Richard Kettlewell [Sun, 17 Nov 2013 11:21:47 +0000 (11:21 +0000)]
More general error handling for sinks

4 years agoBuffered socket IO wrappers
Richard Kettlewell [Sun, 17 Nov 2013 11:19:08 +0000 (11:19 +0000)]
Buffered socket IO wrappers

Includes a nod to win32 API.

4 years agoMore error string formatting.
Richard Kettlewell [Sun, 17 Nov 2013 11:01:05 +0000 (11:01 +0000)]
More error string formatting.

4 years agoMore conditional header inclusion.
Richard Kettlewell [Sun, 17 Nov 2013 11:00:41 +0000 (11:00 +0000)]
More conditional header inclusion.

4 years agoTypos.
Richard Kettlewell [Sun, 17 Nov 2013 11:00:21 +0000 (11:00 +0000)]
Typos.