Commit message (Collapse) | Author | Age | Files | Lines | ||
---|---|---|---|---|---|---|
... | ||||||
* | | Merge branch 'v0.16.x' | Max Kellermann | 2011-09-22 | 7 | -18/+81 | |
|\| | | | | | | | | | Conflicts: src/player_thread.c | |||||
| * | decoder_api: emulate SEEK command for initial seek to CUE track | Max Kellermann | 2011-09-22 | 5 | -16/+74 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | When playing a CUE track, the player thread waited for the decoder to become ready, and then sent a SEEK command to the beginning of the CUE track. If that is near the start of the song file, and the track is short enough, the decoder could have finished decoding already at that point, and seeking fails. This commit makes this initial seek more robust: instead of letting the player thread deal with the difficult timings, let the decoder API emulate a SEEK command, and return it to the decoder plugin, as soon as the plugin finishes its initialization. | |||||
| * | decoder_internal.h: more API documentation | Max Kellermann | 2011-09-22 | 1 | -0/+5 | |
| | | ||||||
| * | utils: uri.h: fix a typo: "schema" | Jonathan Neuschäfer | 2011-09-21 | 1 | -1/+1 | |
| | | ||||||
| * | configure.ac: fix --enable-id3 help string | Max Kellermann | 2011-09-20 | 1 | -1/+1 | |
| | | ||||||
* | | protocol: drop G_GNUC_PURE from client_message_dup | Jonathan Neuschäfer | 2011-09-21 | 1 | -1/+1 | |
| | | ||||||
* | | utils: mark sockaddr_to_string() as G_GNUC_MALLOC | Jonathan Neuschäfer | 2011-09-21 | 1 | -0/+1 | |
| | | ||||||
* | | Simplify setsockopt() casting workaround | Dan McGee | 2011-09-21 | 2 | -20/+6 | |
| | | | | | | | | | | | | | | | | | | On Win32, the third setsockopt parameter has type (char *) while on POSIX systems it is (void *). However, given that it is a no-op cast to go from a char pointer to a void pointer, we can cast to a char pointer (with a possible const modifier) on all platforms and satisfy the compiler. Signed-off-by: Dan McGee <dan@archlinux.org> | |||||
* | | tcp_connect: generic library for establishing TCP connections | Max Kellermann | 2011-09-20 | 4 | -0/+524 | |
| | | ||||||
* | | io_thread: add function _timeout_add() | Max Kellermann | 2011-09-20 | 2 | -0/+13 | |
| | | | | | | | | | | Same as _timeout_add_seconds(), but this one has millisecond resolution. | |||||
* | | io_thread: _timeout_add_seconds() returns GSource* | Max Kellermann | 2011-09-20 | 2 | -5/+5 | |
| | | | | | | | | The numeric ID isn't so useful. | |||||
* | | server_socket: use resolve_host_port() instead of getaddrinfo() | Max Kellermann | 2011-09-20 | 3 | -17/+9 | |
| | | | | | | | | Allow port specification in "bind_to_address" settings. | |||||
* | | resolver: add function resolve_host_port() | Max Kellermann | 2011-09-20 | 4 | -2/+157 | |
| | | ||||||
* | | socket_util: move sockaddr_to_string() to resolver.c | Max Kellermann | 2011-09-20 | 8 | -65/+128 | |
| | | ||||||
* | | rtsp_client, output/raop: use close_socket() instead of close() | Max Kellermann | 2011-09-20 | 2 | -5/+7 | |
| | | ||||||
* | | tcp_socket, udp_server: use g_io_channel_new_socket() | Max Kellermann | 2011-09-20 | 2 | -10/+4 | |
| | | ||||||
* | | Merge branch 'v0.16.x' | Max Kellermann | 2011-09-20 | 13 | -30/+119 | |
|\| | ||||||
| * | fd_util: add function close_socket() | Max Kellermann | 2011-09-20 | 7 | -8/+26 | |
| | | | | | | | | Wrap close(), use closesocket() on WIN32/WinSock. | |||||
| * | fd_util: check HAVE_INOTIFY_INIT in header | Max Kellermann | 2011-09-20 | 1 | -0/+4 | |
| | | | | | | | | Don't provide the prototype if inotify_init() was not detected. | |||||
| * | fd_util: include check.h, verify config.h was included | Max Kellermann | 2011-09-20 | 1 | -0/+2 | |
| | | ||||||
| * | glib_socket.h: wrap g_io_channel_*_new() calls portably | Max Kellermann | 2011-09-20 | 6 | -16/+49 | |
| | | | | | | | | | | The server_socket library (used by the httpd output plugin) didn't check for WIN32, that's fixed now. | |||||
| * | configure.ac: add option --enable-solaris-output | Max Kellermann | 2011-09-19 | 3 | -4/+34 | |
| | | | | | | | | | | Allow enabling the plugin explicitly without running Solaris, to test the build. | |||||
| * | configure.ac: fix solaris result display | Max Kellermann | 2011-09-19 | 2 | -2/+4 | |
| | | | | | | | | Wrong variable name. | |||||
* | | Set socket TCP keepalive option on incoming connections | Dan McGee | 2011-09-19 | 3 | -2/+24 | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a connected host disappears without our knowledge, as can happen over wireless or a hibernating machine, we continue to hold the port open waiting for messages. Because we never try to send anything down this now-broken pipe, the connection will sit idle taking up a slot in our allowed incoming connections list. If enough of these happen, an unintended Denial of Service takes place, where all connection slots are filled with now-broken, never ending connections. Setting the TCP keepalive option at least allows these to time out after the default two hours, which is sufficient in the non-malicious case. Signed-off-by: Dan McGee <dan@archlinux.org> | |||||
* | | output_plugin: the plugin allocates the audio_output object | Max Kellermann | 2011-09-19 | 32 | -552/+830 | |
| | | | | | | | | | | | | Pass audio_output objects around instead of void pointers. This will give some more control to the plugin, and prepares for non-blocking audio outputs. | |||||
* | | Makefile.am: rename SPARSE_SOURCES to SPARSE_SRC | Max Kellermann | 2011-09-19 | 1 | -2/+2 | |
| | | | | | | | | Work around automake warning. | |||||
* | | output/roar: check return values | Max Kellermann | 2011-09-18 | 1 | -2/+10 | |
| | | | | | | | | Fixes gcc warnings. | |||||
* | | output/roar: unknown volume is -1, not 0 | Max Kellermann | 2011-09-18 | 1 | -1/+1 | |
| | | ||||||
* | | output/roar: move code to roar_cancel_locked() and others | Max Kellermann | 2011-09-18 | 1 | -39/+55 | |
| | | | | | | | | Wrap the locking code. | |||||
* | | output/roar: use GLib memory allocation functions | Max Kellermann | 2011-09-17 | 1 | -11/+3 | |
| | | | | | | | | GLib has a built-in OOM handler. | |||||
* | | output/roar: use config_get_block_string() for temporary | Max Kellermann | 2011-09-17 | 1 | -8/+5 | |
| | | ||||||
* | | output/roar: reorder methods | Max Kellermann | 2011-09-17 | 1 | -14/+14 | |
| | | ||||||
* | | output: rename plugin variables | Max Kellermann | 2011-09-17 | 8 | -11/+11 | |
| | | | | | | | | Consistent naming. | |||||
* | | Merge branch 'v0.16.x' | Max Kellermann | 2011-09-17 | 2 | -11/+12 | |
|\| | ||||||
| * | decoder/audiofile: include stdio header for SEEK_* defines | Tim Harder | 2011-09-17 | 1 | -0/+1 | |
| | | | | | | | | The stdio header is no longer pulled in by af_vfs.h in audiofile-0.3.0. | |||||
| * | output/pulse: improve locking | Max Kellermann | 2011-09-17 | 1 | -11/+11 | |
| | | | | | | | | | | Always lock the main loop when operating on PULSE objects. Document this. | |||||
* | | output: per-plugin header | Max Kellermann | 2011-09-17 | 39 | -35/+440 | |
| | | | | | | | | | | Move the "extern" declarations from output_list.c, for more type safety. | |||||
* | | output/pulse: don't expose internal struct in public header | Max Kellermann | 2011-09-17 | 4 | -36/+66 | |
| | | | | | | | | | | Provide _lock() and _unlock() to wrap all accesses from the mixer plugin. | |||||
* | | output/raop: don't expose internal structs in public header | Max Kellermann | 2011-09-17 | 2 | -96/+95 | |
| | | ||||||
* | | output/roar: export volume methods | Max Kellermann | 2011-09-17 | 4 | -46/+78 | |
| | | | | | | | | Use these instead of exposing the internal roar_t struct. | |||||
* | | output: rename plugin source files | Max Kellermann | 2011-09-17 | 10 | -9/+9 | |
| | | ||||||
* | | output/pulse: move code to _setup_stream() | Max Kellermann | 2011-09-17 | 1 | -15/+36 | |
| | | ||||||
* | | input/soup: wait some more before resuming the stream | Max Kellermann | 2011-09-16 | 1 | -1/+6 | |
| | | ||||||
* | | input/soup: improve error messages | Max Kellermann | 2011-09-16 | 1 | -12/+43 | |
| | | | | | | | | | | Copy the reason_phrase from the SoupMessage, and check for transport errors in the session callback. | |||||
* | | input_stream: non-blocking I/O | Max Kellermann | 2011-09-16 | 57 | -377/+653 | |
| | | | | | | | | | | | | | | | | | | Add GMutex, GCond attributes which will be used by callers to conditionally wait on the stream. Remove the (now-useless) plugin method buffer(), wait on GCond instead. Lock the input_stream before each method call. Do the same with the playlist plugins. | |||||
* | | input_plugin: add method check() | Max Kellermann | 2011-09-16 | 7 | -0/+78 | |
| | | | | | | | | | | To check for errors without reading. The decoder thread wants to do that, before it passes the input stream to the plugin. | |||||
* | | input/{soup,curl}: free unused postponed_error | Max Kellermann | 2011-09-16 | 2 | -0/+8 | |
| | | | | | | | | Fix memory leak. | |||||
* | | input/soup: move libsoup calls to the I/O thread | Max Kellermann | 2011-09-16 | 1 | -4/+25 | |
| | | | | | | | | | | libsoup's asynchronous API is not thread safe. By moving the calls into the I/O thread, several crash bugs will be fixed. | |||||
* | | input/soup: wait for _cancel_message() to complete | Max Kellermann | 2011-09-16 | 1 | -5/+21 | |
| | | | | | | | | | | Add the "complete" attribute, and set it in _session_callback(). _close() waits for it to become true. | |||||
* | | input/soup: return real GErrors to the caller | Max Kellermann | 2011-09-16 | 1 | -3/+31 | |
| | | | | | | | | | | Add attribute postponed_error, pass this GError to the caller. |