[PATCH] Support for openvpn --fragment option
- From: Jochen Friedrich <jochen scram de>
- To: Alexander Sack <asac ubuntu com>
- Cc: networkmanager-list gnome org
- Subject: [PATCH] Support for openvpn --fragment option
- Date: Tue, 25 Nov 2008 15:21:31 +0100
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>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]