13 years agoRe-revert "Auto-adjust fecdec output buffer size."
Andre Noll [Sat, 2 May 2009 10:53:54 +0000 (12:53 +0200)]
Re-revert "Auto-adjust fecdec output buffer size."

This re-applies commit 35f9051506345255c7ed3c076b7df5f3b7d26039 which
should work due to the previous output buffer patch.

13 years agoMerge branch 'master' into next
Andre Noll [Sat, 2 May 2009 09:50:17 +0000 (11:50 +0200)]
Merge branch 'master' into next

13 years agoUse only a single buffer pointer for filters/receivers.
Andre Noll [Sat, 2 May 2009 09:46:46 +0000 (11:46 +0200)]
Use only a single buffer pointer for filters/receivers.

This allows filters to change the output buffer size on the fly.

13 years agofecdec: Add another sanity check to find_group().
Andre Noll [Fri, 1 May 2009 20:07:49 +0000 (22:07 +0200)]
fecdec: Add another sanity check to find_group().

13 years agoalsa: Do not call alsa shutdown functions if alsa wasn't yet initialized.
Andre Noll [Fri, 1 May 2009 12:05:47 +0000 (14:05 +0200)]
alsa: Do not call alsa shutdown functions if alsa wasn't yet initialized.

This might happen if the wng is destroyed before any output was
produced. This bug could trigger

