[network-manager-openvpn] properties/ui: add ping, ping-exit and ping-restart to the UI (bgo #651657)



commit 6d589f24e781656714f199a6a75e84cbb342b7fa
Author: Jiří Klimeš <jklimes redhat com>
Date:   Wed Aug 19 15:53:14 2015 +0200

    properties/ui: add ping, ping-exit and ping-restart to the UI (bgo #651657)
    
    https://bugzilla.gnome.org/show_bug.cgi?id=651657

 properties/auth-helpers.c       |  116 ++++++++++++++++++++++++++++++++
 properties/nm-openvpn-dialog.ui |  139 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 255 insertions(+), 0 deletions(-)
---
diff --git a/properties/auth-helpers.c b/properties/auth-helpers.c
index 8352b42..0e019b4 100644
--- a/properties/auth-helpers.c
+++ b/properties/auth-helpers.c
@@ -913,6 +913,9 @@ static const char *advanced_keys[] = {
        NM_OPENVPN_KEY_TLS_REMOTE,
        NM_OPENVPN_KEY_REMOTE_RANDOM,
        NM_OPENVPN_KEY_REMOTE_CERT_TLS,
+       NM_OPENVPN_KEY_PING,
+       NM_OPENVPN_KEY_PING_EXIT,
+       NM_OPENVPN_KEY_PING_RESTART,
        NULL
 };
 
@@ -1216,6 +1219,9 @@ tls_auth_toggled_cb (GtkWidget *widget, gpointer user_data)
 #define DEVICE_TYPE_IDX_TUN     0
 #define DEVICE_TYPE_IDX_TAP     1
 
+#define PING_EXIT    0
+#define PING_RESTART 1
+
 static void
 proxy_type_changed (GtkComboBox *combo, gpointer user_data)
 {
@@ -1355,6 +1361,19 @@ dev_checkbox_toggled_cb (GtkWidget *check, gpointer user_data)
        device_name_changed_cb (GTK_ENTRY (entry), ok_button);
 }
 
+static void
+ping_exit_restart_checkbox_toggled_cb (GtkWidget *check, gpointer user_data)
+{
+       GtkBuilder *builder = (GtkBuilder *) user_data;
+       GtkWidget *combo, *spin;
+
+       combo = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_combo"));
+       spin = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_spinbutton"));
+
+       checkbox_toggled_update_widget_cb (check, combo);
+       checkbox_toggled_update_widget_cb (check, spin);
+}
+
 #define TA_DIR_COL_NAME 0
 #define TA_DIR_COL_NUM 1
 
@@ -1742,6 +1761,74 @@ advanced_dialog_new (GHashTable *hash, const char *contype)
                gtk_notebook_remove_page (GTK_NOTEBOOK (widget), 2);
        }
 
+       /* ping */
+       widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_checkbutton"));
+       spin = GTK_WIDGET (gtk_builder_get_object (builder, "ping_spinbutton"));
+       g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (checkbox_toggled_update_widget_cb), spin);
+       value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_PING);
+       if (value && *value) {
+               long int tmp;
+
+               errno = 0;
+               tmp = strtol (value, NULL, 10);
+               if (errno == 0 && tmp > 0 && tmp < 65536) {
+                       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+
+                       widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_spinbutton"));
+                       gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) tmp);
+                       gtk_widget_set_sensitive (widget, TRUE);
+               }
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
+
+               widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_spinbutton"));
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), 30.0);
+               gtk_widget_set_sensitive (widget, FALSE);
+       }
+
+       /* ping-exit / ping-restart */
+       widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_checkbutton"));
+       ping_exit_restart_checkbox_toggled_cb (widget, builder);
+       g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK (ping_exit_restart_checkbox_toggled_cb), 
builder);
+
+       combo = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_combo"));
+       value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_PING_EXIT);
+       if (value && *value)
+               active = PING_EXIT;
+       else {
+               value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_PING_RESTART);
+               active = PING_RESTART;
+       }
+
+       store = gtk_list_store_new (1, G_TYPE_STRING);
+       gtk_list_store_append (store, &iter);
+       gtk_list_store_set (store, &iter, 0, _("ping-exit"), -1);
+       gtk_list_store_append (store, &iter);
+       gtk_list_store_set (store, &iter, 0, _("ping-restart"), -1);
+       gtk_combo_box_set_model (GTK_COMBO_BOX (combo), GTK_TREE_MODEL (store));
+       g_object_unref (store);
+       gtk_combo_box_set_active (GTK_COMBO_BOX (combo), active);
+
+       if (value && *value) {
+               long int tmp;
+
+               errno = 0;
+               tmp = strtol (value, NULL, 10);
+               if (errno == 0 && tmp > 0 && tmp < 65536) {
+                       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+
+                       widget = GTK_WIDGET (gtk_builder_get_object (builder, 
"ping_exit_restart_spinbutton"));
+                       gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), (gdouble) tmp);
+                       gtk_widget_set_sensitive (widget, TRUE);
+               }
+       } else {
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
+
+               widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_spinbutton"));
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), 30.0);
+               gtk_widget_set_sensitive (widget, FALSE);
+       }
+
 out:
        g_free (ui_file);
        return dialog;
