[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