para_audiod: pcm.c:1105: snd_pcm_drain: Assertion `pcm' failed

causing audiod to crash.

13 years agoalsa: Fix a typo in comment.
Andre Noll [Fri, 1 May 2009 11:51:33 +0000 (13:51 +0200)]
alsa: Fix a typo in comment.

13 years agofecdec: Be more anal when finding fec groups.
Andre Noll [Fri, 1 May 2009 11:42:21 +0000 (13:42 +0200)]
fecdec: Be more anal when finding fec groups.

If the number of (data) slices changes, there's something seriously
wrong. So return an error if we detect this situation.

13 years agofecdec: Fix warning message when freeing incomplete groups.
Andre Noll [Fri, 1 May 2009 11:35:54 +0000 (13:35 +0200)]
fecdec: Fix warning message when freeing incomplete groups.

This could lead to a segfault.

13 years ago[client] Dynamically allocate output buffer.
Andre Noll [Wed, 29 Apr 2009 19:26:00 +0000 (21:26 +0200)]
[client] Dynamically allocate output buffer.

This should simplify subsequent patches that allow variable-sized
output buffers for filters/receivers.

13 years agoMerge branch 'master' into next
Andre Noll [Mon, 27 Apr 2009 18:26:34 +0000 (20:26 +0200)]
Merge branch 'master' into next

13 years agoRevert "Auto-adjust fecdec output buffer size."
Andre Noll [Sun, 26 Apr 2009 20:35:53 +0000 (22:35 +0200)]
Revert "Auto-adjust fecdec output buffer size."

This reverts commit 35f9051506345255c7ed3c076b7df5f3b7d26039.

Currently, filters must not change their output buffer on the fly
because the writer might already have a reference to the old buffer
and keeps using this buffer.

As dealing with changing output buffers requires much more work,
including changes to the generic filter and writer code, let's defer
this change to post 0.3.4.

13 years agoMerge branch 'master' into next
Andre Noll [Sun, 26 Apr 2009 19:05:18 +0000 (21:05 +0200)]
Merge branch 'master' into next

13 years agoafs: Rename signal_post_select() to afs_signal_post_select().
Andre Noll [Sun, 26 Apr 2009 17:48:40 +0000 (19:48 +0200)]
afs: Rename signal_post_select() to afs_signal_post_select().

Just to distinguish the fatal error messages on shutdown.

13 years agoAvoid dirty afs tables on shutdown.
Andre Noll [Sun, 26 Apr 2009 17:45:59 +0000 (19:45 +0200)]
Avoid dirty afs tables on shutdown.

The server process must wait for afs because afs catches SIGINT/SIGTERM
and may thus not respond immediately to these SIGNALS.

Before reacting to the signal, afs might want to use the shared memory
area and the mmd mutex.  If the server process destroys this mutex
too early and afs tries to lock the shared memory area, the call to
mutex_lock() will fail and terminate the afs process. This leads to
dirty osl tables.

There's no such problem with the other children of the server process
(the command handlers) as these reset their SIGINT/SIGTERM handlers
to the default action, i.e.  these processes get killed immediately
by the above kill().

13 years agoFix an invalid free() in command handlers.
Andre Noll [Sun, 26 Apr 2009 16:08:13 +0000 (18:08 +0200)]
Fix an invalid free() in command handlers.

The chunk table and the info_string are pointers located in the mmd
struct that point to dynamically allocated memory that must be freed
by the parent and the child. However, as the mmd struct is in a shared
memory area, there's no guarantee that after the fork these pointers
are still valid in child context. As these two pointers are not used
in the child anyway, we save them to local variables and free the
memory via that copy in the child.

This gets rid of

*** glibc detected *** para_server (serving double free or corruption (!prev): 0x08086fe0 ***

13 years agoMerge branch 'master' into next
Andre Noll [Sat, 25 Apr 2009 20:33:43 +0000 (22:33 +0200)]
Merge branch 'master' into next


13 years ago[net]: Fix buffer overflow in send_cred_buffer().
Andre Noll [Sat, 25 Apr 2009 13:17:58 +0000 (15:17 +0200)]
[net]: Fix buffer overflow in send_cred_buffer().

As pointed out by Johannes W├Ârner, para_audioc crashes on recent
Ubuntu systems due to stack smashing. This is caused by writing past
the end of the control buffer which stores the message header and
the socket credentials.

This patch fixes the bug by allocating a properly sized buffer.

13 years agoMerge commit 'fml/master'
Andre Noll [Thu, 23 Apr 2009 21:26:23 +0000 (23:26 +0200)]
Merge commit 'fml/master'

13 years ago[udp_send] Refuse to stream files with invalid chunk tables.
Andre Noll [Thu, 23 Apr 2009 15:18:03 +0000 (17:18 +0200)]
[udp_send] Refuse to stream files with invalid chunk tables.

If an audio file contains a chunk so large that even the maximal
possible number of slices is not sufficient to put this chunk into
a single FEC group, we must refuse to send this file. It's likely a
corrupt file anyway.

The old code in num_slices() was buggy as it returned the number of
slices needed to send the file as an uint8_t, so the return value
was actually the number of needed slices mod 256. This could trigger
the assert() in setup_next_fec_group() which checks that the group
contains at least one chunk.

This patch changes num_slices() to detect this situation more
reliably. As it is likely caused by a bad audio file rather than by a
networking problem, we do _not_ kick the fec client, but deactivate
it for the current file only. This requires the new "error" member
of struct fec_client which indicates a temporarily disabled fec client.

13 years ago[mp3_afh]: Ignore junk at the end of an mp3 file.
Andre Noll [Thu, 23 Apr 2009 11:39:04 +0000 (13:39 +0200)]
[mp3_afh]: Ignore junk at the end of an mp3 file.

There are mp3 files containing large areas of zeros at the end of the
file. The old code in mp3_afh.c would include these zeros in the last
chunk of the file.

This leads to unnecessary network traffic as including this area in
a chunk means that useless data is going to be sent to the client.
More importantly, it causes the udp sender to bail out because such
large chunks can not be fec-encoded, even with the maximal number
of slices.

This patch uses frame_start+frame_length instead of the file size as
the end of the last chunk which avoids this particular problem.

13 years agoMerge commit 'athcx/next' into next
Andre Noll [Sun, 19 Apr 2009 21:17:38 +0000 (23:17 +0200)]
Merge commit 'athcx/next' into next

13 years agoFix off-by-one bug in mp3_afh.
Andre Noll [Sun, 19 Apr 2009 21:17:08 +0000 (23:17 +0200)]
Fix off-by-one bug in mp3_afh.

13 years agoaudiod: Add more detailed docu on when to use --no_default_filters.
Andre Noll [Wed, 8 Apr 2009 14:47:52 +0000 (16:47 +0200)]
audiod: Add more detailed docu on when to use --no_default_filters.

13 years agoKill remaining instances of signal().
Andre Noll [Mon, 6 Apr 2009 17:02:16 +0000 (19:02 +0200)]
Kill remaining instances of signal().

Also, make para_sigaction() and para_install_sighandler() return void
and exit on errors.

13 years agoserver: Use para_sigaction() to install the temporary SIGCHLD handler.
Andre Noll [Mon, 6 Apr 2009 16:54:15 +0000 (18:54 +0200)]
server: Use para_sigaction() to install the temporary SIGCHLD handler.

13 years agoUse para_sigaction() in command handlers.
Andre Noll [Mon, 6 Apr 2009 16:41:37 +0000 (18:41 +0200)]
Use para_sigaction() in command handlers.

This allows to get rid of an ugly hack for solaris. The patch also adds checks
for whether the signals were reset sucessfully in the command handler and
aborts early on errors.

13 years agoIntroduce para_sigaction().
Andre Noll [Mon, 6 Apr 2009 15:53:46 +0000 (17:53 +0200)]
Introduce para_sigaction().

This wrapper for sigaction() is public and may be used to setup
a handler different from the generic handler that gets installed
for the signal by para_install_sighandler().

13 years agosignal: Switch from signal() to sigaction.
Andre Noll [Mon, 6 Apr 2009 15:45:44 +0000 (17:45 +0200)]
signal: Switch from signal() to sigaction.

Use of signal() should be avoided because the behavior of signal() varies
across Unix versions, and has also varied historically across different
versions of Linux.

This patch rewrites para_install_sighandler so that it calls sigaction()
instead of signal(). The implementation is taken from good old APUE.

There are a couple of other users of signal() in the paraslash code. Most
of which are OK because they use signal() only to ignore/reset a signal which
happens to be the only portable use of signal(). All other users of signal()
have to be converted in subsequent patches.

13 years agoAuto-adjust fecdec output buffer size.
Andre Noll [Sat, 28 Mar 2009 18:15:01 +0000 (19:15 +0100)]
Auto-adjust fecdec output buffer size.

13 years agoFix a memory leak in the fecdec filter.
Andre Noll [Sat, 28 Mar 2009 18:13:56 +0000 (19:13 +0100)]
Fix a memory leak in the fecdec filter.

13 years agofecdec: Return an error on zero size slices.
Andre Noll [Sat, 28 Mar 2009 18:13:23 +0000 (19:13 +0100)]
fecdec: Return an error on zero size slices.

13 years agoINSTALL: Minor improvements.
Andre Noll [Sun, 22 Mar 2009 18:53:27 +0000 (19:53 +0100)]
INSTALL: Minor improvements.

13 years agoFix some memory leaks.
Andre Noll [Sun, 22 Mar 2009 12:58:28 +0000 (13:58 +0100)]
Fix some memory leaks.

In fact, there was only one "real" leak: An empty info string (100
bytes) could leak on file change.

13 years agoDestroy the close_on_fork_list in close_listed_fds().
Andre Noll [Sun, 22 Mar 2009 11:23:21 +0000 (12:23 +0100)]
Destroy the close_on_fork_list in close_listed_fds().

This is called from child context and the child does no longer
need the list once all fds have been closed.

13 years agoserver: Use a temporary SIGCHLD handler to catch afs init failures.
Andre Noll [Sat, 21 Mar 2009 16:46:43 +0000 (17:46 +0100)]
server: Use a temporary SIGCHLD handler to catch afs init failures.

If afs dies immediately on startup (because of dirty tables) para_server
would not notice as the SIGCHLD handler is being intalled after the
call to afs_init().

13 years agoaudiod: Improve display of play time.
Andre Noll [Thu, 19 Mar 2009 21:51:17 +0000 (22:51 +0100)]
audiod: Improve display of play time.

Keeping track of the offset, server stream start and the duration
of the audio file length at the time the receiver/writer was started
allows to compute the play time more accurately.

13 years agoFix various dead stores found by the clang static analyzer.
Andre Noll [Wed, 18 Mar 2009 22:05:22 +0000 (23:05 +0100)]
Fix various dead stores found by the clang static analyzer.

13 years agoudp_send: Also mention the FEC parameters of all targets.
Andre Noll [Wed, 18 Mar 2009 19:16:03 +0000 (20:16 +0100)]
udp_send: Also mention the FEC parameters of all targets.

13 years agowav: Replace assertion by a proper error message.
Andre Noll [Wed, 18 Mar 2009 19:15:27 +0000 (20:15 +0100)]
wav: Replace assertion by a proper error message.

This assertion can be hit easily by choosing wav as the first filter
of the filter chain.

13 years agoGET_NUM_DIGITS: Evaluate macro parameter only once.
Andre Noll [Tue, 17 Mar 2009 23:00:08 +0000 (00:00 +0100)]
GET_NUM_DIGITS: Evaluate macro parameter only once.

13 years agoFix possible NULL pointer dereference in afh_get_header().
Andre Noll [Tue, 17 Mar 2009 22:58:58 +0000 (23:58 +0100)]
Fix possible NULL pointer dereference in afh_get_header().

13 years agomp3: Avoid rounding errors during bitrate calculation.
Andre Noll [Sun, 15 Mar 2009 17:59:48 +0000 (18:59 +0100)]
mp3: Avoid rounding errors during bitrate calculation.

Just add up the bitrates of all frames and divide by the number
of frames afterwards. By using uint64_t for the sum, we should
be safe wrt. overflows.

13 years agoFix year in comment to color.c.
Andre Noll [Sun, 15 Mar 2009 16:36:19 +0000 (17:36 +0100)]
Fix year in comment to color.c.

The code was actually stolen this year :)

13 years agoalsa: Split alsa_open().
Andre Noll [Sun, 15 Mar 2009 16:35:37 +0000 (17:35 +0100)]
alsa: Split alsa_open().

Only perform what is absolutely necessary in alsa_open(). Call the
real alsa initialization from alsa_post_select(), when we actually
have audio data available to start streaming.

This should get rid of the sound artefacts that happen sometimes
at the beginning of the stream.

13 years agowrite: Get rid of wn->chunk_bytes and wng->max_chunk_bytes.
Andre Noll [Sun, 15 Mar 2009 16:14:50 +0000 (17:14 +0100)]
write: Get rid of wn->chunk_bytes and wng->max_chunk_bytes.

These are not used anyway. Make all writers return 1 on success.

13 years agoMinor documentation updates.
Andre Noll [Sun, 15 Mar 2009 16:08:14 +0000 (17:08 +0100)]
Minor documentation updates.

13 years agoalsa: Simplify alsa_open().
Andre Noll [Sun, 15 Mar 2009 14:47:45 +0000 (15:47 +0100)]
alsa: Simplify alsa_open().

No need to call snd_pcm_info() as we do not use it anyway.

13 years agoaudiod: Improve receiver restart logic.
Andre Noll [Sun, 15 Mar 2009 14:29:12 +0000 (15:29 +0100)]
audiod: Improve receiver restart logic.

Use the vss status flags and the stream_start time announced by
para_server to decide when to start a new receiver.

This is better than basing this decision only on whether the vss status
equals "playing" as we did before. This allows to reliably detect when it
is safe to start a new receiver while the filter/writer of the current
stream are still active.

The old code would simply wait until filter/writer complete which, due to
buffering, might be much too late.

13 years agovss: Take fec group durations into account when computing the eof barrier.
Andre Noll [Thu, 12 Mar 2009 20:39:59 +0000 (21:39 +0100)]
vss: Take fec group durations into account when computing the eof barrier.

On eof, we must wait at least as long as the duration of the last sent
fec group.

13 years agoFix a typo in the documentation to struct writer.
Andre Noll [Thu, 12 Mar 2009 20:38:07 +0000 (21:38 +0100)]
Fix a typo in the documentation to struct writer.

13 years agoalsa: Revert 596d1d97f90854bd941db02f1353df8e1196ccc0
Andre Noll [Thu, 12 Mar 2009 20:37:26 +0000 (21:37 +0100)]
alsa: Revert 596d1d97f90854bd941db02f1353df8e1196ccc0

This was really a brain fart. Instead, introduce a small delay
in alsa_open() that defers audio data writing by 100ms. This seems
to be enough to get rid of the buffer underruns with the udp sender.

13 years agoaudiod: Change return value of open_current_receiver() to void.
Andre Noll [Mon, 9 Mar 2009 21:43:04 +0000 (22:43 +0100)]
audiod: Change return value of open_current_receiver() to void.

Its single caller ignores the return value.

13 years agoMove struct status_task from audiod.h to audiod.c.
Andre Noll [Mon, 9 Mar 2009 21:35:11 +0000 (22:35 +0100)]
Move struct status_task from audiod.h to audiod.c.

It's only used in audiod.c.

13 years agovss: Fix need_audio_header().
Andre Noll [Mon, 9 Mar 2009 21:01:33 +0000 (22:01 +0100)]
vss: Fix need_audio_header().

This braino caused the audio file header to be included in each FEC group.

13 years agovss: Improve EOF handling.
Andre Noll [Mon, 9 Mar 2009 20:55:50 +0000 (21:55 +0100)]
vss: Improve EOF handling.

Set the "next" flag only if no more writes to fec clients happen.

13 years agovss: Handle errors in setup_next_fec_group() properly.
Andre Noll [Mon, 9 Mar 2009 20:41:36 +0000 (21:41 +0100)]
vss: Handle errors in setup_next_fec_group() properly.

setup_next_fec_group() might return a negative value.

13 years agorecv_afs_msg(): Fix indentation.
Andre Noll [Mon, 9 Mar 2009 20:29:27 +0000 (21:29 +0100)]
recv_afs_msg(): Fix indentation.

13 years agoMake FEC work with oggvorbis streams.
Andre Noll [Sun, 8 Mar 2009 20:41:27 +0000 (21:41 +0100)]
Make FEC work with oggvorbis streams.

Unfortunately, this required to rewrite large parts of the fec code
in vss.c. The new code behaves better if the FEC parameters are not
suitable for the current audio file, for example if the audio file header
does not fit into the desired number of slices. It detects this situation
and adjusts the given FEC parameters accordingly.

13 years agoafh: Introduce afh_get_largest_chunk_size().
Andre Noll [Sun, 8 Mar 2009 18:59:17 +0000 (19:59 +0100)]
afh: Introduce afh_get_largest_chunk_size().

This will be needed by the fec code in order to validate the
fec parameters.

13 years agooggdec: Abort on input errors.
Andre Noll [Sun, 8 Mar 2009 18:58:08 +0000 (19:58 +0100)]
oggdec: Abort on input errors.

13 years agofec: Fix comment to invert_mat().
Andre Noll [Sun, 8 Mar 2009 18:56:53 +0000 (19:56 +0100)]
fec: Fix comment to invert_mat().

13 years agoalsa_write: Handle EPIPE errors properly.
Andre Noll [Thu, 5 Mar 2009 21:05:22 +0000 (22:05 +0100)]
alsa_write: Handle EPIPE errors properly.

There's no need to throw away the data if a buffer underrun occurs.
Just try to write the same data again after the snd_pcm_prepare().

13 years agoAvoid division by zero in setup_next_fec_group().
Andre Noll [Thu, 5 Mar 2009 21:03:14 +0000 (22:03 +0100)]
Avoid division by zero in setup_next_fec_group().

This needs more work.

13 years agoFix initialization of fec_client_list.
Andre Noll [Thu, 5 Mar 2009 21:00:41 +0000 (22:00 +0100)]
Fix initialization of fec_client_list.

The list must be initialized _before_ the init functions of the
senders are called, because the udp_send_init() might add fec clients
to that list.

13 years agoNEWS, CREDITS, FEATURES update.
Andre Noll [Wed, 4 Mar 2009 21:58:23 +0000 (22:58 +0100)]

13 years agoRecognize the eof packet also in the udp receiver.
Andre Noll [Wed, 4 Mar 2009 21:19:04 +0000 (22:19 +0100)]
Recognize the eof packet also in the udp receiver.

This fixes two bugs: The last fec group of an audio file was not
decoded at all, and "para_recv -r udp" did not exit at the end of
a multicast stream.

13 years agoFix some gcc warnings on x86_64.
Andre Noll [Mon, 2 Mar 2009 10:07:01 +0000 (11:07 +0100)]
Fix some gcc warnings on x86_64.

13 years agoMerge commit 'meins/master'
Andre Noll [Mon, 2 Mar 2009 09:39:59 +0000 (10:39 +0100)]
Merge commit 'meins/master'

13 years agovss.c: Improve the fec timing code.
Andre Noll [Sun, 1 Mar 2009 22:09:51 +0000 (23:09 +0100)]
vss.c: Improve the fec timing code.

This patch

- Fixes a the bug where assert(start_buf) caused para_server
to abort.
- Gets rid of buffer underruns by introducing a quick hack that
sends all but the first slice a bit early.
- Moves some code from compute_next_fec_slice() to
setup_next_fec_group() where it belongs.

13 years agoSimplify dispatch_slice().
Andre Noll [Sun, 1 Mar 2009 21:10:53 +0000 (22:10 +0100)]
Simplify dispatch_slice().

13 years agofecdec: Add some more documentation, minor improvements.
Andre Noll [Sun, 1 Mar 2009 21:08:23 +0000 (22:08 +0100)]
fecdec: Add some more documentation, minor improvements.

13 years agofecdec: Minor cleanups.
Andre Noll [Sun, 1 Mar 2009 20:54:24 +0000 (21:54 +0100)]
fecdec: Minor cleanups.

13 years agofecdec.c: Add some more sanity checks to find_group().
Andre Noll [Sun, 1 Mar 2009 20:09:37 +0000 (21:09 +0100)]
fecdec.c: Add some more sanity checks to find_group().

13 years agoMake fec parameters configurable.
Andre Noll [Sun, 1 Mar 2009 18:26:04 +0000 (19:26 +0100)]
Make fec parameters configurable.

This patch allows to specify the fec parameters in the add subcommand
like this:

para_client sender udp add

13 years agoMore source code documentation.
Andre Noll [Sun, 1 Mar 2009 13:57:52 +0000 (14:57 +0100)]
More source code documentation.

13 years agovss.h: Kill unused VSS_CHANGE.
Andre Noll [Sun, 1 Mar 2009 13:43:25 +0000 (14:43 +0100)]
vss.h: Kill unused VSS_CHANGE.

13 years agofecdec.c: Don't warn about incomplete slices at close time.
Andre Noll [Sun, 1 Mar 2009 13:42:39 +0000 (14:42 +0100)]
fecdec.c: Don't warn about incomplete slices at close time.

Move that warning to free_oldest_group().

13 years agofecdec_filter.c: Kill useless UNUSED_GROUP_NUM.
Andre Noll [Sun, 1 Mar 2009 13:00:40 +0000 (14:00 +0100)]
fecdec_filter.c: Kill useless UNUSED_GROUP_NUM.

A group is complete iff num_received_slices >= data_slices_per_group.

13 years agofecdec_filter cleanups and documentation improvements.
Andre Noll [Sun, 1 Mar 2009 12:55:29 +0000 (13:55 +0100)]
fecdec_filter cleanups and documentation improvements.

Rename struct fec_group to fecdec_group as we already have struct
fec_group in vss.c. Also kill useless INPUT_BUFFER_SIZE define.

13 years agoAdd some more FEC source code documentation.
Andre Noll [Sun, 1 Mar 2009 12:24:31 +0000 (13:24 +0100)]
Add some more FEC source code documentation.

13 years agoTrivial doxygen fixes.
Andre Noll [Sat, 28 Feb 2009 21:56:47 +0000 (22:56 +0100)]
Trivial doxygen fixes.

13 years agoDefine _GNU_SOURCE to get the ucred structure.
Andre Noll [Sat, 28 Feb 2009 21:39:50 +0000 (22:39 +0100)]
Define _GNU_SOURCE to get the ucred structure.

This is needed for glibc >= 2.8.

13 years agoSimplify compute_slice_timeout().
Andre Noll [Sat, 28 Feb 2009 17:21:55 +0000 (18:21 +0100)]
Simplify compute_slice_timeout().

13 years agovss.c: Get rid of some casts.
Andre Noll [Sat, 28 Feb 2009 14:09:13 +0000 (15:09 +0100)]
vss.c: Get rid of some casts.

13 years agoMerge branch 'gerrit'
Andre Noll [Sat, 28 Feb 2009 13:56:11 +0000 (14:56 +0100)]
Merge branch 'gerrit'

13 years agoAdd forward error correction code to the udp sender/receiver.
Andre Noll [Sat, 28 Feb 2009 13:55:46 +0000 (14:55 +0100)]
Add forward error correction code to the udp sender/receiver.

This patch adds the first draft of a FEC implementation based
on code by Luigi Rizzo.

On the server side, the FEC encoding is done within the virtual
streaming system which also contains the timing routines for sending
a FEC-encoded audio stream. Senders my request such an encoded stream
by calling vss_add_fec_client() with a fec_client_parms structure
that contains the FEC parameters and a callback function which is used
to actually send the data.

On the receiver side, the new fecdec filter is introduced which must
be used to decode a FEC-encoded stream. As the fec parameters are
contained in the header of each data slice of the encoded stream, no
options to this filter are necessary.

ATM, FEC is only used by the udp sender/receiver, but other protocols
can be easily changed to use FEC as well.

This new code is still experimental, lacks documentation and the fec
parameters can currently only be changed by editing the source code.

13 years agoURL/UDPv6 support for the UDP sender.
Gerrit Renker [Sat, 28 Feb 2009 12:40:01 +0000 (13:40 +0100)]
URL/UDPv6 support for the UDP sender.

This adds support for URL strings to support IPv4/IPv6 addresses, hostnames,
and optional port numbers to the UDP sender. The syntax is based on RFC 3986,
example URL strings to be used with the 'add'/'delete' commands are: # host:port # host with default port 8000
     localhost # hostname (for IPv4 or IPv6 host)
     localhost:8001 # hostname with port
     [::1]:8000  # same, but different syntax
     [badc0de::1] # IPv6 host with default port 8000

The 'delete' command now also supports port-wildcarding, i.e. not specifying
the port in the 'delete' command removes all targets whose host names match.

The UDP sender has been tested to function with IPv6, including multicasting:
 * server: para_server --udp_target=[ff05::beef]:8000 --udp_mcast_iface=eth1
 * client: para_audiod -F -D -r 'ogg:udp -i ff05::beef -I eth0'

13 years agoAuxiliary functions to parse and validate parts of URIs.
Gerrit Renker [Sat, 28 Feb 2009 12:40:01 +0000 (13:40 +0100)]
Auxiliary functions to parse and validate parts of URIs.

To support URI syntax in the manner of RFC 3986, this adds a self-contained set
of functions to parse (parts of) URIs and to validate such parts using basic
syntax checks.

To avoid blocking while resolving DNS strings, strings that do not have the
characteristics of native IPv4/v6 address strings always pass; a wrong hostname
will then be detected later when connecting.

Note: strictly speaking, this does not deal with URIs, since the 'scheme' part
      is missing and only the "locator" part is parsed. It is possible to extend
      this later, using something like dccp://host[:port], http://host[:port],
      or udp://host[:port] to specify the transport protocols of paraslash.

13 years agoaacdec: Do not fail on emtpy buffers.
Andre Noll [Sat, 28 Feb 2009 11:45:51 +0000 (12:45 +0100)]
aacdec: Do not fail on emtpy buffers.

13 years agoalsa: Do not fail if sw params could not be installed.
Andre Noll [Mon, 23 Feb 2009 13:24:42 +0000 (14:24 +0100)]
alsa: Do not fail if sw params could not be installed.

This is not fatal, so just print a warining.

13 years agoSimplify client_open().
Andre Noll [Fri, 20 Feb 2009 21:47:06 +0000 (22:47 +0100)]
Simplify client_open().

Use the file_exists() helper and add missing documenation for
the loglevel arg.

13 years agoMerge commit 'fml/master'
Andre Noll [Mon, 16 Feb 2009 22:38:16 +0000 (23:38 +0100)]
Merge commit 'fml/master'

13 years agoPut IPv4-specific parts inside the ACL subsystem
Gerrit Renker [Sat, 7 Feb 2009 19:16:50 +0000 (20:16 +0100)]
Put IPv4-specific parts inside the ACL subsystem

The ACL subsystem performs access validation based on IPv4 address /
netmask pairs. Since the internals of this system are exposed via
struct sender_command_data, other subsystems can only use IPv4.

This patch migrates the IPv4-specific parts of the ACL subsystem inside
that system and replaces the 'struct in_addr' address with a host
string. A subsequent patch converts the remaining subsystems to also
use strings instead of AF-dependent addresses.

For the present purpose the string size (fixed) is over-dimensioned,
since a valid IPv4 address contains at most 15 = 4*3 + 3 + 1 bytes
(including the 3 dots and the '\0'). The size should also be sufficient
for hostnames, since RFC 1123, 2.1 suggests a maximum length of 255.

Since the conversion string -> struct in_addr now happens later,
syntax checks have been added for argument strings.

13 years agoTypos
Gerrit Renker [Sat, 7 Feb 2009 18:06:31 +0000 (19:06 +0100)]

Found when rtfm.

13 years agoAllow to specify UDPv4/6 multicast interface
Gerrit Renker [Sat, 14 Feb 2009 17:36:42 +0000 (18:36 +0100)]
Allow to specify UDPv4/6 multicast interface

Using a Posix function, this allows to specify outgoing/incoming
multicast interfaces, e.g.

  para_server --udp_target= --udp_mcast_iface=eth1


  para_audiod -D -r 'ogg:udp -i -I eth0'

The option simplifies multicast streaming, which is now possible without
having to set a multicast route when there is more than one network interface.

This option works unconditionally for UDPv6. For UDPv4 it is only enabled
on hosts that support `struct ip_mreqn', support for which is detected
via configure.

