tcp: Convert tcpclientsink to new helpers.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1105>
This commit is contained in:
Doug Nazar 2021-04-19 15:54:18 -04:00 committed by GStreamer Marge Bot
parent 13743353cb
commit dd12c9b230

View file

@ -283,54 +283,47 @@ gst_tcp_client_sink_start (GstBaseSink * bsink)
{ {
GstTCPClientSink *this = GST_TCP_CLIENT_SINK (bsink); GstTCPClientSink *this = GST_TCP_CLIENT_SINK (bsink);
GError *err = NULL; GError *err = NULL;
GInetAddress *addr; GList *addrs;
GSocketAddress *saddr; GList *cur_addr;
GResolver *resolver; GSocketAddress *saddr = NULL;
if (GST_OBJECT_FLAG_IS_SET (this, GST_TCP_CLIENT_SINK_OPEN)) if (GST_OBJECT_FLAG_IS_SET (this, GST_TCP_CLIENT_SINK_OPEN))
return TRUE; return TRUE;
/* look up name if we need to */ addrs =
addr = g_inet_address_new_from_string (this->host); tcp_get_addresses (GST_ELEMENT (this), this->host, this->cancellable,
if (!addr) {
GList *results;
resolver = g_resolver_get_default ();
results =
g_resolver_lookup_by_name (resolver, this->host, this->cancellable,
&err); &err);
if (!results) if (!addrs)
goto name_resolve; goto name_resolve;
addr = G_INET_ADDRESS (g_object_ref (results->data));
g_resolver_free_addresses (results);
g_object_unref (resolver);
}
#ifndef GST_DISABLE_GST_DEBUG
{
gchar *ip = g_inet_address_to_string (addr);
GST_DEBUG_OBJECT (this, "IP address for host %s is %s", this->host, ip);
g_free (ip);
}
#endif
saddr = g_inet_socket_address_new (addr, this->port);
g_object_unref (addr);
/* create sending client socket */
GST_DEBUG_OBJECT (this, "opening sending client socket to %s:%d", this->host, GST_DEBUG_OBJECT (this, "opening sending client socket to %s:%d", this->host,
this->port); this->port);
cur_addr = addrs;
while (cur_addr) {
/* iterate over addresses until one works */
this->socket = this->socket =
g_socket_new (g_socket_address_get_family (saddr), G_SOCKET_TYPE_STREAM, tcp_create_socket (GST_ELEMENT (this), &cur_addr, this->port, &saddr,
G_SOCKET_PROTOCOL_TCP, &err); &err);
if (!this->socket) if (!this->socket)
goto no_socket; break;
GST_DEBUG_OBJECT (this, "opened sending client socket"); GST_DEBUG_OBJECT (this, "opened sending client socket");
/* connect to server */ /* connect to server */
if (!g_socket_connect (this->socket, saddr, this->cancellable, &err)) if (g_socket_connect (this->socket, saddr, this->cancellable, &err))
break;
/* failed to connect, release and try next address... */
g_clear_object (&this->socket);
g_clear_object (&saddr);
}
g_list_free_full (addrs, g_object_unref);
if (!this->socket)
goto no_socket;
/* we should only have a valid saddr if connect was successful */
if (!saddr)
goto connect_failed; goto connect_failed;
g_object_unref (saddr); g_object_unref (saddr);
@ -345,19 +338,17 @@ no_socket:
GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL), GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
("Failed to create socket: %s", err->message)); ("Failed to create socket: %s", err->message));
g_clear_error (&err); g_clear_error (&err);
g_object_unref (saddr);
return FALSE; return FALSE;
} }
name_resolve: name_resolve:
{ {
if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
GST_DEBUG_OBJECT (this, "Cancelled name resolval"); GST_DEBUG_OBJECT (this, "Cancelled name resolution");
} else { } else {
GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL), GST_ELEMENT_ERROR (this, RESOURCE, OPEN_READ, (NULL),
("Failed to resolve host '%s': %s", this->host, err->message)); ("Failed to resolve host '%s': %s", this->host, err->message));
} }
g_clear_error (&err); g_clear_error (&err);
g_object_unref (resolver);
return FALSE; return FALSE;
} }
connect_failed: connect_failed:
@ -370,7 +361,6 @@ connect_failed:
err->message)); err->message));
} }
g_clear_error (&err); g_clear_error (&err);
g_object_unref (saddr);
/* pretend we opened ok for proper cleanup to happen */ /* pretend we opened ok for proper cleanup to happen */
GST_OBJECT_FLAG_SET (this, GST_TCP_CLIENT_SINK_OPEN); GST_OBJECT_FLAG_SET (this, GST_TCP_CLIENT_SINK_OPEN);
gst_tcp_client_sink_stop (GST_BASE_SINK (this)); gst_tcp_client_sink_stop (GST_BASE_SINK (this));