Alexander Sack schrieb:

> Openvpn improvements and new features are definitly much appreciated
> ... its just that NM 0.7 is supposed to be released any day and hence
> the tree is pretty much locked down.

Here is yet another patch implementing the fragment option.

Thanks,
Jochen

Index: vpn-daemons/openvpn/src/nm-openvpn-service.h
===================================================================
--- vpn-daemons/openvpn/src/nm-openvpn-service.h        (Revision 4323)
+++ vpn-daemons/openvpn/src/nm-openvpn-service.h        (Arbeitskopie)
@@ -43,6 +43,7 @@
 #define NM_OPENVPN_KEY_CIPHER "cipher"
 #define NM_OPENVPN_KEY_COMP_LZO "comp-lzo"
 #define NM_OPENVPN_KEY_CONNECTION_TYPE "connection-type"
+#define NM_OPENVPN_KEY_FRAGMENT "fragment"
 #define NM_OPENVPN_KEY_TAP_DEV "tap-dev"
 #define NM_OPENVPN_KEY_KEY "key"
 #define NM_OPENVPN_KEY_LOCAL_IP "local-ip"
Index: vpn-daemons/openvpn/src/nm-openvpn-service.c
===================================================================
--- vpn-daemons/openvpn/src/nm-openvpn-service.c        (Revision 4323)
+++ vpn-daemons/openvpn/src/nm-openvpn-service.c        (Arbeitskopie)
@@ -88,6 +88,7 @@
        { NM_OPENVPN_KEY_CIPHER,               G_TYPE_STRING, 0, 0, FALSE },
        { NM_OPENVPN_KEY_COMP_LZO,             G_TYPE_BOOLEAN, 0, 0, FALSE },
        { NM_OPENVPN_KEY_CONNECTION_TYPE,      G_TYPE_STRING, 0, 0, FALSE },
+       { NM_OPENVPN_KEY_FRAGMENT,             G_TYPE_INT, 600, 1500, FALSE },
        { NM_OPENVPN_KEY_TAP_DEV,              G_TYPE_BOOLEAN, 0, 0, FALSE },
        { NM_OPENVPN_KEY_KEY,                  G_TYPE_STRING, 0, 0, FALSE },
        { NM_OPENVPN_KEY_LOCAL_IP,             G_TYPE_STRING, 0, 0, TRUE },
@@ -651,6 +652,21 @@
                add_openvpn_arg (args, "1194");
        }

+       /* Fragment */
+       tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_FRAGMENT);
+       if (tmp && strlen (tmp)) {
+               add_openvpn_arg (args, "--fragment");
+               if (!add_openvpn_arg_int (args, tmp)) {
+                       g_set_error (error,
+                                    NM_VPN_PLUGIN_ERROR,
+                                    NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS,
+                                    "Invalid fragment size '%s'.",
+                                    tmp);
+                       free_openvpn_args (args);
+                       return FALSE;
+               }
+       }
+
        /* Cipher */
        tmp = nm_setting_vpn_get_data_item (s_vpn, NM_OPENVPN_KEY_CIPHER);
        if (tmp && strlen (tmp)) {
Index: vpn-daemons/openvpn/properties/auth-helpers.c
===================================================================
--- vpn-daemons/openvpn/properties/auth-helpers.c       (Revision 4323)
+++ vpn-daemons/openvpn/properties/auth-helpers.c       (Arbeitskopie)
@@ -720,6 +720,7 @@
        NM_OPENVPN_KEY_COMP_LZO,
        NM_OPENVPN_KEY_TAP_DEV,
        NM_OPENVPN_KEY_PROTO_TCP,
+       NM_OPENVPN_KEY_FRAGMENT,
        NM_OPENVPN_KEY_CIPHER,
        NM_OPENVPN_KEY_TA_DIR,
        NM_OPENVPN_KEY_TA,
@@ -764,6 +765,16 @@
        gtk_widget_set_sensitive (widget, gtk_toggle_button_get_active 
(GTK_TOGGLE_BUTTON (check)));
 }

+static void
+frag_toggled_cb (GtkWidget *check, gpointer user_data)
+{
+       GladeXML *xml = (GladeXML *) user_data;
+       GtkWidget *widget;
+
+       widget = glade_xml_get_widget (xml, "frag_spinbutton");
+       gtk_widget_set_sensitive (widget, gtk_toggle_button_get_active 
(GTK_TOGGLE_BUTTON (check)));
+}
+
 static const char *
 nm_find_openvpn (void)
 {
@@ -959,6 +970,31 @@
                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
        }

+       widget = glade_xml_get_widget (xml, "frag_checkbutton");
+       g_signal_connect (G_OBJECT (widget), "toggled", G_CALLBACK 
(frag_toggled_cb), xml);
+
+       value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_FRAGMENT);
+       if (value && strlen (value)) {
+               long int tmp;
+
+               errno = 0;
+               tmp = strtol (value, NULL, 10);
+               if (errno == 0 && tmp >= 600 && tmp <= 1500) {
+                       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON 
(widget), TRUE);
+
+                       widget = glade_xml_get_widget (xml, "frag_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 = glade_xml_get_widget (xml, "frag_spinbutton");
+               gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), 1300.0);
+               gtk_widget_set_sensitive (widget, FALSE);
+       }
+
        if (   !strcmp (contype, NM_OPENVPN_CONTYPE_TLS)
            || !strcmp (contype, NM_OPENVPN_CONTYPE_PASSWORD_TLS)
            || !strcmp (contype, NM_OPENVPN_CONTYPE_PASSWORD)) {
@@ -1058,6 +1094,15 @@
        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
                g_hash_table_insert (hash, g_strdup (NM_OPENVPN_KEY_TAP_DEV), 
g_strdup ("yes"));

+       widget = glade_xml_get_widget (xml, "frag_checkbutton");
+       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+               int frag;
+
+               widget = glade_xml_get_widget (xml, "frag_spinbutton");
+               frag = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON 
(widget));
+               g_hash_table_insert (hash, g_strdup (NM_OPENVPN_KEY_FRAGMENT), 
g_strdup_printf ("%d", frag));
+       }
+
        contype = g_object_get_data (G_OBJECT (dialog), "connection-type");
        if (!strcmp (contype, NM_OPENVPN_CONTYPE_TLS) || !strcmp (contype, 
NM_OPENVPN_CONTYPE_PASSWORD_TLS)) {
                GtkTreeModel *model;
Index: vpn-daemons/openvpn/properties/nm-openvpn-dialog.glade
===================================================================
--- vpn-daemons/openvpn/properties/nm-openvpn-dialog.glade      (Revision 4323)
+++ vpn-daemons/openvpn/properties/nm-openvpn-dialog.glade      (Arbeitskopie)
@@ -935,6 +935,40 @@
                     <property name="position">3</property>
                   </packing>
                 </child>
+                <child>
+                  <widget class="GtkHBox" id="hbox4">
+                    <property name="visible">True</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <widget class="GtkCheckButton" id="frag_checkbutton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="label" translatable="yes">Use 
fragmentation: </property>
+                        <property name="use_underline">True</property>
+                        <property name="response_id">0</property>
+                        <property name="draw_indicator">True</property>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkSpinButton" id="frag_spinbutton">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="adjustment">1300 600 1500 1 10 
10</property>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
               </widget>
             </child>
             <child>
_______________________________________________
NetworkManager-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to