diff options
author | Martin Storsjö <martin@martin.st> | 2012-03-12 16:11:22 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-03-13 11:19:29 +0200 |
commit | cdf9108b6ae35f597f3a7932b70be7c8cf9bd743 (patch) | |
tree | 4cc6e784fe55cefe4a5266431867ac0fb4dbe880 /libavformat | |
parent | 2f96cc1fc41f2d3a349d55f9d2078694a6a87dc1 (diff) | |
download | ffmpeg-cdf9108b6ae35f597f3a7932b70be7c8cf9bd743.tar.gz |
rtsp: Resend new keepalive commands if they used stale auth
These commands are sent asynchronously, not waiting for the reply.
This reply is parsed later by ff_rtsp_tcp_read_packet or
udp_read_packet. If the reply indicates that we used stale
authentication and need to use a new nonce, resend a new keepalive
command immediately.
This is the only request sent asynchronously, so currently there's
no other command that needs to be resent in the same way.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/rtspdec.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index 80420aa42d..acae436c13 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -335,7 +335,8 @@ retry: rt->packets++; /* send dummy request to keep TCP connection alive */ - if ((av_gettime() - rt->last_cmd_time) / 1000000 >= rt->timeout / 2) { + if ((av_gettime() - rt->last_cmd_time) / 1000000 >= rt->timeout / 2 || + rt->auth_state.stale) { if (rt->server_type == RTSP_SERVER_WMS || (rt->server_type != RTSP_SERVER_REAL && rt->get_parameter_supported)) { @@ -343,6 +344,10 @@ retry: } else { ff_rtsp_send_cmd_async(s, "OPTIONS", "*", NULL); } + /* The stale flag should be reset when creating the auth response in + * ff_rtsp_send_cmd_async, but reset it here just in case we never + * called the auth code (if we didn't have any credentials set). */ + rt->auth_state.stale = 0; } return 0; |