diff --git a/ChangeLog b/ChangeLog index 7e1acb179f..e65740a3ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-05-14 Wim Taymans + + * 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. + 2007-05-14 Wim Taymans * gst/rtp/gstrtpvorbisdepay.c: (gst_rtp_vorbis_depay_process): diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c index e1e2aea613..88c606aa60 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; } }