tcp: Add support for IPv6
This commit is contained in:
parent
a649fe2d61
commit
6d6593b757
@ -287,17 +287,6 @@ gst_tcp_client_sink_start (GstBaseSink * bsink)
|
|||||||
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;
|
||||||
|
|
||||||
/* create sending client socket */
|
|
||||||
GST_DEBUG_OBJECT (this, "opening sending client socket to %s:%d", this->host,
|
|
||||||
this->port);
|
|
||||||
this->socket =
|
|
||||||
g_socket_new (G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_STREAM,
|
|
||||||
G_SOCKET_PROTOCOL_TCP, &err);
|
|
||||||
if (!this->socket)
|
|
||||||
goto no_socket;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (this, "opened sending client socket");
|
|
||||||
|
|
||||||
/* look up name if we need to */
|
/* look up name if we need to */
|
||||||
addr = g_inet_address_new_from_string (this->host);
|
addr = g_inet_address_new_from_string (this->host);
|
||||||
if (!addr) {
|
if (!addr) {
|
||||||
@ -323,14 +312,25 @@ gst_tcp_client_sink_start (GstBaseSink * bsink)
|
|||||||
g_free (ip);
|
g_free (ip);
|
||||||
}
|
}
|
||||||
#endif
|
#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,
|
||||||
|
this->port);
|
||||||
|
this->socket =
|
||||||
|
g_socket_new (g_socket_address_get_family (saddr), G_SOCKET_TYPE_STREAM,
|
||||||
|
G_SOCKET_PROTOCOL_TCP, &err);
|
||||||
|
if (!this->socket)
|
||||||
|
goto no_socket;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (this, "opened sending client socket");
|
||||||
|
|
||||||
/* connect to server */
|
/* connect to server */
|
||||||
saddr = g_inet_socket_address_new (addr, this->port);
|
|
||||||
if (!g_socket_connect (this->socket, saddr, this->cancellable, &err))
|
if (!g_socket_connect (this->socket, saddr, this->cancellable, &err))
|
||||||
goto connect_failed;
|
goto connect_failed;
|
||||||
|
|
||||||
g_object_unref (saddr);
|
g_object_unref (saddr);
|
||||||
g_object_unref (addr);
|
|
||||||
|
|
||||||
GST_OBJECT_FLAG_SET (this, GST_TCP_CLIENT_SINK_OPEN);
|
GST_OBJECT_FLAG_SET (this, GST_TCP_CLIENT_SINK_OPEN);
|
||||||
|
|
||||||
@ -342,6 +342,7 @@ 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:
|
||||||
@ -354,7 +355,6 @@ name_resolve:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (resolver);
|
g_object_unref (resolver);
|
||||||
gst_tcp_client_sink_stop (GST_BASE_SINK (this));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
connect_failed:
|
connect_failed:
|
||||||
@ -368,7 +368,6 @@ connect_failed:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (saddr);
|
g_object_unref (saddr);
|
||||||
g_object_unref (addr);
|
|
||||||
gst_tcp_client_sink_stop (GST_BASE_SINK (this));
|
gst_tcp_client_sink_stop (GST_BASE_SINK (this));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -338,19 +338,6 @@ gst_tcp_client_src_start (GstBaseSrc * bsrc)
|
|||||||
GSocketAddress *saddr;
|
GSocketAddress *saddr;
|
||||||
GResolver *resolver;
|
GResolver *resolver;
|
||||||
|
|
||||||
/* create receiving client socket */
|
|
||||||
GST_DEBUG_OBJECT (src, "opening receiving client socket to %s:%d",
|
|
||||||
src->host, src->port);
|
|
||||||
|
|
||||||
src->socket =
|
|
||||||
g_socket_new (G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_STREAM,
|
|
||||||
G_SOCKET_PROTOCOL_TCP, &err);
|
|
||||||
if (!src->socket)
|
|
||||||
goto no_socket;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "opened receiving client socket");
|
|
||||||
GST_OBJECT_FLAG_SET (src, GST_TCP_CLIENT_SRC_OPEN);
|
|
||||||
|
|
||||||
/* look up name if we need to */
|
/* look up name if we need to */
|
||||||
addr = g_inet_address_new_from_string (src->host);
|
addr = g_inet_address_new_from_string (src->host);
|
||||||
if (!addr) {
|
if (!addr) {
|
||||||
@ -376,13 +363,27 @@ gst_tcp_client_src_start (GstBaseSrc * bsrc)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* connect to server */
|
|
||||||
saddr = g_inet_socket_address_new (addr, src->port);
|
saddr = g_inet_socket_address_new (addr, src->port);
|
||||||
|
g_object_unref (addr);
|
||||||
|
|
||||||
|
/* create receiving client socket */
|
||||||
|
GST_DEBUG_OBJECT (src, "opening receiving client socket to %s:%d",
|
||||||
|
src->host, src->port);
|
||||||
|
|
||||||
|
src->socket =
|
||||||
|
g_socket_new (g_socket_address_get_family (saddr), G_SOCKET_TYPE_STREAM,
|
||||||
|
G_SOCKET_PROTOCOL_TCP, &err);
|
||||||
|
if (!src->socket)
|
||||||
|
goto no_socket;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (src, "opened receiving client socket");
|
||||||
|
GST_OBJECT_FLAG_SET (src, GST_TCP_CLIENT_SRC_OPEN);
|
||||||
|
|
||||||
|
/* connect to server */
|
||||||
if (!g_socket_connect (src->socket, saddr, src->cancellable, &err))
|
if (!g_socket_connect (src->socket, saddr, src->cancellable, &err))
|
||||||
goto connect_failed;
|
goto connect_failed;
|
||||||
|
|
||||||
g_object_unref (saddr);
|
g_object_unref (saddr);
|
||||||
g_object_unref (addr);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
@ -391,6 +392,7 @@ no_socket:
|
|||||||
GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
|
GST_ELEMENT_ERROR (src, 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:
|
||||||
@ -403,7 +405,6 @@ name_resolve:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (resolver);
|
g_object_unref (resolver);
|
||||||
gst_tcp_client_src_stop (GST_BASE_SRC (src));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
connect_failed:
|
connect_failed:
|
||||||
@ -417,7 +418,6 @@ connect_failed:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (saddr);
|
g_object_unref (saddr);
|
||||||
g_object_unref (addr);
|
|
||||||
gst_tcp_client_src_stop (GST_BASE_SRC (src));
|
gst_tcp_client_src_stop (GST_BASE_SRC (src));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -273,16 +273,6 @@ gst_tcp_server_sink_init_send (GstMultiSocketSink * parent)
|
|||||||
GSocketAddress *saddr;
|
GSocketAddress *saddr;
|
||||||
GResolver *resolver;
|
GResolver *resolver;
|
||||||
|
|
||||||
/* create the server listener socket */
|
|
||||||
this->server_socket =
|
|
||||||
g_socket_new (G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_STREAM,
|
|
||||||
G_SOCKET_PROTOCOL_TCP, &err);
|
|
||||||
if (!this->server_socket)
|
|
||||||
goto no_socket;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (this, "opened sending server socket with socket %p",
|
|
||||||
this->server_socket);
|
|
||||||
|
|
||||||
/* look up name if we need to */
|
/* look up name if we need to */
|
||||||
addr = g_inet_address_new_from_string (this->host);
|
addr = g_inet_address_new_from_string (this->host);
|
||||||
if (!addr) {
|
if (!addr) {
|
||||||
@ -308,15 +298,28 @@ gst_tcp_server_sink_init_send (GstMultiSocketSink * parent)
|
|||||||
g_free (ip);
|
g_free (ip);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
saddr = g_inet_socket_address_new (addr, this->server_port);
|
||||||
|
g_object_unref (addr);
|
||||||
|
|
||||||
|
/* create the server listener socket */
|
||||||
|
this->server_socket =
|
||||||
|
g_socket_new (g_socket_address_get_family (saddr), G_SOCKET_TYPE_STREAM,
|
||||||
|
G_SOCKET_PROTOCOL_TCP, &err);
|
||||||
|
if (!this->server_socket)
|
||||||
|
goto no_socket;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (this, "opened sending server socket with socket %p",
|
||||||
|
this->server_socket);
|
||||||
|
|
||||||
g_socket_set_blocking (this->server_socket, FALSE);
|
g_socket_set_blocking (this->server_socket, FALSE);
|
||||||
|
|
||||||
/* bind it */
|
/* bind it */
|
||||||
saddr = g_inet_socket_address_new (addr, this->server_port);
|
|
||||||
GST_DEBUG_OBJECT (this, "binding server socket to address");
|
GST_DEBUG_OBJECT (this, "binding server socket to address");
|
||||||
if (!g_socket_bind (this->server_socket, saddr, TRUE, &err))
|
if (!g_socket_bind (this->server_socket, saddr, TRUE, &err))
|
||||||
goto bind_failed;
|
goto bind_failed;
|
||||||
|
|
||||||
|
g_object_unref (saddr);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (this, "listening on server socket");
|
GST_DEBUG_OBJECT (this, "listening on server socket");
|
||||||
g_socket_set_listen_backlog (this->server_socket, TCP_BACKLOG);
|
g_socket_set_listen_backlog (this->server_socket, TCP_BACKLOG);
|
||||||
|
|
||||||
@ -344,6 +347,7 @@ 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:
|
||||||
@ -356,7 +360,6 @@ name_resolve:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (resolver);
|
g_object_unref (resolver);
|
||||||
gst_tcp_server_sink_close (&this->element);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
bind_failed:
|
bind_failed:
|
||||||
@ -370,7 +373,6 @@ bind_failed:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (saddr);
|
g_object_unref (saddr);
|
||||||
g_object_unref (addr);
|
|
||||||
gst_tcp_server_sink_close (&this->element);
|
gst_tcp_server_sink_close (&this->element);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -384,8 +386,6 @@ listen_failed:
|
|||||||
this->server_port, err->message));
|
this->server_port, err->message));
|
||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (saddr);
|
|
||||||
g_object_unref (addr);
|
|
||||||
gst_tcp_server_sink_close (&this->element);
|
gst_tcp_server_sink_close (&this->element);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -344,14 +344,6 @@ gst_tcp_server_src_start (GstBaseSrc * bsrc)
|
|||||||
GSocketAddress *saddr;
|
GSocketAddress *saddr;
|
||||||
GResolver *resolver;
|
GResolver *resolver;
|
||||||
|
|
||||||
/* create the server listener socket */
|
|
||||||
src->server_socket = g_socket_new (G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_STREAM,
|
|
||||||
G_SOCKET_PROTOCOL_TCP, &err);
|
|
||||||
if (!src->server_socket)
|
|
||||||
goto no_socket;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "opened receiving server socket");
|
|
||||||
|
|
||||||
/* look up name if we need to */
|
/* look up name if we need to */
|
||||||
addr = g_inet_address_new_from_string (src->host);
|
addr = g_inet_address_new_from_string (src->host);
|
||||||
if (!addr) {
|
if (!addr) {
|
||||||
@ -377,12 +369,25 @@ gst_tcp_server_src_start (GstBaseSrc * bsrc)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* bind it */
|
|
||||||
saddr = g_inet_socket_address_new (addr, src->server_port);
|
saddr = g_inet_socket_address_new (addr, src->server_port);
|
||||||
|
g_object_unref (addr);
|
||||||
|
|
||||||
|
/* create the server listener socket */
|
||||||
|
src->server_socket =
|
||||||
|
g_socket_new (g_socket_address_get_family (saddr), G_SOCKET_TYPE_STREAM,
|
||||||
|
G_SOCKET_PROTOCOL_TCP, &err);
|
||||||
|
if (!src->server_socket)
|
||||||
|
goto no_socket;
|
||||||
|
|
||||||
|
GST_DEBUG_OBJECT (src, "opened receiving server socket");
|
||||||
|
|
||||||
|
/* bind it */
|
||||||
GST_DEBUG_OBJECT (src, "binding server socket to address");
|
GST_DEBUG_OBJECT (src, "binding server socket to address");
|
||||||
if (!g_socket_bind (src->server_socket, saddr, TRUE, &err))
|
if (!g_socket_bind (src->server_socket, saddr, TRUE, &err))
|
||||||
goto bind_failed;
|
goto bind_failed;
|
||||||
|
|
||||||
|
g_object_unref (saddr);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "listening on server socket");
|
GST_DEBUG_OBJECT (src, "listening on server socket");
|
||||||
|
|
||||||
g_socket_set_listen_backlog (src->server_socket, TCP_BACKLOG);
|
g_socket_set_listen_backlog (src->server_socket, TCP_BACKLOG);
|
||||||
@ -400,6 +405,7 @@ no_socket:
|
|||||||
GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
|
GST_ELEMENT_ERROR (src, 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:
|
||||||
@ -412,7 +418,6 @@ name_resolve:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (resolver);
|
g_object_unref (resolver);
|
||||||
gst_tcp_server_src_stop (GST_BASE_SRC (src));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
bind_failed:
|
bind_failed:
|
||||||
@ -426,7 +431,6 @@ bind_failed:
|
|||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (saddr);
|
g_object_unref (saddr);
|
||||||
g_object_unref (addr);
|
|
||||||
gst_tcp_server_src_stop (GST_BASE_SRC (src));
|
gst_tcp_server_src_stop (GST_BASE_SRC (src));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -440,8 +444,6 @@ listen_failed:
|
|||||||
err->message));
|
err->message));
|
||||||
}
|
}
|
||||||
g_clear_error (&err);
|
g_clear_error (&err);
|
||||||
g_object_unref (saddr);
|
|
||||||
g_object_unref (addr);
|
|
||||||
gst_tcp_server_src_stop (GST_BASE_SRC (src));
|
gst_tcp_server_src_stop (GST_BASE_SRC (src));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user