On OSes that do not support this struct, a warning message is printed;
while it is possible to add the same functionality also in those cases,
it would complicate the implementation and thus has been left out.

13 years agoSupport for UDPv4/v6 multicast streaming
Gerrit Renker [Mon, 2 Feb 2009 19:58:49 +0000 (20:58 +0100)]
Support for UDPv4/v6 multicast streaming

This provides self-contained support for UDPv4/v6 multicast:
 * receiver joins multicast v4/v6 address;
 * sender, on encountering a multicast address, sets TTL/IPv6
   number of multicast hops, and (as a precaution) enables looping
   back of multicast packets.

The use of the sender is still restricted to UDPv4, since it is also
necessary to perform changes to the (IPv4-based) udp_target struct,
which should be done in a separate patch.

13 years agoFix a typo in gui.c.
Andre Noll [Sun, 15 Feb 2009 17:12:19 +0000 (18:12 +0100)]
Fix a typo in gui.c.

14 years agoMerge commit 'fml/master'
Andre Noll [Wed, 11 Feb 2009 22:56:24 +0000 (23:56 +0100)]
Merge commit 'fml/master'

14 years agoFix the ROUND_UP macro.
Andre Noll [Wed, 11 Feb 2009 21:18:17 +0000 (22:18 +0100)]
Fix the ROUND_UP macro.


14 years agoDo not allocate too much space for the mp3 chunk table.
Andre Noll [Wed, 11 Feb 2009 21:17:42 +0000 (22:17 +0100)]
Do not allocate too much space for the mp3 chunk table.

The chunk_table contains an array of uint32_t values.