pulseaudio/src/modules/rtp/meson.build
Mohamed Akram 31b6ecd507 raop: fix auth, reconnect, apple tv compat
The digest was not used in subsequent requests resulting in a 401 from
ANNOUNCE. This was changed so that the Authorization header is present
on all requests.

Reconnection did not handle the case where pa_rtsp_connect returned
immediately with a failure. This error was also not checked by
pa_raop_client_authenticate and pa_raop_client_announce, which caused
the raop client to be permanently stuck on failure as it assumed the
connection was ongoing. Similarly, a failure in SETUP was also not
reported and caused the client to be stuck. These issues were fixed and
conflicting disconnects/reconnects that caused crashes due to race
conditions were removed. We also avoid unloading the module due to a
failure since it might be recoverable. If a device is not accessible
anymore, the discover module will remove it.

Apple TV requires that the timing port is open and responding before
a SETUP response is provided, otherwise a 500 error is returned after
some time. This was added and the connection callback is called earlier
so that the sink loop can respond to timing requests in this phase. A
keep-alive request was also added as it is required by Apple TV to
prevent the stream from stopping.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/820>
2024-06-22 01:41:40 +04:00

37 lines
791 B
Meson

librtp_sources = [
'rtp-common.c',
'sdp.c',
'sap.c',
'rtsp-client.c',
'headerlist.c',
'rtsp-util.c'
]
librtp_headers = [
'rtp.h',
'sdp.h',
'sap.h',
'rtsp-client.h',
'headerlist.h',
'rtsp-util.h'
]
if have_gstreamer
librtp_sources += 'rtp-gstreamer.c'
else
librtp_sources += 'rtp-native.c'
endif
librtp = shared_library('rtp',
librtp_sources,
librtp_headers,
c_args : [pa_c_args, server_c_args],
link_args : [nodelete_link_args],
include_directories : [configinc, topinc],
dependencies : [libpulse_dep, libpulsecommon_dep, libpulsecore_dep, libatomic_ops_dep, gst_dep, gstapp_dep, gstrtp_dep, gio_dep, openssl_dep],
install : true,
install_rpath : privlibdir,
install_dir : modlibexecdir,
)
librtp_dep = declare_dependency(link_with: librtp)