paraslash

Paraslash network audio streaming tools


About
News
Download
Documentation
Development

Development


Early development happens in an integration branch named pu ("proposed updates"). When the code is feature-complete, has been tested and is fully documented, it graduates to next. Thus, topics in next are expected to be of higher quality than those in pu.

The table below shows the current development topics. Run git checkout pu to get all topics or git checkout next to enable only the mature topics.

Topic IB #C Description
autogen pu 1 Revamp autogen.sh
ll pu 4 new ll commands to set the log level
logo pu 12 The logo for paraslash-0.7 and an overhaul of the web pages.
misc pu 5 smallish miscellaneous changes for master
mp4ff pu 140 provide our own copy of libmp4ff
openssl-3 pu 2 Don't use openssl APIs anymore which got depreciated in openssl-3.
overflow pu 7 be more careful wrt. integer overflows
poll pu 14 Switch from select(2) to poll(2)
rm_task_subcmd next 1 Remove the obsolete server command "tasks".
rm_v1_moods next 1 Remove version 1 moods.
sf_float pu 1 support 32 bit float sample format.
sha256 next 8 switch from sha1 to sha256

When a topic is merged into master, it vanishes from here since it is no longer considered as being in development.

Topic branch details

The SHA1 number shown as tip can be used to checkout a commit which only contains the changes introduced in this topic.

autogen

  • desc: Revamp autogen.sh
  • state: started on 2021-12-06
  • branch: pu
  • base: master
  • aim: master
  • number commits: 1
  • tip: 48697e89d3192d5c9eba40749993dc6f66c9dfd2
  • merge commit: 4f348965c1a77126a6b74327bab2ebfb5a4a196b
  • merge date: Mon, 6 Dec 2021 21:20:26 +0100
  • rebase count: 0

A single patch which removes everything from autogen.sh except the autoconf and autoheader commands.

  • The autogen.sh script now only creates the autoconf specific files but longer runs configure, make and the test suite.

       .gitignore |  1 +
       autogen.sh | 22 +---------------------
       2 files changed, 2 insertions(+), 21 deletions(-)
    

ll

  • desc: new ll commands to set the log level
  • state: started on 2021-10-15
  • branch: pu
  • base: master
  • aim: master
  • number commits: 4
  • tip: b62b535e955f3f16986b410f62f10bb87509f4fc
  • merge commit: f5d3cc636b813d5b7d03095ec3b87988efa0b3b2
  • merge date: Mon, 6 Dec 2021 21:20:24 +0100
  • rebase count: 0

       Makefile.real              |  2 ++
       afs.c                      | 11 +++++++++++
       audioc.c                   |  6 ++++++
       audiod.c                   |  6 ++----
       audiod_command.c           | 36 ++++++++++++++++++++++++++++++++++
       client.c                   |  6 ++++++
       command.c                  | 38 +++++++++++++++++++++++++++++++++---
       daemon.c                   | 48 ++++++++++++++++++++++++++++++++--------------
       daemon.h                   |  3 ++-
       error.h                    |  1 -
       interactive.c              | 22 +++++++++++++++++++++
       interactive.h              |  2 ++
       m4/lls/audiod_cmd.suite.m4 |  2 ++
       m4/lls/include/com_ll.m4   | 10 ++++++++++
       m4/lls/server_cmd.suite.m4 |  2 ++
       server.c                   |  9 +++++++--
       server.h                   | 15 ++-------------
       string.c                   | 31 ------------------------------
       string.h                   |  1 -
       19 files changed, 181 insertions(+), 70 deletions(-)
    

