summaryrefslogtreecommitdiff
path: root/libgssdp/gssdp-socket-source.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgssdp/gssdp-socket-source.c')
-rw-r--r--libgssdp/gssdp-socket-source.c46
1 files changed, 35 insertions, 11 deletions
diff --git a/libgssdp/gssdp-socket-source.c b/libgssdp/gssdp-socket-source.c
index b3c8b70..6be3267 100644
--- a/libgssdp/gssdp-socket-source.c
+++ b/libgssdp/gssdp-socket-source.c
@@ -89,8 +89,17 @@ gssdp_socket_source_get_property (GObject *object,
G_GNUC_UNUSED GValue *value,
GParamSpec *pspec)
{
+ GSSDPSocketSource *self;
+ GSSDPSocketSourcePrivate *priv;
+
+ self = GSSDP_SOCKET_SOURCE (object);
+ priv = gssdp_socket_source_get_instance_private (self);
+
/* All properties are construct-only, write-only */
switch (property_id) {
+ case PROP_PORT:
+ g_value_set_uint (value, priv->port);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -319,6 +328,21 @@ gssdp_socket_source_do_init (GInitable *initable,
goto error;
}
+ if (priv->type == GSSDP_SOCKET_SOURCE_TYPE_SEARCH && priv->port == 0) {
+ GSocketAddress *addr =
+ g_socket_get_local_address (priv->socket, &inner_error);
+
+ if (inner_error != NULL) {
+ g_propagate_prefixed_error (
+ error,
+ inner_error,
+ "Failed to get port from socket");
+ }
+
+ priv->port = g_inet_socket_address_get_port (
+ G_INET_SOCKET_ADDRESS (addr));
+ }
+
if (priv->type == GSSDP_SOCKET_SOURCE_TYPE_MULTICAST) {
/* The 4th argument 'iface_name' can't be NULL even though Glib API doc says you
* can. 'NULL' will fail the test.
@@ -499,17 +523,17 @@ gssdp_socket_source_class_init (GSSDPSocketSourceClass *klass)
G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |
G_PARAM_STATIC_BLURB));
- g_object_class_install_property
- (object_class,
- PROP_PORT,
- g_param_spec_uint
- ("port",
- "UDP port",
- "UDP port to use for TYPE_SEARCH sockets",
- 0, G_MAXUINT16,
- 0,
- G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (
+ object_class,
+ PROP_PORT,
+ g_param_spec_uint ("port",
+ "UDP port",
+ "UDP port to use for TYPE_SEARCH sockets",
+ 0,
+ G_MAXUINT16,
+ 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
g_object_class_install_property
(object_class,