[raop] Test to see if reconnecting helps with issue #734

This commit is contained in:
ejurgensen 2020-01-24 14:08:17 -08:00
parent b565df1d87
commit 2dc9f8826b
1 changed files with 36 additions and 13 deletions

View File

@ -209,6 +209,7 @@ struct raop_session
char *devname;
char *address;
unsigned short port;
int family;
int volume;
@ -1851,18 +1852,11 @@ session_free(struct raop_session *rs)
close(rs->server_fd);
if (rs->realm)
free(rs->realm);
if (rs->nonce)
free(rs->nonce);
if (rs->session)
free(rs->session);
if (rs->address)
free(rs->address);
if (rs->devname)
free(rs->devname);
free(rs->realm);
free(rs->nonce);
free(rs->session);
free(rs->address);
free(rs->devname);
free(rs);
}
@ -1914,7 +1908,7 @@ deferred_session_failure(struct raop_session *rs)
}
static void
raop_rtsp_close_cb(struct evrtsp_connection *evcon, void *arg)
raop_rtsp_fail_cb(struct evrtsp_connection *evcon, void *arg)
{
struct raop_session *rs = arg;
@ -1923,6 +1917,34 @@ raop_rtsp_close_cb(struct evrtsp_connection *evcon, void *arg)
deferred_session_failure(rs);
}
static void
raop_rtsp_close_cb(struct evrtsp_connection *evcon, void *arg)
{
struct raop_session *rs = arg;
struct evrtsp_connection *newcon;
// Try to reconnect FIXME does this block?
newcon = evrtsp_connection_new(rs->address, rs->port);
if (!newcon)
{
DPRINTF(E_LOG, L_RAOP, "RTSP reconnect to device '%s' failed\n", rs->devname);
deferred_session_failure(rs);
return;
}
DPRINTF(E_INFO, L_RAOP, "RTSP reconnect to '%s' succeeded\n", rs->devname);
evrtsp_connection_set_closecb(rs->ctrl, NULL, NULL);
evrtsp_connection_free(rs->ctrl);
rs->ctrl = newcon;
evrtsp_connection_set_base(rs->ctrl, evbase_player);
// If the connection is closed again we don't want to try a reconnect
evrtsp_connection_set_closecb(rs->ctrl, raop_rtsp_fail_cb, rs);
}
static void
session_teardown_cb(struct evrtsp_request *req, void *arg)
{
@ -2122,6 +2144,7 @@ session_make(struct output_device *rd, int family, int callback_id, bool only_pr
rs->devname = strdup(rd->name);
rs->address = strdup(address);
rs->port = port;
rs->family = family;
rs->volume = rd->volume;