poll

  • desc: Switch from select(2) to poll(2)
  • state: started on 2021-09-24
  • branch: pu
  • base: master
  • aim: master
  • number commits: 14
  • tip: 7fb39fe59ff2d329d9d1c3ae780a10f76e5c307b
  • merge commit: 82a022da1c003dbb6e327292476980921a43c3a2
  • merge date: Mon, 6 Dec 2021 21:19:33 +0100
  • rebase count: 0

       aacdec_filter.c    |   6 +-
       afh_recv.c         |  10 +--
       afs.c              |  39 +++++----
       alsa_write.c       |  14 ++--
       amp_filter.c       |   6 +-
       ao_write.c         |   8 +-
       audioc.c           |  16 ++--
       audiod.c           |  41 +++++-----
       audiod.h           |   2 +-
       audiod_command.c   |  11 ++-
       buffer_tree.c      |   4 +-
       check_wav.c        |  20 ++---
       check_wav.h        |   4 +-
       client.c           |  18 ++---
       client_common.c    |  39 +++++----
       command.c          |   2 +-
       compress_filter.c  |   6 +-
       configure.ac       |   4 +-
       dccp_recv.c        |  14 ++--
       dccp_send.c        |  15 ++--
       fd.c               | 146 +++++++++++++--------------------
       fd.h               |  12 ++-
       fecdec_filter.c    |   6 +-
       file_write.c       |  12 +--
       filter.c           |   7 +-
       filter.h           |  40 ++++-----
       filter_common.c    |  15 ++--
       flacdec_filter.c   |   8 +-
       grab_client.c      |  16 ++--
       gui.c              |  48 +++++------
       http_recv.c        |  20 ++---
       http_send.c        |  20 ++---
       interactive.c      |  48 ++++-------
       interactive.h      |   3 +-
       mp3dec_filter.c    |   8 +-
       net.c              |   8 +-
       net.h              |   2 +-
       oggdec_filter.c    |  10 +--
       opusdec_filter.c   |   8 +-
       oss_write.c        |  12 +--
       para.h             |   2 +
       play.c             |  38 ++++-----
       prebuffer_filter.c |   8 +-
       recv.c             |   7 +-
       recv.h             |  50 +++++-------
       recv_common.c      |  18 ++---
       resample_filter.c  |  14 ++--
       sched.c            | 233 +++++++++++++++++++++++++++++++++++++++--------------
       sched.h            |  69 ++++++++++------
       send.h             |  27 ++-----
       send_common.c      |   7 +-
       server.c           |  41 +++++-----
       signal.c           |   8 +-
       signal.h           |  21 +++--
       spxdec_filter.c    |   6 +-
       stdin.c            |  21 +++--
       stdout.c           |  18 ++---
       sync_filter.c      |  12 +--
       udp_recv.c         |  14 ++--
       udp_send.c         |   2 +-
       vss.c              |  36 ++++-----
       wav_filter.c       |   8 +-
       wmadec_filter.c    |   7 +-
       write.c            |  15 ++--
       write.h            |  30 +++----
       write_common.c     |   4 +-
       66 files changed, 728 insertions(+), 716 deletions(-)
    

logo

  • desc: The logo for paraslash-0.7 and an overhaul of the web pages.
  • state: started on 2021-10-31
  • branch: pu
  • base: master
  • aim: master
  • number commits: 12
  • tip: 413ce60ba0e2c10ce455d217ea6ea59ae41a3c2a
  • merge commit: f835208f415ff9d6817c8d6d7d3712d7b93a21b2
  • merge date: Mon, 6 Dec 2021 21:20:21 +0100
  • rebase count: 0

       NEWS.md                   |   3 +++
       server.c                  |  25 -------------------------
       web/about.in.html         |  20 +++++++++++---------
       web/documentation.in.html |   2 +-
       web/download.in.html      |   5 +++--
       web/footer.html           |   2 --
       web/header.html           |  25 +++++++++++++------------
       web/header2.html          |  28 +++++++++++++---------------
       web/images/paraslash.ico  | Bin 4286 -> 4898 bytes
       web/images/paraslash.png  | Bin 38865 -> 0 bytes
       web/images/paraslash.svg  |  44 ++++++++++++++++++++++++++++++++++++++++++++
       web/manual.md             |   4 ++--
       web/para.css              |  35 +++++++++--------------------------
       13 files changed, 99 insertions(+), 94 deletions(-)
    

misc

  • desc: smallish miscellaneous changes for master
  • state: testing
  • branch: pu
  • base: master
  • aim: master
  • number commits: 5
  • tip: 1195307283ebf9e77cb07cbb322c95d59d51fcba
  • merge commit: 9b1018b6844837bf3d70c86e0c34e457dd5b0260
  • merge date: Mon, 6 Dec 2021 21:20:21 +0100
  • rebase count: 0

Stuff in here is too small to get its own topic branch, and safe enough to be applied to master without cooking in next.

     aac_afh.c     | 19 +++++++++----------
     acl.c         |  4 ++--
     afh.c         |  4 ++--
     afh.h         |  6 +++---
     afh_common.c  |  4 ++--
     afh_recv.c    | 11 ++++++-----
     audiod.c      | 37 +++++++++++++++++++++----------------
     send_common.c |  4 ++--
     server.c      |  3 ++-
     udp_send.c    |  7 ++++---
     vss.c         | 21 ++++++++++++---------
     11 files changed, 65 insertions(+), 55 deletions(-)

