dnl *** Curl ***
translit(dnm, m, l) AM_CONDITIONAL(USE_CURL, true)
AG_GST_CHECK_FEATURE(CURL, [Curl plugin], curl, [
- PKG_CHECK_MODULES(CURL, libcurl >= 7.21.0, [
+ PKG_CHECK_MODULES(CURL, libcurl >= 7.37.1, [
HAVE_CURL="yes"
AC_CHECK_HEADERS([unistd.h sys/socket.h sys/types.h netinet/in.h netinet/ip.h netinet/tcp.h fcntl.h], [ ], [
AC_CHECK_HEADERS([unistd.h sys/types.h winsock2.h ws2tcpip.h fcntl.h], [ ], [HAVE_CURL="no"])
return FALSE;
}
+ gst_poll_fd_init (&sink->fd);
+
return TRUE;
}
gst_curl_base_sink_got_response_notify (sink);
+ GST_OBJECT_LOCK (sink);
+ if (sink->socket_type == CURLSOCKTYPE_ACCEPT) {
+ if (!gst_poll_remove_fd (sink->fdset, &sink->fd)) {
+ sink->error = g_strdup_printf ("failed to remove fd");
+ retval = GST_FLOW_ERROR;
+ GST_OBJECT_UNLOCK (sink);
+ goto fail;
+ }
+ sink->fd.fd = -1;
+ }
+ GST_OBJECT_UNLOCK (sink);
+
return;
fail:
* the connect() call. */
static int
gst_curl_base_sink_transfer_socket_cb (void *clientp, curl_socket_t curlfd,
- curlsocktype G_GNUC_UNUSED purpose)
+ curlsocktype socket_type)
{
GstCurlBaseSink *sink;
gboolean ret = TRUE;
return 1;
}
- gst_poll_fd_init (&sink->fd);
- sink->fd.fd = curlfd;
+ GST_OBJECT_LOCK (sink);
+ sink->socket_type = socket_type;
- ret &= gst_poll_add_fd (sink->fdset, &sink->fd);
- ret &= gst_poll_fd_ctl_write (sink->fdset, &sink->fd, TRUE);
- ret &= gst_poll_fd_ctl_read (sink->fdset, &sink->fd, TRUE);
+ if (sink->fd.fd != curlfd) {
+ if (sink->fd.fd > 0 && sink->socket_type != CURLSOCKTYPE_ACCEPT) {
+ ret &= gst_poll_remove_fd (sink->fdset, &sink->fd);
+ }
+ sink->fd.fd = curlfd;
+ ret &= gst_poll_add_fd (sink->fdset, &sink->fd);
+ ret &= gst_poll_fd_ctl_write (sink->fdset, &sink->fd, TRUE);
+ ret &= gst_poll_fd_ctl_read (sink->fdset, &sink->fd, TRUE);
+ }
GST_DEBUG_OBJECT (sink, "fd: %d", sink->fd.fd);
- GST_OBJECT_LOCK (sink);
gst_curl_base_sink_setup_dscp_unlocked (sink);
GST_OBJECT_UNLOCK (sink);