Command handling:
1. Changed mpd_read_cb() to delegate to mpd_process_line() for each received
command line.
2. mpd_process_line() handles idle state and command list state and delegates
to mpd_process_command() to handle each command line.
If the command was successful it sends OK to the client according the the
command list state.
Error responses are sent by mpd_process_command().
3. mpd_process_command() parses the args and delegates to the individual
command handler.
mpd_input_filter:
1. Removed handling of command lists. They are handled by mpd_process_line().
2. Return BEV_OK if there's at least one complete line of input even if there's
more data in the input buffer.
Idle/noidle:
1. Changed mpd_command_idle() to never write OK to the output buffer.
Instead it is the responsibility of the caller to decide on the response.
2. Removed mpd_command_noidle() instead it is handled in mpd_process_line().
If the client is not in idle state noidle is ignored (no response sent)
If the client is in idle state then it changes idle state to false and sends
OK as the response to the idle command.
Command lists:
1. Added command list state to the client context so commands in the list are
buffered and only executed after receiving command_list_end.
Connection state:
1. Added is_closing flag in the client context to ignore messages received
after freeing the events buffer in intent to close the client connection.
Command arguments parsing:
1. Updated COMMAND_ARGV_MAX to 70 to match current MPD.
2. Changed mpd_pars_range_arg to handle open-ended range.
Command pause:
1. pause is ignored in stopped state instead returning error.
Command move:
1. Changed mpd_command_move() to support moving a range.
2. Added db_queue_move_bypos_range() to support moving a range.
Command password:
1. Password authentication flag set in handler mpd_command_password() instead
of in command processor.
Config:
1. Added config value: "max_command_list_size".
The maximum allowed size of buffered commands in command list.
Maintain the binary limit, and use the default MPD uses too. This comes
in handy when we are going to send binary responses such as in PR #1780
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Return MPD-compatible output of plugin type "httpd" when
enable_http_plugin in mpd section of the config is set.
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
The plugin key is used by some clients to determine whether local
playback is possible via HTTP stream, so mimick it.
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Simply casting the speaker ID from a 64-bits int to an unsigned short
and hoping that there will be no clashes is just optimistic. Use an
ascending number instead which is what MPD does too. The MPD server
specifically documents no persistence in these IDs so we can simply
enumerate the speakers to meet the requirements.
Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Seems EOF was not marked towards the ffmpeg filtergraph via a NULL frame to
av_buffersrc_add_frame(). This meant that the end of the track would get
stuck in the filters.
Fixes#1787
Adds handling of the username from Apple Music that contain colon. Example:
iTunes_Music/1.4.5 (Macintosh; OS X 14.5) AppleWebKit/618.2.12.11.6 build/36 (dt:1):password
Closes#1778