mp4ff

  • desc: provide our own copy of libmp4ff
  • state: started on 2021-08-08
  • branch: pu
  • base: master
  • aim: master
  • number commits: 140
  • tip: 1b628a21251a0725e0a1955b1f1c776d4f84eab5
  • merge commit: f4ce6dd072d4400ffe0431eaa6a12f61e1f2dff1
  • merge date: Mon, 6 Dec 2021 21:20:16 +0100
  • rebase count: 0

This 130+ patch behemoth adds a stripped down copy of libmp4ff to the repo. This has become necessary because the library was dropped from the faad project.

The series starts with a patch which adds an unmodified copy of the relevant parts of libmp4ff to the repo. All code is combined in a single file, mp4.c, which contains approximately 2K lines of code. The public API is defined in the new mp4.h.

The remaining patches clean up the two new files, simplifying and removing large parts of it. Some of the patches modify the API, and those require small changes to the aac audio format handler, which also becomes simpler due to these changes. The aac decoder, however, is not touched in this series.

  • A stripped down copy of the discontinued libmp4ff library has become part of the paraslash code base. As a result it is no longer necessary to install faad from source to get support for aac/m4a files. The faad decoder package must still be installed.

       aac_afh.c    |  270 +++++----------
       configure.ac |   12 +-
       error.h      |   15 +-
       mp4.c        | 1046 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       mp4.h        |   87 +++++
       5 files changed, 1236 insertions(+), 194 deletions(-)
    

openssl-3

  • desc: Don’t use openssl APIs anymore which got depreciated in openssl-3.
  • state: started on 2021-09-10
  • branch: pu
  • base: master
  • aim: master
  • number commits: 2
  • tip: 3ab628b3827a9c8a246d9a3a998e278b096f6397
  • merge commit: 2246a3c6bcce4ad20738963aa9f9f5af1b5b54e6
  • merge date: Mon, 6 Dec 2021 21:19:44 +0100
  • rebase count: 0

       Makefile.real |  1 +
       openssl.c     | 18 +++++++++++++++++-
       2 files changed, 18 insertions(+), 1 deletion(-)
    

overflow

  • desc: be more careful wrt. integer overflows
  • state: started on 2021-10-23
  • branch: pu
  • base: master
  • aim: master
  • number commits: 7
  • tip: 8eb4942aa8b165617f9af889955ab81f83a03eb9
  • merge commit: ed5ea1c9ac7af59cfacf9a975783cb29e232d8ef
  • merge date: Mon, 6 Dec 2021 21:19:41 +0100
  • rebase count: 0

New memory allocation API which checks for overflows. The first part of the series renames the main allocation functions. Later patches in the series implement allocators which take two size_t arguments like calloc(3) does and check whether the multiplication overflows by employing the __builtin_mul_overflow() primitive supported by gcc and clang. This requires us to bump the lowest supported gcc and clang version.

  • All allocation functions now check for integer overflow. Since this requires support from the compiler, the oldest supported gcc version has been bumped to gcc-5.4 (released in 2015).

       Makefile.real      |   1 +
       aac_afh.c          |   4 +-
       aacdec_filter.c    |   4 +-
       acl.c              |   2 +-
       afh_recv.c         |   4 +-
       afs.c              |   2 +-
       aft.c              |  16 ++---
       alsa_mix.c         |   2 +-
       alsa_write.c       |   2 +-
       amp_filter.c       |   4 +-
       ao_write.c         |   2 +-
       audioc.c           |   4 +-
       audiod.c           |  23 ++++---
       audiod_command.c   |   2 +-
       base64.c           |   2 +-
       bitstream.c        |   4 +-
       blob.c             |   2 +-
       buffer_tree.c      |  18 +++---
       check_wav.c        |   2 +-
       chunk_queue.c      |   4 +-
       client.c           |   4 +-
       client_common.c    |   6 +-
       close_on_fork.c    |   2 +-
       command.c          |   6 +-
       compress_filter.c  |   4 +-
       crypt_common.c     |   2 +-
       dccp_recv.c        |   2 +-
       dccp_send.c        |   2 +-
       fd.c               |   2 +-
       fec.c              |  20 +++----
       fecdec_filter.c    |   8 +--
       file_write.c       |   2 +-
       filter.c           |   4 +-
       flac_afh.c         |   6 +-
       flacdec_filter.c   |   4 +-
       gcrypt.c           |   6 +-
       grab_client.c      |   2 +-
       gui.c              |   2 +-
       http_recv.c        |   2 +-
       http_send.c        |   2 +-
       imdct.c            |   8 +--
       interactive.c      |  10 ++--
       mm.c               |   8 +--
       mood.c             |   8 +--
       mp.c               |   4 +-
       mp3_afh.c          |   8 +--
       mp3dec_filter.c    |   4 +-
       net.c              |   6 +-
       ogg_afh_common.c   |   8 +--
       oggdec_filter.c    |   6 +-
       openssl.c          |   8 +--
       opus_afh.c         |   2 +-
       opusdec_filter.c   |   6 +-
       oss_mix.c          |   2 +-
       oss_write.c        |   2 +-
       para.h             |   1 -
       play.c             |  10 ++--
       prebuffer_filter.c |   2 +-
       recv_common.c      |   2 +-
       resample_filter.c  |   8 +--
       ringbuffer.c       |   4 +-
       sched.c            |   2 +-
       score.c            |   4 +-
       send_common.c      |  10 ++--
       server.c           |   4 +-
       sideband.c         |   6 +-
       signal.c           |   2 +-
       spx_afh.c          |   2 +-
       spxdec_filter.c    |   4 +-
       string.c           | 173 ++++++++++++++++++++++++++++++++++-------------------
       string.h           |   7 ++-
       sync_filter.c      |   8 +--
       udp_send.c         |   4 +-
       user_list.c        |   2 +-
       vss.c              |   8 +--
       wav_filter.c       |   4 +-
       web/manual.md      |   4 +-
       wma_afh.c          |  12 ++--
       wmadec_filter.c    |   8 +--
       write.c            |   2 +-
       write_common.c     |   2 +-
       yy/mp.y            |   6 +-
       82 files changed, 315 insertions(+), 268 deletions(-)
    

