]> granicus.if.org Git - curl/commitdiff
rtsp: move protocol code to dedicated file
authorDaniel Stenberg <daniel@haxx.se>
Wed, 23 Mar 2011 16:27:58 +0000 (17:27 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 23 Mar 2011 16:27:58 +0000 (17:27 +0100)
The RTSP-specific function for checking for "dead" connection is better
located in rtsp.c. The code using this is now written without #ifdefs as
the function call is instead turned into a macro (in rtsp.h) when RTSP
is disabled.

lib/rtsp.c
lib/rtsp.h
lib/url.c

index c39ae011e803de753c4e5a75c5f8d89206b5a37d..52cf5efc7e5e3c08360d38d79e7ce51f720ad297 100644 (file)
@@ -36,6 +36,8 @@
 #include "rtsp.h"
 #include "rawstr.h"
 #include "curl_memory.h"
+#include "select.h"
+#include "connect.h"
 
 #define _MPRINTF_REPLACE /* use our functions only */
 #include <curl/mprintf.h>
@@ -100,6 +102,39 @@ const struct Curl_handler Curl_handler_rtsp = {
   PROTOPT_NONE                          /* flags */
 };
 
+/*
+ * The server may send us RTP data at any point, and RTSPREQ_RECEIVE does not
+ * want to block the application forever while receiving a stream. Therefore,
+ * we cannot assume that an RTSP socket is dead just because it is readable.
+ *
+ * Instead, if it is readable, run Curl_getconnectinfo() to peek at the socket
+ * and distinguish between closed and data.
+ */
+bool Curl_rtsp_connisdead(struct connectdata *check)
+{
+  int sval;
+  bool ret_val = TRUE;
+
+  sval = Curl_socket_ready(check->sock[FIRSTSOCKET], CURL_SOCKET_BAD, 0);
+  if(sval == 0) {
+    /* timeout */
+    ret_val = FALSE;
+  }
+  else if (sval & CURL_CSELECT_ERR) {
+    /* socket is in an error state */
+    ret_val = TRUE;
+  }
+  else if (sval & CURL_CSELECT_IN) {
+    /* readable with no error. could be closed or could be alive */
+    curl_socket_t connectinfo =
+      Curl_getconnectinfo(check->data, &check);
+    if(connectinfo != CURL_SOCKET_BAD)
+      ret_val = FALSE;
+  }
+
+  return ret_val;
+}
+
 CURLcode Curl_rtsp_connect(struct connectdata *conn, bool *done)
 {
   CURLcode httpStatus;
index 82e07068d535e6b1f33b2fdf457033c02e8bab32..2e2074edc444b03954c1c058623bdd1e6fd3673d 100644 (file)
@@ -8,7 +8,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution. The terms
@@ -46,6 +46,11 @@ CURLcode Curl_rtsp_connect(struct connectdata *conn, bool *done);
 CURLcode Curl_rtsp_disconnect(struct connectdata *conn, bool dead_connection);
 
 CURLcode Curl_rtsp_parseheader(struct connectdata *conn, char *header);
+bool Curl_rtsp_connisdead(struct connectdata *check);
+
+#else
+/* disabled */
+#define Curl_rtsp_connisdead(x) TRUE
 
 #endif /* CURL_DISABLE_RTSP */
 
index 47ac725f3830d0dbe7dbe890568803f2ea4012b6..106d4e7ec93938eeae20fbe7ec1b80bf897a54b1 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -2736,41 +2736,6 @@ static bool SocketIsDead(curl_socket_t sock)
   return ret_val;
 }
 
-#ifndef CURL_DISABLE_RTSP
-/*
- * The server may send us RTP data at any point, and RTSPREQ_RECEIVE does not
- * want to block the application forever while receiving a stream. Therefore,
- * we cannot assume that an RTSP socket is dead just because it is readable.
- *
- * Instead, if it is readable, run Curl_getconnectinfo() to peek at the socket
- * and distinguish between closed and data.
- */
-static bool RTSPConnIsDead(struct connectdata *check)
-{
-  int sval;
-  bool ret_val = TRUE;
-
-  sval = Curl_socket_ready(check->sock[FIRSTSOCKET], CURL_SOCKET_BAD, 0);
-  if(sval == 0) {
-    /* timeout */
-    ret_val = FALSE;
-  }
-  else if (sval & CURL_CSELECT_ERR) {
-    /* socket is in an error state */
-    ret_val = TRUE;
-  }
-  else if (sval & CURL_CSELECT_IN) {
-    /* readable with no error. could be closed or could be alive */
-    curl_socket_t connectinfo =
-      Curl_getconnectinfo(check->data, &check);
-    if(connectinfo != CURL_SOCKET_BAD)
-      ret_val = FALSE;
-  }
-
-  return ret_val;
-}
-#endif /* CURL_DISABLE_RTSP */
-
 static bool IsPipeliningPossible(const struct SessionHandle *handle,
                                  const struct connectdata *conn)
 {
@@ -2931,12 +2896,10 @@ ConnectionExists(struct SessionHandle *data,
          handles in pipeline and the connection isn't already marked in
          use */
       bool dead;
-#ifndef CURL_DISABLE_RTSP
       if(check->handler->protocol & CURLPROTO_RTSP)
         /* RTSP is a special case due to RTP interleaving */
-        dead = RTSPConnIsDead(check);
+        dead = Curl_rtsp_connisdead(check);
       else
-#endif /*CURL_DISABLE_RTSP*/
         dead = SocketIsDead(check->sock[FIRSTSOCKET]);
 
       if(dead) {