diff --git a/frontends/gnustep/Preferences.h b/frontends/gnustep/Preferences.h index 73cf014b6..12ceee45e 100644 --- a/frontends/gnustep/Preferences.h +++ b/frontends/gnustep/Preferences.h @@ -38,6 +38,14 @@ typedef NS_ENUM(NSInteger, FontType) { FontTypeFantasy }; +typedef NS_ENUM(NSInteger, ProxyType) { + ProxyTypeDirect = 0, + ProxyTypeBasicAuth, + ProxyTypeNoAuth, + ProxyTypeAuth, + ProxyTypeSystem +}; + // Certain preferences will notify that they have been updated using this key. #define PreferencesUpdatedNotificationName @"PreferencesUpdatedNotification" typedef NS_ENUM(NSInteger, PreferenceType) { @@ -135,5 +143,33 @@ typedef NS_ENUM(NSInteger, PreferenceType) { -(NSUInteger)cacheExpiryDays; -(void)setCacheExpiryDays: (NSUInteger)value; +-(ProxyType)proxyType; +-(void)setProxyType: (ProxyType)value; + +-(NSString*)proxyHost; +-(void)setProxyHost: (NSString*)value; + +-(NSUInteger)proxyPort; +-(void)setProxyPort: (NSUInteger)value; + +-(NSString*)proxyUsername; +-(void)setProxyUsername: (NSString*)value; + +-(NSString*)proxyPassword; +-(void)setProxyPassword: (NSString*)value; + +-(NSString*)proxyOmit; +-(void)setProxyOmit: (NSString*)value; + +-(NSUInteger)maximumFetchers; +-(void)setMaximumFetchers: (NSUInteger)value; + +-(NSUInteger)fetchesPerHost; +-(void)setFetchesPerHost: (NSUInteger)value; + +-(NSUInteger)cachedConnections; +-(void)setCachedConnections: (NSUInteger)value; + + +(Preferences*)defaultPreferences; @end diff --git a/frontends/gnustep/Preferences.m b/frontends/gnustep/Preferences.m index ffc58bb1d..fc94a21ad 100644 --- a/frontends/gnustep/Preferences.m +++ b/frontends/gnustep/Preferences.m @@ -376,6 +376,139 @@ [self saveNetsurfPrefsFile]; } +-(ProxyType)proxyType { + if (!nsoption_bool(http_proxy)) + return ProxyTypeDirect; + + int proxyType = nsoption_int(http_proxy_auth); + BOOL authenticated = (nsoption_charp(http_proxy_auth_user) != NULL) + && (nsoption_charp(http_proxy_auth_pass) != NULL); + BOOL hostProvided = nsoption_charp(http_proxy_host) != NULL; + + if (!hostProvided) + return ProxyTypeSystem; + + // If the required fields of a selected proxy type arne't set; Default to none. + switch (proxyType) { + case OPTION_HTTP_PROXY_AUTH_NONE: + return ProxyTypeNoAuth; + case OPTION_HTTP_PROXY_AUTH_BASIC: + if (authenticated) + return ProxyTypeBasicAuth; + else + return ProxyTypeDirect; + case OPTION_HTTP_PROXY_AUTH_NTLM: + if (authenticated) + return ProxyTypeAuth; + else + return ProxyTypeDirect; + default: + return ProxyTypeDirect; + } +} +-(void)setProxyType: (ProxyType)value { + switch (value) { + case ProxyTypeDirect: + nsoption_set_bool(http_proxy, false); + break; + case ProxyTypeNoAuth: + nsoption_set_bool(http_proxy, true); + nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NONE); + break; + case ProxyTypeBasicAuth: + nsoption_set_bool(http_proxy, true); + nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_BASIC); + break; + case ProxyTypeAuth: + nsoption_set_bool(http_proxy, true); + nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NTLM); + break; + case ProxyTypeSystem: + nsoption_set_bool(http_proxy, true); + nsoption_set_charp(http_proxy_host, NULL); + nsoption_set_int(http_proxy_auth, OPTION_HTTP_PROXY_AUTH_NONE); + break; + } + [self saveNetsurfPrefsFile]; +} + +-(NSString*)proxyHost { + char *value = nsoption_charp(http_proxy_host); + if (value == NULL) + return nil; + return [NSString stringWithCString: value]; +} +-(void)setProxyHost: (NSString*)value { + nsoption_set_charp(http_proxy_host, strdup([value cString])); + [self saveNetsurfPrefsFile]; +} + +-(NSUInteger)proxyPort { + return (NSUInteger)nsoption_int(http_proxy_port); +} +-(void)setProxyPort: (NSUInteger)value { + nsoption_set_int(http_proxy_port, (int)value); + [self saveNetsurfPrefsFile]; +} + +-(NSString*)proxyUsername { + char *value = nsoption_charp(http_proxy_auth_user); + if (value == NULL) + return nil; + return [NSString stringWithCString: value]; +} +-(void)setProxyUsername: (NSString*)value { + nsoption_set_charp(http_proxy_auth_user, strdup([value cString])); + [self saveNetsurfPrefsFile]; +} + +-(NSString*)proxyPassword { + char *value = nsoption_charp(http_proxy_auth_pass); + if (value == NULL) + return nil; + return [NSString stringWithCString: value]; +} +-(void)setProxyPassword: (NSString*)value { + nsoption_set_charp(http_proxy_auth_pass, strdup([value cString])); + [self saveNetsurfPrefsFile]; +} + +-(NSString*)proxyOmit { + char *value = nsoption_charp(http_proxy_noproxy); + if (value == NULL) + return nil; + return [NSString stringWithCString: value]; +} +-(void)setProxyOmit: (NSString*)value { + nsoption_set_charp(http_proxy_noproxy, strdup([value cString])); + [self saveNetsurfPrefsFile]; +} + +-(NSUInteger)maximumFetchers { + return (NSUInteger)nsoption_int(max_fetchers); +} +-(void)setMaximumFetchers: (NSUInteger)value { + nsoption_set_int(max_fetchers, (int)value); + [self saveNetsurfPrefsFile]; +} + +-(NSUInteger)fetchesPerHost { + return (NSUInteger)nsoption_int(max_fetchers_per_host); +} +-(void)setFetchesPerHost: (NSUInteger)value { + nsoption_set_int(max_fetchers_per_host, (int)value); + [self saveNetsurfPrefsFile]; +} + +-(NSUInteger)cachedConnections { + return (NSUInteger)nsoption_int(max_cached_fetch_handles); +} +-(void)setCachedConnections: (NSUInteger)value { + nsoption_set_int(max_cached_fetch_handles, (int)value); + [self saveNetsurfPrefsFile]; +} + + +(Preferences*)defaultPreferences { static Preferences *prefs; if (prefs == nil) { diff --git a/frontends/gnustep/PreferencesWindowController.m b/frontends/gnustep/PreferencesWindowController.m index f6dbf8873..06e3b1be1 100644 --- a/frontends/gnustep/PreferencesWindowController.m +++ b/frontends/gnustep/PreferencesWindowController.m @@ -14,6 +14,8 @@ -(void)configureAppearanceTab; -(void)configureContentTab; -(void)configurePrivacyTab; +-(void)configureNetworkTab; +-(void)configureProxyFieldsEnabled: (ProxyType)proxyType; @end @interface DownloadLocation: NSObject { NSString *name; @@ -63,6 +65,7 @@ [self configureAppearanceTab]; [self configureContentTab]; [self configurePrivacyTab]; + [self configureNetworkTab]; } // MARK: - MAIN TAB @@ -422,40 +425,108 @@ (NSUInteger)[[sender stringValue] integerValue]]; } +// MARK: - NETWORK TAB +-(void)configureNetworkTab { + Preferences *prefs = [Preferences defaultPreferences]; + [proxyTypeButton selectItemAtIndex: (NSUInteger)[prefs proxyType]]; + [proxyHostField setStringValue: [prefs proxyHost]]; + [proxyUsernameField setStringValue: [prefs proxyUsername]]; + [proxyPortField setIntegerValue: [prefs proxyPort]]; + [proxyPasswordField setStringValue: [prefs proxyPassword]]; + [proxyOmitField setStringValue: [prefs proxyOmit]]; + [maxFetchersField setIntegerValue: [prefs maximumFetchers]]; + [fetchesPerHostField setIntegerValue: [prefs fetchesPerHost]]; + [cachedConnectionsField setIntegerValue: [prefs cachedConnections]]; + [self configureProxyFieldsEnabled: [prefs proxyType]]; +} + +static void disable(NSControl *field) { + [field setStringValue: nil]; + [field setEnabled: NO]; +} +static void enable(NSControl *field) { + [field setEnabled: YES]; +} +-(void)configureProxyFieldsEnabled: (ProxyType)proxyType { + enable(proxyHostField); + enable(proxyPortField); + enable(proxyUsernameField); + enable(proxyPasswordField); + enable(proxyOmitField); + + switch (proxyType) { + case ProxyTypeDirect: + disable(proxyHostField); + disable(proxyPortField); + disable(proxyUsernameField); + disable(proxyPasswordField); + disable(proxyOmitField); + break; + case ProxyTypeBasicAuth: + break; + case ProxyTypeNoAuth: + disable(proxyUsernameField); + disable(proxyPasswordField); + break; + case ProxyTypeAuth: + break; + case ProxyTypeSystem: + disable(proxyHostField); + disable(proxyPortField); + disable(proxyUsernameField); + disable(proxyPasswordField); + [proxyHostField setStringValue: @"localhost"]; + break; + default: + break; + } +} + -(void)didPickProxyType: (id)sender { NSLog(@"didPickProxyType"); + NSUInteger selected = [sender indexOfItem: [sender selectedItem]]; + [[Preferences defaultPreferences] setProxyType: (ProxyType)selected]; + [self configureProxyFieldsEnabled: (ProxyType)selected]; } -(void)didChangeProxyHost: (id)sender { NSLog(@"didChangeProxyHost"); + [[Preferences defaultPreferences] setProxyHost: [sender stringValue]]; } -(void)didChangeProxyPort: (id)sender { NSLog(@"didChangeProxyPort"); + [[Preferences defaultPreferences] setProxyPort: [[sender stringValue] integerValue]]; } -(void)didChangeProxyUsername: (id)sender { NSLog(@"didChangeProxyUsername"); + [[Preferences defaultPreferences] setProxyUsername: [sender stringValue]]; } -(void)didChangeProxyPassword: (id)sender { NSLog(@"didChangeProxyPassword"); + [[Preferences defaultPreferences] setProxyPassword: [sender stringValue]]; } -(void)didChangeProxyOmit: (id)sender { NSLog(@"didChangeProxyOmit"); + [[Preferences defaultPreferences] setProxyOmit: [sender stringValue]]; } -(void)didChangeMaxFetchers: (id)sender { NSLog(@"didChangeMaxFetchers"); + [[Preferences defaultPreferences] setMaximumFetchers: [[sender stringValue] integerValue]]; } -(void)didChangeFetchesPerHost: (id)sender { NSLog(@"didChangeFetchesPerHost"); + [[Preferences defaultPreferences] setFetchesPerHost: [[sender stringValue] integerValue]]; } -(void)didChangeCachedConnections: (id)sender { NSLog(@"didChangeCachedConnections"); + [[Preferences defaultPreferences] setCachedConnections: [[sender stringValue] integerValue]]; }