poll

  • desc: Switch from select(2) to poll(2)
  • state: started on 2021-09-24
  • branch: pu
  • base: master
  • aim: master
  • number commits: 14
  • tip: 7fb39fe59ff2d329d9d1c3ae780a10f76e5c307b
  • merge commit: 82a022da1c003dbb6e327292476980921a43c3a2
  • merge date: Mon, 6 Dec 2021 21:19:33 +0100
  • rebase count: 0

       aacdec_filter.c    |   6 +-
       afh_recv.c         |  10 +--
       afs.c              |  39 +++++----
       alsa_write.c       |  14 ++--
       amp_filter.c       |   6 +-
       ao_write.c         |   8 +-
       audioc.c           |  16 ++--
       audiod.c           |  41 +++++-----
       audiod.h           |   2 +-
       audiod_command.c   |  11 ++-
       buffer_tree.c      |   4 +-
       check_wav.c        |  20 ++---
       check_wav.h        |   4 +-
       client.c           |  18 ++---
       client_common.c    |  39 +++++----
       command.c          |   2 +-
       compress_filter.c  |   6 +-
       configure.ac       |   4 +-
       dccp_recv.c        |  14 ++--
       dccp_send.c        |  15 ++--
       fd.c               | 146 +++++++++++++--------------------
       fd.h               |  12 ++-
       fecdec_filter.c    |   6 +-
       file_write.c       |  12 +--
       filter.c           |   7 +-
       filter.h           |  40 ++++-----
       filter_common.c    |  15 ++--
       flacdec_filter.c   |   8 +-
       grab_client.c      |  16 ++--
       gui.c              |  48 +++++------
       http_recv.c        |  20 ++---
       http_send.c        |  20 ++---
       interactive.c      |  48 ++++-------
       interactive.h      |   3 +-
       mp3dec_filter.c    |   8 +-
       net.c              |   8 +-
       net.h              |   2 +-
       oggdec_filter.c    |  10 +--
       opusdec_filter.c   |   8 +-
       oss_write.c        |  12 +--
       para.h             |   2 +
       play.c             |  38 ++++-----
       prebuffer_filter.c |   8 +-
       recv.c             |   7 +-
       recv.h             |  50 +++++-------
       recv_common.c      |  18 ++---
       resample_filter.c  |  14 ++--
       sched.c            | 233 +++++++++++++++++++++++++++++++++++++++--------------
       sched.h            |  69 ++++++++++------
       send.h             |  27 ++-----
       send_common.c      |   7 +-
       server.c           |  41 +++++-----
       signal.c           |   8 +-
       signal.h           |  21 +++--
       spxdec_filter.c    |   6 +-
       stdin.c            |  21 +++--
       stdout.c           |  18 ++---
       sync_filter.c      |  12 +--
       udp_recv.c         |  14 ++--
       udp_send.c         |   2 +-
       vss.c              |  36 ++++-----
       wav_filter.c       |   8 +-
       wmadec_filter.c    |   7 +-
       write.c            |  15 ++--
       write.h            |  30 +++----
       write_common.c     |   4 +-
       66 files changed, 728 insertions(+), 716 deletions(-)
    

