aboutsummaryrefslogtreecommitdiffstats
path: root/ffserver.c
diff options
context:
space:
mode:
authorReynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>2014-02-13 15:03:52 -0300
committerReynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>2014-02-14 14:31:42 -0300
commit87079bd055e3c6e97c0c04c9a26157f99478bdba (patch)
tree14c6d317918d6550d107a90d90e2b418573c3046 /ffserver.c
parent720530e52aec24cd46d16e5c84052d7c1018e5ba (diff)
downloadffmpeg-87079bd055e3c6e97c0c04c9a26157f99478bdba.tar.gz
ffserver: merge RTSP's teardown & pause routines
They were basically the same. Signed-off-by: Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>
Diffstat (limited to 'ffserver.c')
-rw-r--r--ffserver.c45
1 files changed, 14 insertions, 31 deletions
diff --git a/ffserver.c b/ffserver.c
index bed71b64c2..c2d2180e8c 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -287,8 +287,7 @@ static void rtsp_cmd_describe(HTTPContext *c, const char *url);
static void rtsp_cmd_options(HTTPContext *c, const char *url);
static void rtsp_cmd_setup(HTTPContext *c, const char *url, RTSPMessageHeader *h);
static void rtsp_cmd_play(HTTPContext *c, const char *url, RTSPMessageHeader *h);
-static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h);
-static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h);
+static void rtsp_cmd_interrupt(HTTPContext *c, const char *url, RTSPMessageHeader *h, int pause_only);
/* SDP handling */
static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
@@ -2962,9 +2961,9 @@ static int rtsp_parse_request(HTTPContext *c)
else if (!strcmp(cmd, "PLAY"))
rtsp_cmd_play(c, url, header);
else if (!strcmp(cmd, "PAUSE"))
- rtsp_cmd_pause(c, url, header);
+ rtsp_cmd_interrupt(c, url, header, 1);
else if (!strcmp(cmd, "TEARDOWN"))
- rtsp_cmd_teardown(c, url, header);
+ rtsp_cmd_interrupt(c, url, header, 0);
else
rtsp_reply_error(c, RTSP_STATUS_METHOD);
@@ -3318,7 +3317,7 @@ static void rtsp_cmd_play(HTTPContext *c, const char *url, RTSPMessageHeader *h)
avio_printf(c->pb, "\r\n");
}
-static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h)
+static void rtsp_cmd_interrupt(HTTPContext *c, const char *url, RTSPMessageHeader *h, int pause_only)
{
HTTPContext *rtp_c;
@@ -3328,29 +3327,14 @@ static void rtsp_cmd_pause(HTTPContext *c, const char *url, RTSPMessageHeader *h
return;
}
- if (rtp_c->state != HTTPSTATE_SEND_DATA &&
- rtp_c->state != HTTPSTATE_WAIT_FEED) {
- rtsp_reply_error(c, RTSP_STATUS_STATE);
- return;
- }
-
- rtp_c->state = HTTPSTATE_READY;
- rtp_c->first_pts = AV_NOPTS_VALUE;
- /* now everything is OK, so we can send the connection parameters */
- rtsp_reply_header(c, RTSP_STATUS_OK);
- /* session ID */
- avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id);
- avio_printf(c->pb, "\r\n");
-}
-
-static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader *h)
-{
- HTTPContext *rtp_c;
-
- rtp_c = find_rtp_session_with_url(url, h->session_id);
- if (!rtp_c) {
- rtsp_reply_error(c, RTSP_STATUS_SESSION);
- return;
+ if (pause_only) {
+ if (rtp_c->state != HTTPSTATE_SEND_DATA &&
+ rtp_c->state != HTTPSTATE_WAIT_FEED) {
+ rtsp_reply_error(c, RTSP_STATUS_STATE);
+ return;
+ }
+ rtp_c->state = HTTPSTATE_READY;
+ rtp_c->first_pts = AV_NOPTS_VALUE;
}
/* now everything is OK, so we can send the connection parameters */
@@ -3359,11 +3343,10 @@ static void rtsp_cmd_teardown(HTTPContext *c, const char *url, RTSPMessageHeader
avio_printf(c->pb, "Session: %s\r\n", rtp_c->session_id);
avio_printf(c->pb, "\r\n");
- /* abort the session */
- close_connection(rtp_c);
+ if (!pause_only)
+ close_connection(rtp_c);
}
-
/********************************************************************/
/* RTP handling */