mirror of
https://github.com/moparisthebest/curl
synced 2025-03-11 07:39:50 -04:00
rtsp: move protocol code to dedicated file
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.
This commit is contained in:
parent
970587567e
commit
cc9e4321d3
35
lib/rtsp.c
35
lib/rtsp.c
@ -36,6 +36,8 @@
|
|||||||
#include "rtsp.h"
|
#include "rtsp.h"
|
||||||
#include "rawstr.h"
|
#include "rawstr.h"
|
||||||
#include "curl_memory.h"
|
#include "curl_memory.h"
|
||||||
|
#include "select.h"
|
||||||
|
#include "connect.h"
|
||||||
|
|
||||||
#define _MPRINTF_REPLACE /* use our functions only */
|
#define _MPRINTF_REPLACE /* use our functions only */
|
||||||
#include <curl/mprintf.h>
|
#include <curl/mprintf.h>
|
||||||
@ -100,6 +102,39 @@ const struct Curl_handler Curl_handler_rtsp = {
|
|||||||
PROTOPT_NONE /* flags */
|
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 Curl_rtsp_connect(struct connectdata *conn, bool *done)
|
||||||
{
|
{
|
||||||
CURLcode httpStatus;
|
CURLcode httpStatus;
|
||||||
|
@ -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
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* 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_disconnect(struct connectdata *conn, bool dead_connection);
|
||||||
|
|
||||||
CURLcode Curl_rtsp_parseheader(struct connectdata *conn, char *header);
|
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 */
|
#endif /* CURL_DISABLE_RTSP */
|
||||||
|
|
||||||
|
39
lib/url.c
39
lib/url.c
@ -2736,41 +2736,6 @@ static bool SocketIsDead(curl_socket_t sock)
|
|||||||
return ret_val;
|
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,
|
static bool IsPipeliningPossible(const struct SessionHandle *handle,
|
||||||
const struct connectdata *conn)
|
const struct connectdata *conn)
|
||||||
{
|
{
|
||||||
@ -2931,12 +2896,10 @@ ConnectionExists(struct SessionHandle *data,
|
|||||||
handles in pipeline and the connection isn't already marked in
|
handles in pipeline and the connection isn't already marked in
|
||||||
use */
|
use */
|
||||||
bool dead;
|
bool dead;
|
||||||
#ifndef CURL_DISABLE_RTSP
|
|
||||||
if(check->handler->protocol & CURLPROTO_RTSP)
|
if(check->handler->protocol & CURLPROTO_RTSP)
|
||||||
/* RTSP is a special case due to RTP interleaving */
|
/* RTSP is a special case due to RTP interleaving */
|
||||||
dead = RTSPConnIsDead(check);
|
dead = Curl_rtsp_connisdead(check);
|
||||||
else
|
else
|
||||||
#endif /*CURL_DISABLE_RTSP*/
|
|
||||||
dead = SocketIsDead(check->sock[FIRSTSOCKET]);
|
dead = SocketIsDead(check->sock[FIRSTSOCKET]);
|
||||||
|
|
||||||
if(dead) {
|
if(dead) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user