rm_task_subcmd

  • desc: Remove the obsolete server command “tasks”.
  • state: started on 2020-03-17, cooking since 2021-02-27
  • branch: next
  • base: master
  • aim: master
  • number commits: 1
  • tip: 5dffe231771540d1295c5d75b29920834478051f
  • merge commit: ad01d26fd6da15ea390d19a28082dd0400ccbfec
  • merge date: Sat, 27 Feb 2021 17:59:37 +0100
  • rebase count: 58

A single commit containing an incompatible change for 0.7.0.

The server command “tasks” server command has been removed.

     client.c                   | 1 -
     command.c                  | 8 --------
     m4/lls/server_cmd.suite.m4 | 9 ---------
     3 files changed, 18 deletions(-)

rm_v1_moods

  • desc: Remove version 1 moods.
  • state: started on 2020-03-16, cooking since 2021-02-27
  • branch: next
  • base: master
  • aim: master
  • number commits: 1
  • tip: 184ea897a9b446611a9d02315160b6d77c0926fe
  • merge commit: ea033fda3608cf2480f37a301c7ce6ec9c0f0ed3
  • merge date: Sat, 27 Feb 2021 17:59:36 +0100
  • rebase count: 58

A single commit which removes a long obsolete feature.

Support for the long deprecated version 1 moods, has been removed.

     configure.ac |   1 -
     mm.c         | 375 -------------------------------------------------------
     mm.h         |  62 ----------
     mood.c       | 399 ++++++-----------------------------------------------------
     4 files changed, 41 insertions(+), 796 deletions(-)

sf_float

  • desc: support 32 bit float sample format.
  • state: started on 2018-04-29
  • branch: pu
  • base: master
  • aim: master
  • number commits: 1
  • tip: 0e062fdee6aed6efe5be7fd1f07c5e81751620e6
  • merge commit: e20516692d42a7396e37c7af87753232abcd5f3b
  • merge date: Mon, 6 Dec 2021 21:19:28 +0100
  • rebase count: 115

A single patch which adds two new sample formats for 32 bit IEEE float waveform data.

  • The alsa writer also supports 32 bit float sample formats.

       alsa_write.c                    |  2 ++
       ao_write.c                      |  2 ++
       check_wav.c                     | 20 +++++++++++++++++---
       m4/lls/include/sample-format.m4 |  4 +++-
       para.h                          |  2 ++
       5 files changed, 26 insertions(+), 4 deletions(-)
    

sha256

  • desc: switch from sha1 to sha256
  • state: started on 2020-03-06, cooking since 2021-10-28
  • branch: next
  • base: master
  • aim: master
  • number commits: 8
  • tip: a2a1a97f12fd7ae08028fd98439c5efa587eda79
  • merge commit: 737efe221403bca6370ed3bbcbd554f4638d8063
  • merge date: Mon, 6 Dec 2021 21:19:18 +0100
  • rebase count: 32

A couple of changes which start to eliminate the use of sha1 in favor of sha256. This series is only the first step, though, as we need to keep sha1 for the time being to provide backward compatibility.

  • Starting with paraslash-0.7.0, the sha256 hash value of each known audio file is stored in the database while older versions employed the sha1 hash algorithm which has been considered insecure since 2005 and should no longer be used today. The switch from sha1 to sha256 requires users to upgrade their database using the new para_upgrade_db program, followed by re-adding all files to recompute the hashes. With this approach all metadata stored in the database (last played date, num played value, moods, playlists, attributes etc.) are kept. An simpler alternative is to start over from scratch by running the “init” command but this will lose these metadata.

  • Server and client now hash the session keys with sha256 rather than sha1 during the initial handshake. This feature is optional and backwards compatible: old clients can still connect to a new server (using sha1). Also new clients can connect to an old server (again using sha1).

       Makefile.in                |   1 +
       Makefile.real              |   5 +-
       afs.c                      |   2 +-
       aft.c                      |  34 ++--
       client_common.c            |  38 ++++-
       command.c                  |  35 +++-
       configure.ac               |  14 +-
       crypt.h                    |  39 +++++
       crypt_common.c             |  25 +++
       gcrypt.c                   |  16 ++
       m4/lls/server.suite.m4     |   2 +-
       m4/lls/upgrade_db.suite.m4 |  33 ++++
       openssl.c                  |   8 +
       upgrade_db.c               | 386 +++++++++++++++++++++++++++++++++++++++++++++
       web/documentation.in.html  |   1 +
       web/manual.md              |  28 ++--
       16 files changed, 618 insertions(+), 49 deletions(-)