diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2007-05-14 16:19:58 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2007-05-14 16:19:58 +0000 |
commit | 789ef04027fe1bc1cea3811104ddde44f4b3d50a (patch) | |
tree | d93bf36317c2f86627a0f9406bcbe47439d50b34 /gst | |
parent | 4333477d0c3e5a23da50c10c165c9c1ce1b3d57e (diff) |
gst/rtsp/gstrtspsrc.c: When we try to execute a method that is not supported by the server, don't error out but remov...
Original commit message from CVS:
* gst/rtsp/gstrtspsrc.c: (gst_rtspsrc_send):
When we try to execute a method that is not supported by the server,
don't error out but remove the method from the accepted methods so that
we never try to perform this method again.
Diffstat (limited to 'gst')
-rw-r--r-- | gst/rtsp/gstrtspsrc.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index e1e2aea6..88c606aa 100644 --- a/gst/rtsp/gstrtspsrc.c +++ b/gst/rtsp/gstrtspsrc.c @@ -2772,9 +2772,14 @@ gst_rtspsrc_send (GstRTSPSrc * src, RTSPMessage * request, RTSPStatusCode int_code = RTSP_STS_OK; RTSPResult res; gboolean retry; + RTSPMethod method; do { retry = FALSE; + + /* save method so we can disable it when the server complains */ + method = request->type_data.request.method; + if ((res = gst_rtspsrc_try_send (src, request, response, &int_code)) < 0) goto error; @@ -2804,11 +2809,20 @@ error: } error_response: { + res = RTSP_ERROR; + switch (response->type_data.response.code) { case RTSP_STS_NOT_FOUND: GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL), ("%s", response->type_data.response.reason)); break; + case RTSP_STS_NOT_ACCEPTABLE: + case RTSP_STS_NOT_IMPLEMENTED: + GST_WARNING_OBJECT (src, "got NOT IMPLEMENTED, disable method %s", + rtsp_method_as_text (method)); + src->methods &= ~method; + res = RTSP_OK; + break; default: GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL), ("Got error response: %d (%s).", response->type_data.response.code, @@ -2817,7 +2831,7 @@ error_response: } /* we return FALSE so we should unset the response ourselves */ rtsp_message_unset (response); - return RTSP_ERROR; + return res; } } |