[X2Go-Commits] [libx2goclient] 04/132: src/x2goclient-network.{c, h}: add basic disconnect support.
git-admin at x2go.org
git-admin at x2go.org
Fri Dec 3 15:26:28 CET 2021
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository libx2goclient.
commit 6c8a91e84f73458c08df9b7989150034fadb78e3
Author: Mihai Moldovan <ionic at ionic.de>
Date: Fri Oct 30 06:54:37 2020 +0100
src/x2goclient-network.{c,h}: add basic disconnect support.
Mirrors the connect feature.
Needs further implementation in more concrete classes.
---
src/x2goclient-network.c | 36 ++++++++++++++++++++++++++++++++++++
src/x2goclient-network.h | 2 ++
2 files changed, 38 insertions(+)
diff --git a/src/x2goclient-network.c b/src/x2goclient-network.c
index 6ba5b24..d46f28f 100644
--- a/src/x2goclient-network.c
+++ b/src/x2goclient-network.c
@@ -56,6 +56,7 @@ typedef struct X2GoClientNetworkPrivate_ {
gchar *session_path; /* Will eventually be replaced with a session object, probably. */
gboolean connected;
gboolean (*connect_func) (X2GoClientNetwork * const self, GError ** const gerr);
+ gboolean (*disconnect_func) (X2GoClientNetwork * const self, GError ** const gerr);
} X2GoClientNetworkPrivate;
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (X2GoClientNetwork, x2goclient_network, G_TYPE_OBJECT);
@@ -75,6 +76,7 @@ enum {
X2GO_NET_PROP_SESSION_PATH,
X2GO_NET_PROP_CONNECTED,
X2GO_NET_PROP_CONN_FUNC,
+ X2GO_NET_PROP_DISCONN_FUNC,
X2GO_NET_N_PROPERTIES
};
@@ -136,6 +138,11 @@ static void x2goclient_network_class_init (X2GoClientNetworkClass * const klass)
"This is supposed to be immutable."),
G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
+ net_obj_properties[X2GO_NET_PROP_DISCONN_FUNC] = g_param_spec_pointer ("disconnect-function", _("Pointer to this instance's disconnect function"),
+ _("A pointer to the instance's disconnect function. "
+ "This is supposed to be immutable."),
+ G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
+
g_object_class_install_properties (object_class, X2GO_NET_N_PROPERTIES, net_obj_properties);
}
@@ -147,6 +154,7 @@ static void x2goclient_network_init (X2GoClientNetwork * const self) {
priv->session_path = NULL;
priv->connected = FALSE;
priv->connect_func = &x2goclient_network_connect;
+ priv->disconnect_func = &x2goclient_network_disconnect;
}
static void x2goclient_network_dispose (GObject * const object) {
@@ -169,6 +177,7 @@ static void x2goclient_network_finalize (GObject * const object) {
priv->session_path = NULL;
priv->connect_func = NULL;
+ priv->disconnect_func = NULL;
(G_OBJECT_CLASS (x2goclient_network_parent_class))->finalize (object);
}
@@ -208,6 +217,27 @@ gboolean x2goclient_network_connect (X2GoClientNetwork * const self, GError ** c
return (ret);
}
+gboolean x2goclient_network_disconnect (X2GoClientNetwork * const self, GError ** const gerr) {
+ gboolean ret = FALSE;
+
+ X2GoClientNetworkClass *class = X2GOCLIENT_NETWORK_GET_CLASS (self);
+ X2GoClientNetworkPrivate *priv = x2goclient_network_get_instance_private (self);
+
+ g_return_val_if_fail (X2GOCLIENT_IS_NETWORK (self), ret);
+ g_return_val_if_fail (((NULL == gerr) || (NULL == *gerr)), ret);
+ g_return_val_if_fail (class->disconnect, ret);
+
+ ret = (!(priv->connected));
+
+ if (!(ret)) {
+ ret = class->disconnect (self, gerr);
+
+ priv->connected = (!(ret));
+ }
+
+ return (ret);
+}
+
static void x2goclient_network_set_property (GObject * const object, guint prop_id, const GValue * const value, GParamSpec * const param_spec) {
X2GoClientNetwork *self = X2GOCLIENT_NETWORK (object);
X2GoClientNetworkPrivate *priv = x2goclient_network_get_instance_private (self);
@@ -239,6 +269,9 @@ static void x2goclient_network_set_property (GObject * const object, guint prop_
case (X2GO_NET_PROP_CONN_FUNC):
priv->connect_func = g_value_get_pointer (value);
break;
+ case (X2GO_NET_PROP_DISCONN_FUNC):
+ priv->disconnect_func = g_value_get_pointer (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, param_spec);
break;
@@ -268,6 +301,9 @@ static void x2goclient_network_get_property (GObject * const object, const guint
case (X2GO_NET_PROP_CONN_FUNC):
g_value_set_pointer (value, priv->connect_func);
break;
+ case (X2GO_NET_PROP_DISCONN_FUNC):
+ g_value_set_pointer (value, priv->disconnect_func);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, param_spec);
break;
diff --git a/src/x2goclient-network.h b/src/x2goclient-network.h
index cf96c35..54cd44d 100644
--- a/src/x2goclient-network.h
+++ b/src/x2goclient-network.h
@@ -56,6 +56,7 @@ struct _X2GoClientNetworkClass {
GObjectClass parent_class;
gboolean (*connect) (X2GoClientNetwork * const self, GError ** const gerr);
+ gboolean (*disconnect) (X2GoClientNetwork * const self, GError ** const gerr);
/*< private >*/
GSocketAddress* (*parse_sockspec) (X2GoClientNetwork * const self, const GString * const sockspec);
@@ -65,6 +66,7 @@ struct _X2GoClientNetworkClass {
};
gboolean x2goclient_network_connect (X2GoClientNetwork * const self, GError ** const gerr);
+gboolean x2goclient_network_disconnect (X2GoClientNetwork * const self, GError ** const gerr);
G_END_DECLS
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/libx2goclient.git
More information about the x2go-commits
mailing list