@@ -1983,6 +2070,35 @@ advanced_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
                }
        }
 
+       widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_checkbutton"));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+               int ping_val;
+
+               widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_spinbutton"));
+               ping_val = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+
+               g_hash_table_insert (hash,
+                                    g_strdup (NM_OPENVPN_KEY_PING),
+                                    g_strdup_printf ("%d", ping_val));
+       }
+
+       widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_checkbutton"));
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+               int ping_exit_type, ping_val;
+
+               widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_combo"));
+               ping_exit_type = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
+
+               widget = GTK_WIDGET (gtk_builder_get_object (builder, "ping_exit_restart_spinbutton"));
+               ping_val = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+
+               g_hash_table_insert (hash,
+                                    ping_exit_type == PING_EXIT ?
+                                      g_strdup (NM_OPENVPN_KEY_PING_EXIT) :
+                                      g_strdup (NM_OPENVPN_KEY_PING_RESTART),
+                                    g_strdup_printf ("%d", ping_val));
+       }
+
        return hash;
 }
 
diff --git a/properties/nm-openvpn-dialog.ui b/properties/nm-openvpn-dialog.ui
index 029602b..a83c1f0 100644
--- a/properties/nm-openvpn-dialog.ui
+++ b/properties/nm-openvpn-dialog.ui
@@ -40,6 +40,20 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjustment7">
+    <property name="lower">1</property>
+    <property name="upper">65535</property>
+    <property name="value">30</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment8">
+    <property name="lower">1</property>
+    <property name="upper">65535</property>
+    <property name="value">30</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkListStore" id="liststore1"/>
   <object class="GtkListStore" id="liststore2"/>
   <object class="GtkListStore" id="model1">
@@ -1032,6 +1046,17 @@ config: static &lt;file&gt; [direction]</property>
       </row>
     </data>
   </object>
+  <object class="GtkListStore" id="model8">
+    <columns>
+      <!-- column-name gchararray -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes"> </col>
+      </row>
+    </data>
+  </object>
   <object class="GtkDialog" id="openvpn-advanced-dialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
@@ -1467,6 +1492,120 @@ config: float</property>
                     <property name="position">9</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkBox" id="hbox8">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkCheckButton" id="ping_checkbutton">
+                        <property name="label" translatable="yes">Specify pin_g interval:</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="tooltip_text" translatable="yes">Ping remote over the TCP/UDP 
control channel if no packets have been sent for at least n seconds.
+config: ping &lt;n&gt;</property>
+                        <property name="use_underline">True</property>
+                        <property name="xalign">0.5</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSpinButton" id="ping_spinbutton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="tooltip_text" translatable="yes">Ping remote over the TCP/UDP 
control channel if no packets have been sent for at least n seconds.
+config: ping &lt;n&gt;</property>
+                        <property name="adjustment">adjustment7</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">10</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="hbox9">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkCheckButton" id="ping_exit_restart_checkbutton">
+                        <property name="label" translatable="yes">Specify _exit or restart ping:</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="tooltip_text" translatable="yes">Exit or restart after n seconds 
pass without reception of a ping or other packet from remote.
+config: ping-exit | ping-restart &lt;n&gt;</property>
+                        <property name="use_underline">True</property>
+                        <property name="xalign">0.5</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkComboBox" id="ping_exit_restart_combo">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="tooltip_text" translatable="yes">Exit or restart after n seconds 
pass without reception of a ping or other packet from remote.
+config: ping-exit | ping-restart &lt;n&gt;</property>
+                        <property name="model">model8</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="renderer11"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkSpinButton" id="ping_exit_restart_spinbutton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="tooltip_text" translatable="yes">Exit or restart after n seconds 
pass without reception of a ping or other packet from remote.
+config: ping-exit | ping-restart &lt;n&gt;</property>
+                        <property name="adjustment">adjustment8</property>
+                        <property name="climb_rate">1</property>
+                        <property name="numeric">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">11</property>
+                  </packing>
+                </child>
               </object>
             </child>
             <child type="tab">


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]