diff --git a/DNSCrypt-Config-Updater/COPYING b/DNSCrypt-Config-Updater/COPYING new file mode 100644 index 0000000..c831144 --- /dev/null +++ b/DNSCrypt-Config-Updater/COPYING @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2011 OpenDNS, Inc. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/DNSCrypt-Config-Updater/dns-updater.xcodeproj/project.pbxproj b/DNSCrypt-Config-Updater/dns-updater.xcodeproj/project.pbxproj new file mode 100644 index 0000000..a1c27e4 --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater.xcodeproj/project.pbxproj @@ -0,0 +1,267 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 09080E931458B8DB00A85DAE /* SocketListener.m in Sources */ = {isa = PBXBuildFile; fileRef = 09080E921458B8DB00A85DAE /* SocketListener.m */; }; + 09080E971458DDE300A85DAE /* DNSUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = 09080E961458DDE300A85DAE /* DNSUpdater.m */; }; + 097388CE1456007900EAF57F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097388CD1456007900EAF57F /* Foundation.framework */; }; + 097388D11456007900EAF57F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 097388D01456007900EAF57F /* main.m */; }; + 097388DC145600E600EAF57F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097388DB145600E600EAF57F /* SystemConfiguration.framework */; }; + 09859652145669720037CE16 /* DNSGlobalSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 09859651145669720037CE16 /* DNSGlobalSettings.m */; }; + 09C03F83145A29C1009804EF /* ProxySpawner.m in Sources */ = {isa = PBXBuildFile; fileRef = 09C03F82145A29C1009804EF /* ProxySpawner.m */; }; + 09E8DB95145FB58E00B1DECF /* CoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09E8DB94145FB58E00B1DECF /* CoreServices.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 097388C71456007900EAF57F /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 09080E911458B8DB00A85DAE /* SocketListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SocketListener.h; sourceTree = ""; }; + 09080E921458B8DB00A85DAE /* SocketListener.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SocketListener.m; sourceTree = ""; }; + 09080E951458DDE300A85DAE /* DNSUpdater.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DNSUpdater.h; sourceTree = ""; }; + 09080E961458DDE300A85DAE /* DNSUpdater.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DNSUpdater.m; sourceTree = ""; }; + 097388C91456007900EAF57F /* dns-updater */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "dns-updater"; sourceTree = BUILT_PRODUCTS_DIR; }; + 097388CD1456007900EAF57F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 097388D01456007900EAF57F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 097388D31456007900EAF57F /* dns-updater-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "dns-updater-Prefix.pch"; sourceTree = ""; }; + 097388DB145600E600EAF57F /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 09859650145669720037CE16 /* DNSGlobalSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DNSGlobalSettings.h; sourceTree = ""; }; + 09859651145669720037CE16 /* DNSGlobalSettings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DNSGlobalSettings.m; sourceTree = ""; }; + 09C03F81145A29C1009804EF /* ProxySpawner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProxySpawner.h; sourceTree = ""; }; + 09C03F82145A29C1009804EF /* ProxySpawner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProxySpawner.m; sourceTree = ""; }; + 09E8DB94145FB58E00B1DECF /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = System/Library/Frameworks/CoreServices.framework; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 097388C61456007900EAF57F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 09E8DB95145FB58E00B1DECF /* CoreServices.framework in Frameworks */, + 097388CE1456007900EAF57F /* Foundation.framework in Frameworks */, + 097388DC145600E600EAF57F /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 097388BE1456007900EAF57F = { + isa = PBXGroup; + children = ( + 097388CF1456007900EAF57F /* dns-updater */, + 097388CC1456007900EAF57F /* Frameworks */, + 097388CA1456007900EAF57F /* Products */, + ); + sourceTree = ""; + }; + 097388CA1456007900EAF57F /* Products */ = { + isa = PBXGroup; + children = ( + 097388C91456007900EAF57F /* dns-updater */, + ); + name = Products; + sourceTree = ""; + }; + 097388CC1456007900EAF57F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 09E8DB94145FB58E00B1DECF /* CoreServices.framework */, + 097388CD1456007900EAF57F /* Foundation.framework */, + 097388DB145600E600EAF57F /* SystemConfiguration.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 097388CF1456007900EAF57F /* dns-updater */ = { + isa = PBXGroup; + children = ( + 097388D01456007900EAF57F /* main.m */, + 09080E951458DDE300A85DAE /* DNSUpdater.h */, + 09080E961458DDE300A85DAE /* DNSUpdater.m */, + 09859650145669720037CE16 /* DNSGlobalSettings.h */, + 09859651145669720037CE16 /* DNSGlobalSettings.m */, + 09C03F81145A29C1009804EF /* ProxySpawner.h */, + 09C03F82145A29C1009804EF /* ProxySpawner.m */, + 09080E911458B8DB00A85DAE /* SocketListener.h */, + 09080E921458B8DB00A85DAE /* SocketListener.m */, + 097388D21456007900EAF57F /* Supporting Files */, + ); + path = "dns-updater"; + sourceTree = ""; + }; + 097388D21456007900EAF57F /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 097388D31456007900EAF57F /* dns-updater-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 097388C81456007900EAF57F /* dns-updater */ = { + isa = PBXNativeTarget; + buildConfigurationList = 097388D81456007900EAF57F /* Build configuration list for PBXNativeTarget "dns-updater" */; + buildPhases = ( + 097388C51456007900EAF57F /* Sources */, + 097388C61456007900EAF57F /* Frameworks */, + 097388C71456007900EAF57F /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "dns-updater"; + productName = "dns-updater"; + productReference = 097388C91456007900EAF57F /* dns-updater */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 097388C01456007900EAF57F /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0430; + }; + buildConfigurationList = 097388C31456007900EAF57F /* Build configuration list for PBXProject "dns-updater" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 097388BE1456007900EAF57F; + productRefGroup = 097388CA1456007900EAF57F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 097388C81456007900EAF57F /* dns-updater */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 097388C51456007900EAF57F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 097388D11456007900EAF57F /* main.m in Sources */, + 09859652145669720037CE16 /* DNSGlobalSettings.m in Sources */, + 09080E931458B8DB00A85DAE /* SocketListener.m in Sources */, + 09080E971458DDE300A85DAE /* DNSUpdater.m in Sources */, + 09C03F83145A29C1009804EF /* ProxySpawner.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 097388D61456007900EAF57F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_OBJC_GC = unsupported; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 097388D71456007900EAF57F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_OBJC_GC = unsupported; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + SDKROOT = macosx; + }; + name = Release; + }; + 097388D91456007900EAF57F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "dns-updater/dns-updater-Prefix.pch"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 097388DA1456007900EAF57F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "dns-updater/dns-updater-Prefix.pch"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 097388C31456007900EAF57F /* Build configuration list for PBXProject "dns-updater" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 097388D61456007900EAF57F /* Debug */, + 097388D71456007900EAF57F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 097388D81456007900EAF57F /* Build configuration list for PBXNativeTarget "dns-updater" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 097388D91456007900EAF57F /* Debug */, + 097388DA1456007900EAF57F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 097388C01456007900EAF57F /* Project object */; +} diff --git a/DNSCrypt-Config-Updater/dns-updater.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/DNSCrypt-Config-Updater/dns-updater.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..721e6b3 --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/DNSCrypt-Config-Updater/dns-updater/DNSGlobalSettings.h b/DNSCrypt-Config-Updater/dns-updater/DNSGlobalSettings.h new file mode 100644 index 0000000..ef74deb --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/DNSGlobalSettings.h @@ -0,0 +1,23 @@ +// +// DNSGlobalSettings.h +// dns-updater +// +// Created by OpenDNS, Inc. on 10/24/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import +#import + +#define kONLY_CHANGE_SERVICES_WITH_A_BSD_INTERFACE 1 + +@interface DNSGlobalSettings : NSObject + +- (NSArray *) getActiveResolvers __attribute((ns_returns_retained)); +- (BOOL) isRunningWithResolvers: (NSArray *) resolvers; +- (BOOL) isRunningWithResolversInResolversList: (NSArray *) resolversList; +- (BOOL) setResolvers: (NSArray *) resolvers; +- (BOOL) revertResolvers; +- (BOOL) backupExceptResolversList: (NSArray *) resolversList; + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/DNSGlobalSettings.m b/DNSCrypt-Config-Updater/dns-updater/DNSGlobalSettings.m new file mode 100644 index 0000000..0a8e71c --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/DNSGlobalSettings.m @@ -0,0 +1,164 @@ +// +// DNSGlobalSettings.m +// dns-updater +// +// Created by OpenDNS, Inc. on 10/24/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import "DNSGlobalSettings.h" + +@implementation DNSGlobalSettings + +- (BOOL) forceDHCPUpdate +{ + NSLog(@"Forcing DHCP update"); + NSArray *interfaces = (__bridge_transfer NSArray *) SCNetworkInterfaceCopyAll(); + for (id interface_ in interfaces) { + SCNetworkInterfaceRef interface = (__bridge SCNetworkInterfaceRef) interface_; + SCNetworkInterfaceForceConfigurationRefresh(interface); + } + return TRUE; +} + +- (BOOL) applyToNetworkServices: (BOOL (^)(SCDynamicStoreRef fs, NSString *service, NSDictionary *properties, NSArray *serverAddresses)) cb +{ + SCDynamicStoreRef ds = SCDynamicStoreCreate(NULL, CFSTR("dnscrypt"), NULL, NULL); +#ifdef kONLY_CHANGE_SERVICES_WITH_A_BSD_INTERFACE + NSArray *services = (__bridge_transfer NSArray *) SCDynamicStoreCopyKeyList(ds, CFSTR("(State|Setup):/Network/Service/.+/DNS")); +#else + NSArray *services = (__bridge_transfer NSArray *) SCDynamicStoreCopyKeyList(ds, CFSTR("(State|Setup):/Network/(Service/.+|Global)/DNS")); +#endif + BOOL ret = TRUE; + for (NSString *service in services) { +#ifdef kONLY_CHANGE_SERVICES_WITH_A_BSD_INTERFACE + NSArray *elements = [service componentsSeparatedByString: @"/"]; + if (elements.count < 4U) { + continue; + } + NSString *serviceId = [elements objectAtIndex: 3U]; + NSString *interfacePath = [NSString stringWithFormat: @"Setup:/Network/Service/%@/Interface", serviceId]; + NSDictionary *interfaceProperties = (__bridge_transfer NSDictionary *) SCDynamicStoreCopyValue(ds, (__bridge CFStringRef) interfacePath); + if (interfaceProperties == nil || ! [interfaceProperties isKindOfClass: [NSDictionary class]]) { + continue; + } + NSString *bsdInterface = [interfaceProperties objectForKey: @"DeviceName"]; + if (bsdInterface == nil) { + continue; + } + NSLog(@"Found BSD interface: [%@]", bsdInterface); +#endif + NSDictionary *properties = (__bridge_transfer NSDictionary *) SCDynamicStoreCopyValue(ds, (__bridge CFStringRef) service); + if (properties == nil || ! [properties isKindOfClass: [NSDictionary class]]) { + continue; + } + NSArray *serverAddresses = [properties objectForKey: @"ServerAddresses"]; + if (serverAddresses == nil || ! [serverAddresses isKindOfClass: [NSArray class]]) { + continue; + } + ret &= cb(ds, service, properties, serverAddresses); + } + CFRelease(ds); + + return ret; +} + +- (BOOL) setResolvers: (NSArray *) resolvers +{ + [self applyToNetworkServices: ^BOOL(SCDynamicStoreRef ds, NSString *service, NSDictionary *properties, NSArray *serverAddresses) { + NSMutableDictionary *newProperties = [NSMutableDictionary dictionaryWithDictionary: properties]; + [newProperties setObject: resolvers forKey: @"ServerAddresses"]; + SCDynamicStoreSetValue(ds, (__bridge CFStringRef) service, (__bridge CFDictionaryRef) newProperties); + return TRUE; + }]; + + [[NSNotificationCenter defaultCenter] postNotificationName: @"CONFIGURATION_CHANGED" object: self userInfo: nil]; + + return TRUE; +} + +- (BOOL) revertResolvers +{ + [self applyToNetworkServices: ^BOOL(SCDynamicStoreRef ds, NSString *service, NSDictionary *properties, NSArray *serverAddresses) { + NSDictionary *propertiesWithBackup = [properties objectForKey: @"DNSCryptBackup"]; + if (propertiesWithBackup == nil || ! [propertiesWithBackup isKindOfClass: [NSDictionary class]]) { + return FALSE; + } + NSArray *backupedServerAddresses = [propertiesWithBackup objectForKey: @"ServerAddresses"]; + if (backupedServerAddresses == nil || ! [backupedServerAddresses isKindOfClass: [NSArray class]]) { + return FALSE; + } + NSMutableDictionary *newProperties = [NSMutableDictionary dictionaryWithDictionary: properties]; + [newProperties setObject: backupedServerAddresses forKey: @"ServerAddresses"]; + SCDynamicStoreSetValue(ds, (__bridge CFStringRef) service, (__bridge CFDictionaryRef) newProperties); + return TRUE; + }]; + + [self forceDHCPUpdate]; + [[NSNotificationCenter defaultCenter] postNotificationName: @"CONFIGURATION_CHANGED" object: self userInfo: nil]; + + return TRUE; +} + +- (NSArray *) getActiveResolvers +{ + NSError *err; + NSString *resolvConf = [NSString stringWithContentsOfFile: @"/etc/resolv.conf" encoding: NSISOLatin1StringEncoding error: &err]; + NSMutableArray *resolvers = [[NSMutableArray alloc] init]; + if (! resolvConf) { + return resolvers; + } + NSArray *lines = [resolvConf componentsSeparatedByString: @"\n"]; + for (NSString *line_ in lines) { + NSString *line = [line_ stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSArray *entry = [line componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; + if (![[entry objectAtIndex: 0U] isEqualToString: @"nameserver"]) { + continue; + } + NSString *resolver = [entry objectAtIndex: 1U]; + [resolvers addObject: resolver]; + } + return resolvers; +} + +- (BOOL) resolversForService: (NSArray *) serverAddresses areInResolversList: (NSArray *) resolversList +{ + for (NSArray *resolvers in resolversList) { + if ([serverAddresses isEqualToArray: resolvers]) { + return TRUE; + } + } + return FALSE; +} + +- (BOOL) isRunningWithResolvers: (NSArray *) resolvers +{ + NSArray *activeResolvers = [self getActiveResolvers]; + + return [activeResolvers isEqualToArray: resolvers]; +} + +- (BOOL) isRunningWithResolversInResolversList: (NSArray *) resolversList +{ + NSArray *activeResolvers = [self getActiveResolvers]; + + return [self resolversForService: activeResolvers areInResolversList: resolversList]; +} + +- (BOOL) backupExceptResolversList: (NSArray *) resolversList +{ + [self applyToNetworkServices: ^BOOL(SCDynamicStoreRef ds, NSString *service, NSDictionary *properties, NSArray *serverAddresses) { + if ([self resolversForService: serverAddresses areInResolversList: resolversList]) { + return FALSE; + } + NSMutableDictionary *propertiesWithBackup = [NSMutableDictionary dictionaryWithDictionary: properties]; + NSDictionary *serverAddressesBackup = [NSDictionary dictionaryWithObject: serverAddresses forKey: @"ServerAddresses"]; + [propertiesWithBackup setObject: serverAddressesBackup forKey: @"DNSCryptBackup"]; + SCDynamicStoreSetValue(ds, (__bridge CFStringRef) service, (__bridge CFDictionaryRef) propertiesWithBackup); + return TRUE; + }]; + + return TRUE; +} + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/DNSUpdater.h b/DNSCrypt-Config-Updater/dns-updater/DNSUpdater.h new file mode 100644 index 0000000..35bdafe --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/DNSUpdater.h @@ -0,0 +1,47 @@ +// +// DNSUpdater.h +// dns-updater +// +// Created by OpenDNS, Inc. on 10/26/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import "ProxySpawner.h" + +typedef enum { + kDNS_CONFIGURATION_UNKNOWN, kDNS_CONFIGURATION_VANILLA, kDNS_CONFIGURATION_LOCALHOST, kDNS_CONFIGURATION_OPENDNS +} DNSConfigurationState; + +#define kRESOLVER_IP_LOCALHOST @"127.0.0.1" +#define kRESOLVER_IP_OPENDNS1 @"208.67.220.220" +#define kRESOLVER_IP_OPENDNS2 @"208.67.222.222" +#define kRESOLVER_IP_DNSCRYPT @"208.67.220.220" + +#define kHOST_NAME_FOR_PROBES @"myip.opendns.com" + +#define kINTERVAL_BETWEEN_CONFIG_UPDATES 2.5 +#define kINTERVAL_BETWEEN_DELAYED_PROBES (60.0 * 15.0) +#define kDELAY_BETWEEN_ASYNC_RESOLUTION_ATTEMPTS 0.5 +#define kINTERVAL_BETWEEN_ASYNC_RESOLUTION_RETRIES 1.0 +#define kINTERVAL_BEFORE_ASYNC_RESOLUTION 5.0 +#define kASYNC_RESOLUTION_TIMEOUT 10.0 + +#define kASYNC_RESOLUTION_MAX_ATTEMPTS 3U + + +@interface DNSUpdater : NSObject { + DNSConfigurationState state; + DNSConfigurationState wantedState; + BOOL enableFallback; +} + +@property (assign) DNSConfigurationState state; +@property (assign) DNSConfigurationState wantedState; +@property (assign) BOOL enableFallback; + +- (id) initWithProxySpawner: (ProxySpawner *) proxySpawner; +- (void) start; +- (void) periodicallyUpdate; +- (void) update; + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/DNSUpdater.m b/DNSCrypt-Config-Updater/dns-updater/DNSUpdater.m new file mode 100644 index 0000000..87b83df --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/DNSUpdater.m @@ -0,0 +1,200 @@ +// +// DNSUpdater.m +// dns-updater +// +// Created by OpenDNS, Inc. on 10/26/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import "DNSGlobalSettings.h" +#import "DNSUpdater.h" + +@implementation DNSUpdater + +@synthesize state; +@synthesize wantedState; +@synthesize enableFallback; + +ProxySpawner *_proxySpawner; +NSArray *resolversForLocalhost; +NSArray *resolversForOpenDNS; +NSArray *resolversList; +NSDictionary *settings; +DNSGlobalSettings *configuration; +CFHostRef hostR; +NSTimer *asyncResolutionTimer; +NSUInteger asyncResolutionFailures; + +- (id) initWithProxySpawner: (ProxySpawner *) proxySpawner; +{ + if (! (self = [super init])) { + return nil; + } + _proxySpawner = proxySpawner; + state = wantedState = kDNS_CONFIGURATION_VANILLA; + resolversForLocalhost = [NSArray arrayWithObjects: kRESOLVER_IP_LOCALHOST, nil]; + resolversForOpenDNS = [NSArray arrayWithObjects: kRESOLVER_IP_OPENDNS1, kRESOLVER_IP_OPENDNS2, nil]; + resolversList = [NSArray arrayWithObjects: resolversForLocalhost, resolversForOpenDNS, nil]; + settings = nil; + configuration = [[DNSGlobalSettings alloc] init]; + hostR = nil; + asyncResolutionTimer = nil; + asyncResolutionFailures = 0U; + enableFallback = NO; + + if ([configuration isRunningWithResolvers: resolversForLocalhost]) { + NSLog(@"Current configuration is localhost, not vanilla"); + wantedState = state = kDNS_CONFIGURATION_LOCALHOST; + } else if ([configuration isRunningWithResolvers: resolversForOpenDNS]) { + NSLog(@"Current configuration is opendns, not vanilla"); + wantedState = state = kDNS_CONFIGURATION_OPENDNS; + } + return self; +} + +- (void) update +{ + if ([configuration isRunningWithResolvers: resolversForLocalhost]) { + if (state != kDNS_CONFIGURATION_LOCALHOST) { + NSLog(@"Supposed state was not LOCALHOST but it actually is"); + state = kDNS_CONFIGURATION_UNKNOWN; + wantedState = kDNS_CONFIGURATION_LOCALHOST; + NSArray *proxyArguments = [NSArray arrayWithObjects: @"--resolver-address=" kRESOLVER_IP_DNSCRYPT, nil]; + [_proxySpawner startWithArguments: proxyArguments]; + } + } else if ([configuration isRunningWithResolvers: resolversForOpenDNS]) { + if (state != kDNS_CONFIGURATION_OPENDNS) { + NSLog(@"Supposed state was not OPENDNS but it actually is"); + state = kDNS_CONFIGURATION_OPENDNS; + } + } else { + if (state == kDNS_CONFIGURATION_LOCALHOST) { + NSLog(@"Settings have been manually changed while not in vanilla mode"); + } + state = kDNS_CONFIGURATION_VANILLA; + } + if (state == wantedState) { + return; + } + + [configuration backupExceptResolversList: resolversList]; + if (wantedState == kDNS_CONFIGURATION_VANILLA) { + if ([configuration revertResolvers] == TRUE) { + state = wantedState; + NSLog(@"Back to a vanilla configuration"); + } else { + NSLog(@"* loadSettings failed"); + } + } else if (wantedState == kDNS_CONFIGURATION_LOCALHOST) { + if ([configuration setResolvers: resolversForLocalhost] == TRUE) { + state = wantedState; + NSLog(@"Configuration switched to localhost"); + } else { + NSLog(@"* setResolvers failed"); + } + } else if (wantedState == kDNS_CONFIGURATION_OPENDNS) { + if ([configuration setResolvers: resolversForOpenDNS] == TRUE) { + state = wantedState; + NSLog(@"Configuration switched to opendns"); + } else { + NSLog(@"* setResolvers failed"); + } + } +} + +- (void) periodicallyUpdate +{ + [self update]; + [NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdate) object: nil]; + [self performSelector: @selector(periodicallyUpdate) withObject: nil afterDelay: kINTERVAL_BETWEEN_CONFIG_UPDATES]; +} + +- (void) fallback +{ + NSLog(@"Falling back to vanilla configuration"); + wantedState = kDNS_CONFIGURATION_VANILLA; +} + +- (BOOL) asyncResolutionFailed +{ + asyncResolutionFailures++; + if (asyncResolutionFailures >= kASYNC_RESOLUTION_MAX_ATTEMPTS) { + [self fallback]; + return TRUE; + } + return FALSE; +} + +- (void) asyncResolutionSuccess +{ + asyncResolutionFailures = 0U; +} + +static void asyncResolutionDone(CFHostRef hostReplyR, CFHostInfoType typeInfo, const CFStreamError *error, void *info) +{ + DNSUpdater *self = (__bridge DNSUpdater *) info; + [asyncResolutionTimer invalidate]; + Boolean hasBeenResolved; + CFArrayRef addresses = CFHostGetAddressing(hostReplyR, &hasBeenResolved); + if (hasBeenResolved == TRUE && addresses != nil) { + NSLog(@"Test query has been resolved"); + } + CFHostUnscheduleFromRunLoop(hostReplyR, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); + CFHostSetClient(hostReplyR, NULL, NULL); + CFRelease(hostReplyR); + assert(hostReplyR == hostR); + hostR = nil; + [self asyncResolutionSuccess]; + [self performSelector: @selector(performAsyncResolution) withObject: self afterDelay: kINTERVAL_BETWEEN_DELAYED_PROBES]; +} + +- (void) asyncResolutionTimeout +{ + NSLog(@"async resolution timeout"); + CFHostCancelInfoResolution(hostR, kCFHostAddresses); + CFHostUnscheduleFromRunLoop(hostR, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); + CFHostSetClient(hostR, NULL, NULL); + CFRelease(hostR); + hostR = nil; + if ([self asyncResolutionFailed] == FALSE) { + [self performSelector: @selector(performAsyncResolution) withObject: self afterDelay: kDELAY_BETWEEN_ASYNC_RESOLUTION_ATTEMPTS]; + NSLog(@"Performing a new resolution attempt"); + } +} + +- (void) performAsyncResolution +{ + if (enableFallback == NO) { + return; + } + if (hostR) { + [self performSelector: @selector(performAsyncResolution) withObject: self afterDelay: kINTERVAL_BETWEEN_ASYNC_RESOLUTION_RETRIES]; + return; + } + NSLog(@"Starting async resolution"); + CFHostClientContext context = { 0, (__bridge void *) self, CFRetain, CFRelease, NULL }; + CFStringRef name = (__bridge CFStringRef) kHOST_NAME_FOR_PROBES; + hostR = CFHostCreateWithName(kCFAllocatorDefault, name); + CFHostSetClient(hostR, asyncResolutionDone, &context); + CFHostScheduleWithRunLoop(hostR, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); + CFStreamError error; + CFHostStartInfoResolution(hostR, kCFHostAddresses, &error); + asyncResolutionTimer = [NSTimer scheduledTimerWithTimeInterval: kASYNC_RESOLUTION_TIMEOUT target: self selector: @selector(asyncResolutionTimeout) userInfo: nil repeats: NO]; +} + +- (void) configurationChanged +{ + NSLog(@"CONFIGURATION_CHANGED notification received"); + if (enableFallback == NO) { + return; + } + [self performSelector: @selector(performAsyncResolution) withObject: self afterDelay: kINTERVAL_BEFORE_ASYNC_RESOLUTION]; +} + +- (void) start +{ + [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(configurationChanged) name:@"CONFIGURATION_CHANGED" object: nil]; + [self periodicallyUpdate]; +} + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/ProxySpawner.h b/DNSCrypt-Config-Updater/dns-updater/ProxySpawner.h new file mode 100644 index 0000000..b280e5b --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/ProxySpawner.h @@ -0,0 +1,21 @@ +// +// ProxySpawner.h +// dns-updater +// +// Created by OpenDNS, Inc. on 10/27/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import + +#define KLAUNCHCTL_PATH @"/bin/launchctl" +#define kDNSCRYPT_PROXY_USER @"nobody" +#define KDNSCRYPT_PROXY_LABEL @"com.opendns.osx.DNSCryptProxy" +#define kDNSCRYPT_PROXY_PATH @"/usr/local/sbin/dnscrypt-proxy" + +@interface ProxySpawner : NSObject + +- (BOOL) startWithArguments: (NSArray *) suppliedArguments; +- (BOOL) stop; + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/ProxySpawner.m b/DNSCrypt-Config-Updater/dns-updater/ProxySpawner.m new file mode 100644 index 0000000..c6acb1f --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/ProxySpawner.m @@ -0,0 +1,93 @@ +// +// ProxySpawner.m +// dns-updater +// +// Created by OpenDNS, Inc. on 10/27/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import "ProxySpawner.h" + +@implementation ProxySpawner + +- (BOOL) registerLaunchdLabelWithArguments: (NSArray *) arguments +{ + NSArray *launchdBaseArguments = [NSArray arrayWithObjects: @"submit", @"-l", KDNSCRYPT_PROXY_LABEL, @"--", kDNSCRYPT_PROXY_PATH, nil]; + NSArray *launchdArguments = [launchdBaseArguments arrayByAddingObjectsFromArray: arguments]; + NSTask *task = [[NSTask alloc] init]; + task.launchPath = KLAUNCHCTL_PATH; + task.arguments = launchdArguments; + task.standardError = [NSFileHandle fileHandleWithNullDevice]; + [task launch]; + [task waitUntilExit]; + + return TRUE; +} + +- (BOOL) unregisterLaunchdLabel +{ + NSArray *launchdArguments = [NSArray arrayWithObjects: @"remove", KDNSCRYPT_PROXY_LABEL, nil]; + NSTask *task = [[NSTask alloc] init]; + task.launchPath = KLAUNCHCTL_PATH; + task.arguments = launchdArguments; + task.standardError = [NSFileHandle fileHandleWithNullDevice]; + [task launch]; + [task waitUntilExit]; + + return TRUE; +} + +- (BOOL) argumentsAreWhiteListed: (NSArray *) arguments { + NSArray *whiteListedPrefixes = [NSArray arrayWithObjects: @"--tcp-port=443", @"--resolver-address=208.67.", nil]; + BOOL found; + + for (NSString *argument in arguments) { + found = NO; + for (NSString *whiteListedPrefix in whiteListedPrefixes) { + if ([argument hasPrefix: whiteListedPrefix]) { + found = YES; + break; + } + } + if (! found) { + return NO; + } + } + return YES; +} + +- (BOOL) startWithArguments: (NSArray *) arguments; +{ + if ([self argumentsAreWhiteListed: arguments] == NO) { + return FALSE; + } + NSArray *proxyBaseArguments = [NSArray arrayWithObjects: @"--user", kDNSCRYPT_PROXY_USER, nil]; + NSArray *proxyArguments = [proxyBaseArguments arrayByAddingObjectsFromArray: arguments]; + [self registerLaunchdLabelWithArguments: proxyArguments]; + + NSArray *launchdArguments = [NSArray arrayWithObjects: @"start", KDNSCRYPT_PROXY_LABEL, nil]; + NSTask *task = [[NSTask alloc] init]; + task.launchPath = KLAUNCHCTL_PATH; + task.arguments = launchdArguments; + [task launch]; + [task waitUntilExit]; + + return TRUE; +} + +- (BOOL) stop +{ + NSArray *launchdArguments = [NSArray arrayWithObjects: @"stop", KDNSCRYPT_PROXY_LABEL, nil]; + NSTask *task = [[NSTask alloc] init]; + task.launchPath = KLAUNCHCTL_PATH; + task.arguments = launchdArguments; + task.standardError = [NSFileHandle fileHandleWithNullDevice]; + [task launch]; + [task waitUntilExit]; + + [self unregisterLaunchdLabel]; + + return TRUE; +} + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/SocketListener.h b/DNSCrypt-Config-Updater/dns-updater/SocketListener.h new file mode 100644 index 0000000..c9aa943 --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/SocketListener.h @@ -0,0 +1,24 @@ +// +// SocketListener.h +// dns-updater +// +// Created by OpenDNS, Inc. on 10/26/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import "DNSUpdater.h" +#import "ProxySpawner.h" + +#define kSOCK_GRAND_PARENT_DIR @"/var/run" +#define kSOCK_PARENT_DIR kSOCK_GRAND_PARENT_DIR @"/com.opendns.osx.DNSCryptConfigUpdater" +#define kSOCK_PATH kSOCK_PARENT_DIR @"/sock" +#define kSOCK_GROUP_NAME "admin" +#define kSOCK_PARENT_DIR_PERMS 0710 +#define kSOCK_PERMS 0660 + +@interface SocketListener : NSObject + +- (id) initWithDNSUpdater: (DNSUpdater *) updater andProxySpawner: (ProxySpawner *) proxySpawner; +- (BOOL) createListener; + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/SocketListener.m b/DNSCrypt-Config-Updater/dns-updater/SocketListener.m new file mode 100644 index 0000000..1e5dc7b --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/SocketListener.m @@ -0,0 +1,197 @@ +// +// SocketListener.m +// dns-updater +// +// Created by OpenDNS, Inc. on 10/26/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#include +#include +#include +#include +#import "ProxySpawner.h" +#import "SocketListener.h" + +@implementation SocketListener + +DNSUpdater *_updater; +ProxySpawner *_proxySpawner; +NSMutableData *_commandBuffer; + +- (id) initWithDNSUpdater: (DNSUpdater *) updater andProxySpawner: (ProxySpawner *)proxySpawner +{ + if (! (self = [super init])) { + return nil; + } + _updater = updater; + _proxySpawner = proxySpawner; + _commandBuffer = [[NSMutableData alloc] init]; + + return self; +} + +- (BOOL) commandParseConfig: (NSArray *) commandAsComponents +{ + if (commandAsComponents.count != 2U) { + return FALSE; + } + NSString *stateName = [commandAsComponents objectAtIndex: 1U]; + NSLog(@"Wanted state name: [%@]", stateName); + if ([stateName isEqualToString: @"VANILLA"]) { + _updater.wantedState = kDNS_CONFIGURATION_VANILLA; + } else if ([stateName isEqualToString: @"LOCALHOST"]) { + _updater.wantedState = kDNS_CONFIGURATION_LOCALHOST; + } else if ([stateName isEqualToString: @"OPENDNS"]) { + _updater.wantedState = kDNS_CONFIGURATION_OPENDNS; + } else { + return FALSE; + } + if (_updater.state != _updater.wantedState) { + [_updater periodicallyUpdate]; + } + return TRUE; +} + +- (BOOL) commandParseFallback: (NSArray *) commandAsComponents +{ + if (commandAsComponents.count < 2U) { + return FALSE; + } + NSString *action = [commandAsComponents objectAtIndex: 1U]; + if ([action isEqualToString: @"OFF"]) { + _updater.enableFallback = NO; + } else if ([action isEqualToString: @"ON"]) { + _updater.enableFallback = YES; + [[NSNotificationCenter defaultCenter] postNotificationName: @"CONFIGURATION_CHANGED" object: self userInfo: nil]; + } + return FALSE; +} + +- (BOOL) commandParseProxy: (NSArray *) commandAsComponents +{ + if (commandAsComponents.count < 2U) { + return FALSE; + } + NSString *action = [commandAsComponents objectAtIndex: 1U]; + if ([action isEqualToString: @"STOP"]) { + return [_proxySpawner stop]; + } else if ([action isEqualToString: @"START"]) { + NSArray *suppliedArguments = [commandAsComponents subarrayWithRange: NSMakeRange(2U, commandAsComponents.count - 2U)]; + [_proxySpawner stop]; + return [_proxySpawner startWithArguments: suppliedArguments]; + } + return FALSE; +} + +- (BOOL) commandParse: (NSString *) command +{ + NSArray *commandAsComponents = [command componentsSeparatedByString: @" "]; + if (commandAsComponents.count <= 0U) { + return FALSE; + } + NSString *action = [commandAsComponents objectAtIndex: 0U]; + if ([action isEqualToString: @"CONFIG"]) { + return [self commandParseConfig: commandAsComponents]; + } + if ([action isEqualToString: @"PROXY"]) { + return [self commandParseProxy: commandAsComponents]; + } + if ([action isEqualToString: @"FALLBACK"]) { + return [self commandParseFallback: commandAsComponents]; + } + return FALSE; +} + +- (void) commandRead: (NSNotification *) notification +{ + NSFileHandle *fh = (NSFileHandle *) notification.object; + NSData *chunk = [[notification userInfo] objectForKey: @"NSFileHandleNotificationDataItem"]; + [_commandBuffer appendData: chunk]; + uint32_t commandLen; + for (;;) { + if (_commandBuffer.length <= sizeof commandLen) { + break; + } + memcpy(&commandLen, _commandBuffer.bytes, sizeof commandLen); + if (_commandBuffer.length < commandLen + sizeof commandLen) { + break; + } + NSData *command_ = [_commandBuffer subdataWithRange: NSMakeRange(sizeof commandLen, commandLen)]; + NSData *remainingBuffer = [_commandBuffer subdataWithRange: NSMakeRange(commandLen + sizeof commandLen, _commandBuffer.length - commandLen - sizeof commandLen)]; + _commandBuffer = [[NSMutableData alloc] initWithData: remainingBuffer]; + NSString *command = [[NSString alloc] initWithData: command_ encoding: NSUTF8StringEncoding]; + command = [command stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSLog(@"Received command: [%@]", command); + [self commandParse: command]; + } + [fh readInBackgroundAndNotify]; +} + +- (BOOL) createListener +{ + mode_t sockParentDirPerms = (mode_t) kSOCK_PARENT_DIR_PERMS; + mode_t sockPerms = (mode_t) kSOCK_PERMS; + const char *sockParentDir = [kSOCK_PARENT_DIR cStringUsingEncoding: NSUTF8StringEncoding]; + struct group *group = getgrnam(kSOCK_GROUP_NAME); + if (group == NULL) { + sockParentDirPerms = (mode_t) 0711; + sockPerms = (mode_t) 0666; + } + const mode_t previousMask = umask((mode_t) 0177); + umask((mode_t) 0); + if (mkdir(sockParentDir, sockParentDirPerms) != 0) { + if (errno != EEXIST) { + NSLog(@"mkdir(): [%s]", strerror(errno)); + umask(previousMask); + return FALSE; + } + } else { + chmod(sockParentDir, sockParentDirPerms); + } + if (group != NULL) { + chown(sockParentDir, (uid_t) 0, group->gr_gid); + } + const char *sockPath = [kSOCK_PATH cStringUsingEncoding: NSUTF8StringEncoding]; + size_t sockPathSize = strlen(sockPath) + (size_t) 1U; + struct sockaddr_un *su; + assert(sockPathSize < sizeof su->sun_path); + socklen_t sun_len = (socklen_t) (sizeof *su) + (socklen_t) sockPathSize; + su = calloc(1U, sun_len); + su->sun_family = AF_UNIX; + memcpy(su->sun_path, sockPath, sockPathSize); + su->sun_len = SUN_LEN(su); + [[NSFileManager defaultManager] removeItemAtPath: kSOCK_PATH error: nil]; + CFSocketRef socket = CFSocketCreate(kCFAllocatorDefault, PF_UNIX, SOCK_DGRAM, IPPROTO_IP, 0, NULL, NULL); + CFSocketSetSocketFlags(socket, CFSocketGetSocketFlags(socket) & ~kCFSocketCloseOnInvalidate); + int fd = CFSocketGetNative(socket); + NSData *address = [NSData dataWithBytes: su length: SUN_LEN(su)]; + if (CFSocketSetAddress(socket, (__bridge CFDataRef) address) != kCFSocketSuccess) { + free(su); + CFSocketInvalidate(socket); + CFRelease(socket); + NSLog(@"*** Could not bind to address"); + umask(previousMask); + [[NSFileManager defaultManager] removeItemAtPath: kSOCK_PATH error: nil]; + + return FALSE; + } + free(su); + if (group != NULL) { + chown(sockPath, (uid_t) 0, group->gr_gid); + } + chmod(sockPath, sockPerms); + umask(previousMask); + NSFileHandle *fh = [[NSFileHandle alloc] initWithFileDescriptor: fd closeOnDealloc: TRUE]; + CFRelease(socket); + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + + [fh readInBackgroundAndNotify]; + [center addObserver:self + selector:@selector(commandRead:) + name:@"NSFileHandleReadCompletionNotification" + object:nil]; + return TRUE; +} + +@end diff --git a/DNSCrypt-Config-Updater/dns-updater/dns-updater-Prefix.pch b/DNSCrypt-Config-Updater/dns-updater/dns-updater-Prefix.pch new file mode 100644 index 0000000..41c25e9 --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/dns-updater-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'dns-updater' target in the 'dns-updater' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/DNSCrypt-Config-Updater/dns-updater/main.m b/DNSCrypt-Config-Updater/dns-updater/main.m new file mode 100644 index 0000000..2e110fa --- /dev/null +++ b/DNSCrypt-Config-Updater/dns-updater/main.m @@ -0,0 +1,55 @@ +// +// main.m +// dns-updater +// +// Created by OpenDNS, Inc. on 10/24/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import +#import "DNSUpdater.h" +#import "ProxySpawner.h" +#import "SocketListener.h" + +static DNSUpdater *dnsUpdater; + +static void restoreVanilla(void) +{ + if (dnsUpdater) { + NSLog(@"Restoring vanilla configuration"); + dnsUpdater.wantedState = kDNS_CONFIGURATION_VANILLA; + [dnsUpdater update]; + dnsUpdater = nil; + } +} + +static void sigQuitHandler(int sig) +{ + (void) sig; + restoreVanilla(); + exit(0); +} + +int main(void) +{ + @autoreleasepool { + nice(10); + ProxySpawner *proxySpawner = [[ProxySpawner alloc] init]; + dnsUpdater = [[DNSUpdater alloc] initWithProxySpawner: proxySpawner]; + SocketListener *socketListener = [[SocketListener alloc] initWithDNSUpdater: dnsUpdater andProxySpawner: proxySpawner]; + [socketListener createListener]; + + signal(SIGPIPE, SIG_IGN); + signal(SIGALRM, sigQuitHandler); + signal(SIGHUP, sigQuitHandler); + signal(SIGINT, sigQuitHandler); + signal(SIGQUIT, sigQuitHandler); + signal(SIGTERM, sigQuitHandler); + signal(SIGXCPU, sigQuitHandler); + [dnsUpdater start]; + [[NSRunLoop currentRunLoop] run]; + restoreVanilla(); + } + return 0; +} + diff --git a/DNSCrypt-Menubar/COPYING b/DNSCrypt-Menubar/COPYING new file mode 100644 index 0000000..c831144 --- /dev/null +++ b/DNSCrypt-Menubar/COPYING @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2011 OpenDNS, Inc. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar.xcodeproj/project.pbxproj b/DNSCrypt-Menubar/DNSCrypt-Menubar.xcodeproj/project.pbxproj new file mode 100644 index 0000000..3a6ca1c --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar.xcodeproj/project.pbxproj @@ -0,0 +1,343 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 09651148147D832D007FEE31 /* dnscrypt.icns in Resources */ = {isa = PBXBuildFile; fileRef = 09651147147D832D007FEE31 /* dnscrypt.icns */; }; + 096AEEFA1468A11E009F2AA4 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 096AEEF91468A11E009F2AA4 /* dsa_pub.pem */; }; + 09972870147CCE41004E7017 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0997286F147CCE41004E7017 /* Sparkle.framework */; }; + 09972871147CCEDC004E7017 /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0997286F147CCE41004E7017 /* Sparkle.framework */; }; + 09A13AD2145F3B9000B227A4 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09A13AD1145F3B9000B227A4 /* Cocoa.framework */; }; + 09A13ADC145F3B9000B227A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 09A13ADA145F3B9000B227A4 /* InfoPlist.strings */; }; + 09A13ADE145F3B9000B227A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 09A13ADD145F3B9000B227A4 /* main.m */; }; + 09A13AE2145F3B9000B227A4 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 09A13AE0145F3B9000B227A4 /* Credits.rtf */; }; + 09A13AE5145F3B9000B227A4 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 09A13AE4145F3B9000B227A4 /* AppDelegate.m */; }; + 09A13AE8145F3B9000B227A4 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 09A13AE6145F3B9000B227A4 /* MainMenu.xib */; }; + 09A13AF1145F3C0300B227A4 /* led_green.png in Resources */ = {isa = PBXBuildFile; fileRef = 09A13AEE145F3C0300B227A4 /* led_green.png */; }; + 09A13AF2145F3C0300B227A4 /* led_red.png in Resources */ = {isa = PBXBuildFile; fileRef = 09A13AEF145F3C0300B227A4 /* led_red.png */; }; + 09A13AF3145F3C0300B227A4 /* led_yellow.png in Resources */ = {isa = PBXBuildFile; fileRef = 09A13AF0145F3C0300B227A4 /* led_yellow.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 096AEEF714689FEB009F2AA4 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 09972871147CCEDC004E7017 /* Sparkle.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 09651147147D832D007FEE31 /* dnscrypt.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = dnscrypt.icns; path = ../dnscrypt.icns; sourceTree = ""; }; + 096AEEF91468A11E009F2AA4 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; + 0997286F147CCE41004E7017 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Sparkle.framework; sourceTree = ""; }; + 09A13ACD145F3B9000B227A4 /* DNSCrypt-Menubar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DNSCrypt-Menubar.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 09A13AD1145F3B9000B227A4 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 09A13AD4145F3B9000B227A4 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 09A13AD5145F3B9000B227A4 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 09A13AD6145F3B9000B227A4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 09A13AD9145F3B9000B227A4 /* DNSCrypt-Menubar-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DNSCrypt-Menubar-Info.plist"; sourceTree = ""; }; + 09A13ADB145F3B9000B227A4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 09A13ADD145F3B9000B227A4 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 09A13ADF145F3B9000B227A4 /* DNSCrypt-Menubar-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DNSCrypt-Menubar-Prefix.pch"; sourceTree = ""; }; + 09A13AE1145F3B9000B227A4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + 09A13AE3145F3B9000B227A4 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 09A13AE4145F3B9000B227A4 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 09A13AE7145F3B9000B227A4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + 09A13AEE145F3C0300B227A4 /* led_green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = led_green.png; sourceTree = ""; }; + 09A13AEF145F3C0300B227A4 /* led_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = led_red.png; sourceTree = ""; }; + 09A13AF0145F3C0300B227A4 /* led_yellow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = led_yellow.png; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 09A13ACA145F3B9000B227A4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 09A13AD2145F3B9000B227A4 /* Cocoa.framework in Frameworks */, + 09972870147CCE41004E7017 /* Sparkle.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 09A13AC2145F3B9000B227A4 = { + isa = PBXGroup; + children = ( + 09A13AD7145F3B9000B227A4 /* DNSCrypt-Menubar */, + 09A13AD0145F3B9000B227A4 /* Frameworks */, + 09A13ACE145F3B9000B227A4 /* Products */, + ); + sourceTree = ""; + }; + 09A13ACE145F3B9000B227A4 /* Products */ = { + isa = PBXGroup; + children = ( + 09A13ACD145F3B9000B227A4 /* DNSCrypt-Menubar.app */, + ); + name = Products; + sourceTree = ""; + }; + 09A13AD0145F3B9000B227A4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 0997286F147CCE41004E7017 /* Sparkle.framework */, + 09A13AD1145F3B9000B227A4 /* Cocoa.framework */, + 09A13AD3145F3B9000B227A4 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 09A13AD3145F3B9000B227A4 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 09A13AD4145F3B9000B227A4 /* AppKit.framework */, + 09A13AD5145F3B9000B227A4 /* CoreData.framework */, + 09A13AD6145F3B9000B227A4 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 09A13AD7145F3B9000B227A4 /* DNSCrypt-Menubar */ = { + isa = PBXGroup; + children = ( + 09A13AE3145F3B9000B227A4 /* AppDelegate.h */, + 09A13AE4145F3B9000B227A4 /* AppDelegate.m */, + 09A13AE6145F3B9000B227A4 /* MainMenu.xib */, + 09A13AD8145F3B9000B227A4 /* Supporting Files */, + ); + path = "DNSCrypt-Menubar"; + sourceTree = ""; + }; + 09A13AD8145F3B9000B227A4 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 09651147147D832D007FEE31 /* dnscrypt.icns */, + 09A13AD9145F3B9000B227A4 /* DNSCrypt-Menubar-Info.plist */, + 09A13ADA145F3B9000B227A4 /* InfoPlist.strings */, + 09A13ADD145F3B9000B227A4 /* main.m */, + 09A13ADF145F3B9000B227A4 /* DNSCrypt-Menubar-Prefix.pch */, + 09A13AE0145F3B9000B227A4 /* Credits.rtf */, + 09A13AEE145F3C0300B227A4 /* led_green.png */, + 09A13AEF145F3C0300B227A4 /* led_red.png */, + 09A13AF0145F3C0300B227A4 /* led_yellow.png */, + 096AEEF91468A11E009F2AA4 /* dsa_pub.pem */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 09A13ACC145F3B9000B227A4 /* DNSCrypt-Menubar */ = { + isa = PBXNativeTarget; + buildConfigurationList = 09A13AEB145F3B9000B227A4 /* Build configuration list for PBXNativeTarget "DNSCrypt-Menubar" */; + buildPhases = ( + 09A13AC9145F3B9000B227A4 /* Sources */, + 09A13ACA145F3B9000B227A4 /* Frameworks */, + 09A13ACB145F3B9000B227A4 /* Resources */, + 096AEEF714689FEB009F2AA4 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "DNSCrypt-Menubar"; + productName = "DNSCrypt-Menubar"; + productReference = 09A13ACD145F3B9000B227A4 /* DNSCrypt-Menubar.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 09A13AC4145F3B9000B227A4 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0430; + }; + buildConfigurationList = 09A13AC7145F3B9000B227A4 /* Build configuration list for PBXProject "DNSCrypt-Menubar" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 09A13AC2145F3B9000B227A4; + productRefGroup = 09A13ACE145F3B9000B227A4 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 09A13ACC145F3B9000B227A4 /* DNSCrypt-Menubar */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 09A13ACB145F3B9000B227A4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 09A13ADC145F3B9000B227A4 /* InfoPlist.strings in Resources */, + 09A13AE2145F3B9000B227A4 /* Credits.rtf in Resources */, + 09A13AE8145F3B9000B227A4 /* MainMenu.xib in Resources */, + 09A13AF1145F3C0300B227A4 /* led_green.png in Resources */, + 09A13AF2145F3C0300B227A4 /* led_red.png in Resources */, + 09A13AF3145F3C0300B227A4 /* led_yellow.png in Resources */, + 096AEEFA1468A11E009F2AA4 /* dsa_pub.pem in Resources */, + 09651148147D832D007FEE31 /* dnscrypt.icns in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 09A13AC9145F3B9000B227A4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 09A13ADE145F3B9000B227A4 /* main.m in Sources */, + 09A13AE5145F3B9000B227A4 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 09A13ADA145F3B9000B227A4 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 09A13ADB145F3B9000B227A4 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 09A13AE0145F3B9000B227A4 /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + 09A13AE1145F3B9000B227A4 /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + 09A13AE6145F3B9000B227A4 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 09A13AE7145F3B9000B227A4 /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 09A13AE9145F3B9000B227A4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 09A13AEA145F3B9000B227A4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + SDKROOT = macosx; + }; + name = Release; + }; + 09A13AEC145F3B9000B227A4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DNSCrypt-Menubar/DNSCrypt-Menubar-Prefix.pch"; + INFOPLIST_FILE = "DNSCrypt-Menubar/DNSCrypt-Menubar-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 09A13AED145F3B9000B227A4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DNSCrypt-Menubar/DNSCrypt-Menubar-Prefix.pch"; + INFOPLIST_FILE = "DNSCrypt-Menubar/DNSCrypt-Menubar-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 09A13AC7145F3B9000B227A4 /* Build configuration list for PBXProject "DNSCrypt-Menubar" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 09A13AE9145F3B9000B227A4 /* Debug */, + 09A13AEA145F3B9000B227A4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 09A13AEB145F3B9000B227A4 /* Build configuration list for PBXNativeTarget "DNSCrypt-Menubar" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 09A13AEC145F3B9000B227A4 /* Debug */, + 09A13AED145F3B9000B227A4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 09A13AC4145F3B9000B227A4 /* Project object */; +} diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/DNSCrypt-Menubar/DNSCrypt-Menubar.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..76fd5bf --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.h b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.h new file mode 100644 index 0000000..cd0041b --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.h @@ -0,0 +1,34 @@ +// +// AppDelegate.h +// DNSCrypt-Menubar +// +// Created by OpenDNS, Inc. on 10/31/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import + +#define kRESOLVER_IP_LOCALHOST @"127.0.0.1" +#define kRESOLVER_IP_OPENDNS1 @"208.67.220.220" +#define kRESOLVER_IP_OPENDNS2 @"208.67.222.222" +#define kDNSCRYPT_RESOLVER @"208.67.220.220" + +#define kDNSCRYPT_PREFPANE_APP_PATH @"/Library/PreferencePanes/DNSCrypt.prefPane" + +@interface AppDelegate : NSObject + +@property (assign) IBOutlet NSWindow *window; +@property (strong) IBOutlet NSMenu *dnscryptMenu; +@property (strong) NSStatusItem *statusItem; +@property (strong) IBOutlet NSMenuItem *versionMenuItem; + +typedef enum { + kDNS_CONFIGURATION_UNKNOWN, kDNS_CONFIGURATION_VANILLA, kDNS_CONFIGURATION_LOCALHOST, kDNS_CONFIGURATION_OPENDNS +} DNSConfigurationState; + +@property (strong) IBOutlet NSMenuItem *statusResolversMenuItem; +@property (strong) IBOutlet NSMenuItem *statusConfigurationMenuItem; + +- (IBAction)preferencesMenuItemPushed:(NSMenuItem *)sender; + +@end diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.m b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.m new file mode 100644 index 0000000..ec9f3c7 --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/AppDelegate.m @@ -0,0 +1,142 @@ +// +// AppDelegate.m +// DNSCrypt-Menubar +// +// Created by OpenDNS, Inc. on 10/31/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import "AppDelegate.h" +#import "Sparkle/Sparkle.h" + +@implementation AppDelegate +@synthesize statusResolversMenuItem = _statusResolversMenuItem; +@synthesize statusConfigurationMenuItem = _statusConfigurationMenuItem; +@synthesize window = _window; +@synthesize dnscryptMenu = _dnscryptMenu; +@synthesize statusItem = _statusItem; +@synthesize versionMenuItem = _versionMenuItem; + +DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN; + +- (BOOL) resolversForService: (NSArray *) resolversForService includeResolvers:(NSArray *) resolvers +{ + NSUInteger matches = 0U; + + for (NSString *resolverForService in resolversForService) { + if ([resolvers containsObject: resolverForService]) { + matches++; + } else { + break; + } + } + if (matches >= resolvers.count) { + return TRUE; + } + return FALSE; +} + +- (void) updateLedStatus +{ + NSBundle *bundle = [NSBundle mainBundle]; + NSImage *led = nil; + + switch (currentState) { + case kDNS_CONFIGURATION_OPENDNS: + led = [[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"led_yellow.png"]]; + break; + case kDNS_CONFIGURATION_LOCALHOST: + led = [[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"led_green.png"]]; + break; + default: + led = [[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"led_red.png"]]; + } + _statusItem.image = led; +} + +- (BOOL) updateStatusWithCurrentConfig +{ + currentState = kDNS_CONFIGURATION_UNKNOWN; + NSArray *resolversForLocalhost = [NSArray arrayWithObjects: kRESOLVER_IP_LOCALHOST, nil]; + NSArray *resolversForOpenDNS = [NSArray arrayWithObjects: kRESOLVER_IP_OPENDNS1, kRESOLVER_IP_OPENDNS2, nil]; + + NSError *err; + NSString *resolvConf = [NSString stringWithContentsOfFile: @"/etc/resolv.conf" encoding: NSISOLatin1StringEncoding error: &err]; + NSString *currentStateString = @""; + NSMutableString *resolversString = [[NSMutableString alloc] init]; + if (! resolvConf) { + currentState = kDNS_CONFIGURATION_UNKNOWN; + currentStateString = NSLocalizedString(@"Network unavailable", @"Current state"); + [resolversString appendString: NSLocalizedString(@"None", @"No current state")]; + } else { + NSMutableArray *resolvers = [[NSMutableArray alloc] init]; + NSArray *lines = [resolvConf componentsSeparatedByString: @"\n"]; + for (NSString *line_ in lines) { + NSString *line = [line_ stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSArray *entry = [line componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; + if (![[entry objectAtIndex: 0U] isEqualToString: @"nameserver"]) { + continue; + } + NSString *resolver = [entry objectAtIndex: 1U]; + [resolvers addObject: resolver]; + [resolversString appendFormat: @"%s%@", (resolversString.length > 0 ? ", " : ""), resolver]; + } + if ([self resolversForService: resolvers includeResolvers: resolversForLocalhost]) { + currentState = kDNS_CONFIGURATION_LOCALHOST; + currentStateString = NSLocalizedString(@"DNSCrypt", @"Current state"); + } else if ([self resolversForService: resolvers includeResolvers: resolversForOpenDNS]) { + currentStateString = NSLocalizedString(@"OpenDNS", @"Current state"); + currentState = kDNS_CONFIGURATION_OPENDNS; + } else { + currentStateString = NSLocalizedString(@"Default", @"Current state"); + currentState = kDNS_CONFIGURATION_VANILLA; + } + if ([resolversString isEqualToString: kRESOLVER_IP_LOCALHOST]) { + resolversString = [NSString stringWithFormat: NSLocalizedString(@"%@\nusing DNSCrypt", @"Current resolver when DNSCrypt has been enabled"), kDNSCRYPT_RESOLVER]; + } + } + [self updateLedStatus]; + _statusConfigurationMenuItem.title = currentStateString; + _statusResolversMenuItem.title = resolversString; + + return TRUE; +} + +- (void) periodicallyUpdateStatusWithCurrentConfig { + [self updateStatusWithCurrentConfig]; + [NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil]; + [self performSelector: @selector(periodicallyUpdateStatusWithCurrentConfig) withObject:nil afterDelay: 2.5]; +} + +- (void) awakeFromNib +{ + _statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; + _statusItem.highlightMode = TRUE; + _statusItem.toolTip = @"DNSCrypt"; + _statusItem.menu = _dnscryptMenu; + + NSString *versionStringFormat = NSLocalizedString(@"Client version: %@", @"Current version in the menu"); + NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; + _versionMenuItem.title = [NSString stringWithFormat: versionStringFormat, version]; + [self periodicallyUpdateStatusWithCurrentConfig]; + [self updateLedStatus]; +} + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + [[SUUpdater sharedUpdater] setSendsSystemProfile: TRUE]; +} + +- (IBAction)preferencesMenuItemPushed:(NSMenuItem *)sender +{ + NSString *userPreferencePanePath = [NSString stringWithFormat: @"%@" kDNSCRYPT_PREFPANE_APP_PATH, NSHomeDirectory()]; + NSArray *preferencePanePaths = [NSArray arrayWithObjects: userPreferencePanePath, kDNSCRYPT_PREFPANE_APP_PATH, nil]; + for (NSString *preferencePanePath in preferencePanePaths) { + if ([[NSFileManager defaultManager] fileExistsAtPath: preferencePanePath]) { + [[NSWorkspace sharedWorkspace] openFile: preferencePanePath]; + return; + } + } +} + +@end diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/DNSCrypt-Menubar-Info.plist b/DNSCrypt-Menubar/DNSCrypt-Menubar/DNSCrypt-Menubar-Info.plist new file mode 100644 index 0000000..f686c99 --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/DNSCrypt-Menubar-Info.plist @@ -0,0 +1,42 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + dnscrypt.icns + CFBundleIdentifier + com.opendns.osx.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + DNSCrypt + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.7 (beta) + CFBundleSignature + ???? + CFBundleVersion + 0.7 + LSApplicationCategoryType + public.app-category.utilities + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + LSUIElement + + NSHumanReadableCopyright + Copyright © 2011 OpenDNS, Inc. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + SUFeedURL + http://shared.opendns.com/upgrade/osx/dnscrypt-client/updater.xml + SUPublicDSAKeyFile + dsa_pub.pem + + diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/DNSCrypt-Menubar-Prefix.pch b/DNSCrypt-Menubar/DNSCrypt-Menubar/DNSCrypt-Menubar-Prefix.pch new file mode 100644 index 0000000..9c54144 --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/DNSCrypt-Menubar-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'DNSCrypt-Menubar' target in the 'DNSCrypt-Menubar' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/dsa_pub.pem b/DNSCrypt-Menubar/DNSCrypt-Menubar/dsa_pub.pem new file mode 100644 index 0000000..1533bdf --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/dsa_pub.pem @@ -0,0 +1,12 @@ +-----BEGIN PUBLIC KEY----- +MIIBtzCCASwGByqGSM44BAEwggEfAoGBAIpCA2NYJe0E0ilZVp3nkP9301l2/h+Y +ltDQhkWaSYrArR5iqmQcNbYgsULy3vjZs+4CgXea81zCzIcX8yvh8AFH9E4aWAJN +bszYHCfemAq0YBbwwfsc4fSjvGKvDKwVcnn/nxLtcuA9c5pfW8GWUbGfDhGHaAaC +AZhWA0SOh5ODAhUA6XR9JwsaIogtEqQZaoxUgtWPPDECgYEAgLMPGhjRSXgY4vhR +60H4kMtkd/W0k/rPDOvO63pUFKowtzjXfMpiCYVMpB6+hjC+LrtvkiB8P1nVpa7q +rdNB32NFqeqR9gqZwU7aPGWHgzB9nlZw/uGfvQ/tCz6Z0uSmenWaOTvZvJoUCs5N +Cjzt8R/0YYYJA87c9hHHaEoLZRgDgYQAAoGABFH0SUjg4tpuWodWuRT03cKRyIrX +x6gHxKelSBa/5RvykluxNUVKWs3YCR5LDnjsFxR7bfwNPkuvWyUGvhjEDLH3tLnS +YPlMdzl1eRf0NF6FWl5HZetfY2mgPDp/iy1mb3QaVuxeAxQZx72gqVdmM3UwQBN/ +8+Fb9X3V/R7bYgQ= +-----END PUBLIC KEY----- diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/Credits.rtf b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/Credits.rtf new file mode 100644 index 0000000..764b914 --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/Credits.rtf @@ -0,0 +1,30 @@ +{\rtf1\ansi\ansicpg65001\cocoartf1138\cocoasubrtf230 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720 + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} \ No newline at end of file diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/InfoPlist.strings b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/MainMenu.xib b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/MainMenu.xib new file mode 100644 index 0000000..17169f6 --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/en.lproj/MainMenu.xib @@ -0,0 +1,485 @@ + + + + 1070 + 11C73 + 1938 + 1138.23 + 567.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1938 + + + NSMenu + NSMenuItem + NSCustomObject + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + NSApplication + + + FirstResponder + + + NSApplication + + + AppDelegate + + + + + + + DNSCrypt Preferences + , + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + YES + YES + + + 2147483647 + + + + + + Check for updates + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Current configuration: + + 2147483647 + + + + + + YES + 1 + ... + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + YES + Current resolvers: + + 2147483647 + + + + + + YES + 1 + ... + + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Hide from the menu bar + h + 1048576 + 2147483647 + + + + + + + SUUpdater + + + + + + + delegate + + + + 495 + + + + terminate: + + + + 560 + + + + dnscryptMenu + + + + 543 + + + + preferencesMenuItemPushed: + + + + 548 + + + + statusConfigurationMenuItem + + + + 551 + + + + statusResolversMenuItem + + + + 552 + + + + versionMenuItem + + + + 568 + + + + checkForUpdates: + + + + 563 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 494 + + + + + 539 + + + + + + + + + + + + + + + + + + + + 540 + + + + + 541 + + + + + 542 + + + + + 549 + + + + + 550 + + + + + 553 + + + + + 554 + + + + + 557 + + + + + 558 + + + + + 561 + + + + + 562 + + + + + 564 + + + + + 565 + + + + + 566 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 568 + + + + + AppDelegate + NSObject + + preferencesMenuItemPushed: + NSMenuItem + + + preferencesMenuItemPushed: + + preferencesMenuItemPushed: + NSMenuItem + + + + NSMenu + NSMenuItem + NSMenuItem + NSMenuItem + NSWindow + + + + dnscryptMenu + NSMenu + + + statusConfigurationMenuItem + NSMenuItem + + + statusResolversMenuItem + NSMenuItem + + + versionMenuItem + NSMenuItem + + + window + NSWindow + + + + IBProjectSource + ./Classes/AppDelegate.h + + + + SUUpdater + NSObject + + checkForUpdates: + id + + + checkForUpdates: + + checkForUpdates: + id + + + + delegate + id + + + delegate + + delegate + id + + + + IBProjectSource + ./Classes/SUUpdater.h + + + + + 0 + IBCocoaFramework + YES + 3 + + {9, 8} + {7, 2} + + + diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/led_green.png b/DNSCrypt-Menubar/DNSCrypt-Menubar/led_green.png new file mode 100644 index 0000000..3271ff2 Binary files /dev/null and b/DNSCrypt-Menubar/DNSCrypt-Menubar/led_green.png differ diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/led_red.png b/DNSCrypt-Menubar/DNSCrypt-Menubar/led_red.png new file mode 100644 index 0000000..870fe5b Binary files /dev/null and b/DNSCrypt-Menubar/DNSCrypt-Menubar/led_red.png differ diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/led_yellow.png b/DNSCrypt-Menubar/DNSCrypt-Menubar/led_yellow.png new file mode 100644 index 0000000..69187ed Binary files /dev/null and b/DNSCrypt-Menubar/DNSCrypt-Menubar/led_yellow.png differ diff --git a/DNSCrypt-Menubar/DNSCrypt-Menubar/main.m b/DNSCrypt-Menubar/DNSCrypt-Menubar/main.m new file mode 100644 index 0000000..70b7067 --- /dev/null +++ b/DNSCrypt-Menubar/DNSCrypt-Menubar/main.m @@ -0,0 +1,15 @@ +// +// main.m +// DNSCrypt-Menubar +// +// Created by OpenDNS, Inc. on 10/31/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + nice(10); + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/DNSCrypt-Menubar/Sparkle.framework/Headers/SUAppcast.h b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUAppcast.h new file mode 100644 index 0000000..5a60d2f --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUAppcast.h @@ -0,0 +1,36 @@ +// +// SUAppcast.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCAST_H +#define SUAPPCAST_H + +@class SUAppcastItem; +@interface SUAppcast : NSObject +{ +@private + NSArray *items; + NSString *userAgentString; + id delegate; + NSString *downloadFilename; + NSURLDownload *download; +} + +- (void)fetchAppcastFromURL:(NSURL *)url; +- (void)setDelegate:delegate; +- (void)setUserAgentString:(NSString *)userAgentString; + +- (NSArray *)items; + +@end + +@interface NSObject (SUAppcastDelegate) +- (void)appcastDidFinishLoading:(SUAppcast *)appcast; +- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Headers/SUAppcastItem.h b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUAppcastItem.h new file mode 100644 index 0000000..d106732 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUAppcastItem.h @@ -0,0 +1,58 @@ +// +// SUAppcastItem.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCASTITEM_H +#define SUAPPCASTITEM_H + +@interface SUAppcastItem : NSObject +{ +@private + NSString *title; + NSDate *date; + NSString *itemDescription; + + NSURL *releaseNotesURL; + + NSString *DSASignature; + NSString *minimumSystemVersion; + + NSURL *fileURL; + NSString *versionString; + NSString *displayVersionString; + + NSDictionary *deltaUpdates; + + NSDictionary *propertiesDictionary; + + NSURL *infoURL; // UK 2007-08-31 +} + +// Initializes with data from a dictionary provided by the RSS class. +- initWithDictionary:(NSDictionary *)dict; +- initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error; + +- (NSString *)title; +- (NSString *)versionString; +- (NSString *)displayVersionString; +- (NSDate *)date; +- (NSString *)itemDescription; +- (NSURL *)releaseNotesURL; +- (NSURL *)fileURL; +- (NSString *)DSASignature; +- (NSString *)minimumSystemVersion; +- (NSDictionary *)deltaUpdates; +- (BOOL)isDeltaUpdate; + +// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. +- (NSDictionary *)propertiesDictionary; + +- (NSURL *)infoURL; // UK 2007-08-31 + +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Headers/SUUpdater.h b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUUpdater.h new file mode 100644 index 0000000..ff04620 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUUpdater.h @@ -0,0 +1,161 @@ +// +// SUUpdater.h +// Sparkle +// +// Created by Andy Matuschak on 1/4/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUUPDATER_H +#define SUUPDATER_H + +#import "SUVersionComparisonProtocol.h" +#import "SUVersionDisplayProtocol.h" + +@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; + +@interface SUUpdater : NSObject +{ +@private + NSTimer *checkTimer; + SUUpdateDriver *driver; + + NSString *customUserAgentString; + SUHost *host; + IBOutlet id delegate; +} + ++ (SUUpdater *)sharedUpdater; ++ (SUUpdater *)updaterForBundle:(NSBundle *)bundle; +- initForBundle:(NSBundle *)bundle; + +- (NSBundle *)hostBundle; + +- (void)setDelegate:(id)delegate; +- delegate; + +- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks; +- (BOOL)automaticallyChecksForUpdates; + +- (void)setUpdateCheckInterval:(NSTimeInterval)interval; +- (NSTimeInterval)updateCheckInterval; + +- (void)setFeedURL:(NSURL *)feedURL; +- (NSURL *)feedURL; // *** MUST BE CALLED ON MAIN THREAD *** + +- (void)setUserAgentString:(NSString *)userAgent; +- (NSString *)userAgentString; + +- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile; +- (BOOL)sendsSystemProfile; + +- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates; +- (BOOL)automaticallyDownloadsUpdates; + +// This IBAction is meant for a main menu item. Hook up any menu item to this action, +// and Sparkle will check for updates and report back its findings verbosely. +- (IBAction)checkForUpdates:(id)sender; + +// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update, +// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an +// update is found, it will be downloaded and prepped for installation. +- (void)checkForUpdatesInBackground; + +// Date of last update check. Returns nil if no check has been performed. +- (NSDate*)lastUpdateCheckDate; + +// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though, +// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI. +- (void)checkForUpdateInformation; + +// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer. +- (void)resetUpdateCycle; + +- (BOOL)updateInProgress; + +@end + + +// ----------------------------------------------------------------------------- +// SUUpdater Delegate: +// ----------------------------------------------------------------------------- + +@interface NSObject (SUUpdaterDelegateInformalProtocol) + +// Use this to keep Sparkle from popping up e.g. while your setup assistant is showing: +- (BOOL)updaterMayCheckForUpdates:(SUUpdater *)bundle; + +// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. +- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; + +// Override this to dynamically specify the entire URL. +- (NSString*)feedURLStringForUpdater:(SUUpdater*)updater; + +// Use this to override the default behavior for Sparkle prompting the user about automatic update checks. +- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle; + +// Implement this if you want to do some special handling with the appcast once it finishes loading. +- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; + +// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding +// a valid update, if any, in the given appcast. +- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle; + +// Sent when a valid update is found by the update driver. +- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update; + +// Sent when a valid update is not found. +- (void)updaterDidNotFindUpdate:(SUUpdater *)update; + +// Sent immediately before installing the specified update. +- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update; + +// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue. +// This is not called if the user didn't relaunch on the previous update, in that case it will immediately +// restart. +- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation; + +// Some apps *can not* be relaunched in certain circumstances. They can use this method +// to prevent a relaunch "hard": +- (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; + +// Called immediately before relaunching. +- (void)updaterWillRelaunchApplication:(SUUpdater *)updater; + +// This method allows you to provide a custom version comparator. +// If you don't implement this method or return nil, the standard version comparator will be used. +- (id )versionComparatorForUpdater:(SUUpdater *)updater; + +// This method allows you to provide a custom version comparator. +// If you don't implement this method or return nil, the standard version displayer will be used. +- (id )versionDisplayerForUpdater:(SUUpdater *)updater; + +// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle. +- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; + +// Called before and after, respectively, an updater shows a modal alert window, to give the host +// the opportunity to hide attached windows etc. that may get in the way: +-(void) updaterWillShowModalAlert:(SUUpdater *)updater; +-(void) updaterDidShowModalAlert:(SUUpdater *)updater; + +@end + + +// ----------------------------------------------------------------------------- +// Constants: +// ----------------------------------------------------------------------------- + +// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds. +#if defined(DEBUG) && DEBUG && 0 +#define SU_MIN_CHECK_INTERVAL 60 +#else +#define SU_MIN_CHECK_INTERVAL 60*60 +#endif + +#if defined(DEBUG) && DEBUG && 0 +#define SU_DEFAULT_CHECK_INTERVAL 60 +#else +#define SU_DEFAULT_CHECK_INTERVAL 60*60*24 +#endif + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Headers/SUVersionComparisonProtocol.h b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUVersionComparisonProtocol.h new file mode 100644 index 0000000..6c65ea4 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUVersionComparisonProtocol.h @@ -0,0 +1,29 @@ +// +// SUVersionComparisonProtocol.h +// Sparkle +// +// Created by Andy Matuschak on 12/21/07. +// Copyright 2007 Andy Matuschak. All rights reserved. +// + +#ifndef SUVERSIONCOMPARISONPROTOCOL_H +#define SUVERSIONCOMPARISONPROTOCOL_H + +#import + +/*! + @protocol + @abstract Implement this protocol to provide version comparison facilities for Sparkle. +*/ +@protocol SUVersionComparison + +/*! + @method + @abstract An abstract method to compare two version strings. + @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. +*/ +- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! + +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Headers/SUVersionDisplayProtocol.h b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUVersionDisplayProtocol.h new file mode 100644 index 0000000..368b9c9 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Headers/SUVersionDisplayProtocol.h @@ -0,0 +1,27 @@ +// +// SUVersionDisplayProtocol.h +// EyeTV +// +// Created by Uli Kusterer on 08.12.09. +// Copyright 2009 Elgato Systems GmbH. All rights reserved. +// + +#import + + +/*! + @protocol + @abstract Implement this protocol to apply special formatting to the two + version numbers. +*/ +@protocol SUVersionDisplay + +/*! + @method + @abstract An abstract method to format two version strings. + @discussion You get both so you can display important distinguishing + information, but leave out unnecessary/confusing parts. +*/ +-(void) formatVersion: (NSString**)inOutVersionA andVersion: (NSString**)inOutVersionB; + +@end diff --git a/DNSCrypt-Menubar/Sparkle.framework/Headers/Sparkle.h b/DNSCrypt-Menubar/Sparkle.framework/Headers/Sparkle.h new file mode 100644 index 0000000..08dd577 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Headers/Sparkle.h @@ -0,0 +1,21 @@ +// +// Sparkle.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SPARKLE_H +#define SPARKLE_H + +// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless +// there are name-space collisions) so we can list all of them to start with: + +#import + +#import +#import +#import + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/Info.plist b/DNSCrypt-Menubar/Sparkle.framework/Resources/Info.plist new file mode 100644 index 0000000..056166b --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Resources/Info.plist @@ -0,0 +1,40 @@ + + + + + BuildMachineOSBuild + 11C73 + CFBundleDevelopmentRegion + en + CFBundleExecutable + Sparkle + CFBundleIdentifier + org.andymatuschak.Sparkle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sparkle + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.5 Beta (git) + CFBundleSignature + ???? + CFBundleVersion + 290f64f + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 4D199 + DTPlatformVersion + GM + DTSDKBuild + 10K549 + DTSDKName + macosx10.6 + DTXcode + 0420 + DTXcodeBuild + 4D199 + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/License.txt b/DNSCrypt-Menubar/Sparkle.framework/Resources/License.txt new file mode 100644 index 0000000..978193f --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Resources/License.txt @@ -0,0 +1,153 @@ +Copyright (c) 2006 Andy Matuschak + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +================= +EXTERNAL LICENSES +================= + +This project uses software developed by the OpenSSL Project for use in the OpenSSL +Toolkit (http://www.openssl.org). This toolkit is licensed as follows: +/* ==================================================================== +* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modiÞcation, are permitted provided that the following conditions +* are met: +* +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* +* 3. All advertising materials mentioning features or use of this +* software must display the following acknowledgment: +* ÒThis product includes software developed by the OpenSSL Project +* for use in the OpenSSL Toolkit. (http://www.openssl.org/)Ó +* +* 4. The names ÒOpenSSL ToolkitÓ and ÒOpenSSL ProjectÓ must not be used to +* endorse or promote products derived from this software without +* prior written permission. For written permission, please contact +* openssl-core@openssl.org. +* +* 5. Products derived from this software may not be called ÒOpenSSLÓ +* nor may ÒOpenSSLÓ appear in their names without prior written +* permission of the OpenSSL Project. +* +* 6. Redistributions of any form whatsoever must retain the following + +* acknowledgment: +* ÒThis product includes software developed by the OpenSSL Project +* for use in the OpenSSL Toolkit (http://www.openssl.org/)Ó +* +* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS ISÕÕ AND ANY +* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +* OF THE POSSIBILITY OF SUCH DAMAGE. +* ==================================================================== +* +* This product includes cryptographic software written by Eric Young +* (eay@cryptsoft.com). This product includes software written by Tim +* Hudson (tjh@cryptsoft.com). +* +*/ + +Original SSLeay License +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +* All rights reserved. +* +* This package is an SSL implementation written +* by Eric Young (eay@cryptsoft.com). +* The implementation was written so as to conform with Netscapes SSL. +* +* This library is free for commercial and non-commercial use as long as +* the following conditions are aheared to. The following conditions +* apply to all code found in this distribution, be it the RC4, RSA, +* lhash, DES, etc., code; not just the SSL code. The SSL documentation +* included with this distribution is covered by the same copyright terms +* except that the holder is Tim Hudson (tjh@cryptsoft.com). +* +* Copyright remains Eric YoungÕs, and as such any Copyright notices in +* the code are not to be removed. +* If this package is used in a product, Eric Young should be given attribution +* as the author of the parts of the library used. +* This can be in the form of a textual message at program startup or +* in documentation (online or textual) provided with the package. +* +* Redistribution and use in source and binary forms, with or without +* modiÞcation, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. All advertising materials mentioning features or use of this software +* must display the following acknowledgement: +* ÒThis product includes cryptographic software written by +* Eric Young (eay@cryptsoft.com)Ó +* The word ÔcryptographicÕ can be left out if the rouines from the library +* being used are not cryptographic related :-). +* 4. If you include any Windows speciÞc code (or a derivative thereof) from +* the apps directory (application code) you must include an acknowledgement: +* ÒThis product includes software written by Tim Hudson (tjh@cryptsoft.com)Ó +* +* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS ISÕÕ AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGE. +* +* The licence and distribution terms for any publically available version or +* derivative of this code cannot be changed. i.e. this code cannot simply be +* copied and put under another distribution licence +* [including the GNU Public Licence.] +*/ + +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (: +/*- + * Copyright 2003-2005 Colin Percival + * All rights reserved + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted providing that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/SUModelTranslation.plist b/DNSCrypt-Menubar/Sparkle.framework/Resources/SUModelTranslation.plist new file mode 100644 index 0000000..63644f0 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Resources/SUModelTranslation.plist @@ -0,0 +1,182 @@ + + + + + ADP2,1 + Developer Transition Kit + iMac1,1 + iMac G3 (Rev A-D) + iMac4,1 + iMac (Core Duo) + iMac4,2 + iMac for Education (17-inch, Core Duo) + iMac5,1 + iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) + iMac5,2 + iMac (Core 2 Duo, 17 inch, Combo Drive) + iMac6,1 + iMac (Core 2 Duo, 24 inch, SuperDrive) + iMac8,1 + iMac (April 2008) + MacBook1,1 + MacBook (Core Duo) + MacBook2,1 + MacBook (Core 2 Duo) + MacBook4,1 + MacBook (Core 2 Duo Feb 2008) + MacBookAir1,1 + MacBook Air (January 2008) + MacBookAir2,1 + MacBook Air (June 2009) + MacBookAir3,1 + MacBook Air (October 2010) + MacBookPro1,1 + MacBook Pro Core Duo (15-inch) + MacBookPro1,2 + MacBook Pro Core Duo (17-inch) + MacBookPro2,1 + MacBook Pro Core 2 Duo (17-inch) + MacBookPro2,2 + MacBook Pro Core 2 Duo (15-inch) + MacBookPro3,1 + MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) + MacBookPro3,2 + MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) + MacBookPro4,1 + MacBook Pro (Core 2 Duo Feb 2008) + Macmini1,1 + Mac Mini (Core Solo/Duo) + MacPro1,1 + Mac Pro (four-core) + MacPro2,1 + Mac Pro (eight-core) + MacPro3,1 + Mac Pro (January 2008 4- or 8- core "Harpertown") + MacPro4,1 + Mac Pro (March 2009) + MacPro5,1 + Mac Pro (August 2010) + PowerBook1,1 + PowerBook G3 + PowerBook2,1 + iBook G3 + PowerBook2,2 + iBook G3 (FireWire) + PowerBook2,3 + iBook G3 + PowerBook2,4 + iBook G3 + PowerBook3,1 + PowerBook G3 (FireWire) + PowerBook3,2 + PowerBook G4 + PowerBook3,3 + PowerBook G4 (Gigabit Ethernet) + PowerBook3,4 + PowerBook G4 (DVI) + PowerBook3,5 + PowerBook G4 (1GHz / 867MHz) + PowerBook4,1 + iBook G3 (Dual USB, Late 2001) + PowerBook4,2 + iBook G3 (16MB VRAM) + PowerBook4,3 + iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) + PowerBook5,1 + PowerBook G4 (17 inch) + PowerBook5,2 + PowerBook G4 (15 inch FW 800) + PowerBook5,3 + PowerBook G4 (17-inch 1.33GHz) + PowerBook5,4 + PowerBook G4 (15 inch 1.5/1.33GHz) + PowerBook5,5 + PowerBook G4 (17-inch 1.5GHz) + PowerBook5,6 + PowerBook G4 (15 inch 1.67GHz/1.5GHz) + PowerBook5,7 + PowerBook G4 (17-inch 1.67GHz) + PowerBook5,8 + PowerBook G4 (Double layer SD, 15 inch) + PowerBook5,9 + PowerBook G4 (Double layer SD, 17 inch) + PowerBook6,1 + PowerBook G4 (12 inch) + PowerBook6,2 + PowerBook G4 (12 inch, DVI) + PowerBook6,3 + iBook G4 + PowerBook6,4 + PowerBook G4 (12 inch 1.33GHz) + PowerBook6,5 + iBook G4 (Early-Late 2004) + PowerBook6,7 + iBook G4 (Mid 2005) + PowerBook6,8 + PowerBook G4 (12 inch 1.5GHz) + PowerMac1,1 + Power Macintosh G3 (Blue & White) + PowerMac1,2 + Power Macintosh G4 (PCI Graphics) + PowerMac10,1 + Mac Mini G4 + PowerMac10,2 + Mac Mini (Late 2005) + PowerMac11,2 + Power Macintosh G5 (Late 2005) + PowerMac12,1 + iMac G5 (iSight) + PowerMac2,1 + iMac G3 (Slot-loading CD-ROM) + PowerMac2,2 + iMac G3 (Summer 2000) + PowerMac3,1 + Power Macintosh G4 (AGP Graphics) + PowerMac3,2 + Power Macintosh G4 (AGP Graphics) + PowerMac3,3 + Power Macintosh G4 (Gigabit Ethernet) + PowerMac3,4 + Power Macintosh G4 (Digital Audio) + PowerMac3,5 + Power Macintosh G4 (Quick Silver) + PowerMac3,6 + Power Macintosh G4 (Mirrored Drive Door) + PowerMac4,1 + iMac G3 (Early/Summer 2001) + PowerMac4,2 + iMac G4 (Flat Panel) + PowerMac4,4 + eMac + PowerMac4,5 + iMac G4 (17-inch Flat Panel) + PowerMac5,1 + Power Macintosh G4 Cube + PowerMac6,1 + iMac G4 (USB 2.0) + PowerMac6,3 + iMac G4 (20-inch Flat Panel) + PowerMac6,4 + eMac (USB 2.0, 2005) + PowerMac7,2 + Power Macintosh G5 + PowerMac7,3 + Power Macintosh G5 + PowerMac8,1 + iMac G5 + PowerMac8,2 + iMac G5 (Ambient Light Sensor) + PowerMac9,1 + Power Macintosh G5 (Late 2005) + RackMac1,1 + Xserve G4 + RackMac1,2 + Xserve G4 (slot-loading, cluster node) + RackMac3,1 + Xserve G5 + Xserve1,1 + Xserve (Intel Xeon) + Xserve2,1 + Xserve (January 2008 quad-core) + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/SUStatus.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/SUStatus.nib new file mode 100644 index 0000000..74d62f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/SUStatus.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..222ec10 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..fe2d291 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..15d1c82 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000..9bbb996 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/cs.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..eddb8a7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..5a98852 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..53d787d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/Sparkle.strings new file mode 100644 index 0000000..4725267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/da.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a5cdc33 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0c9c0f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..4e57acd Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..664946d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/de.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a718bac Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..40c6d88 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..73ede86 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..ebfa934 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/en.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..d268ddf Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..2430a9b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..0ff0add Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..8e4ab94 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/es.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Info.plist b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Info.plist new file mode 100644 index 0000000..c9fae2c --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Info.plist @@ -0,0 +1,50 @@ + + + + + BuildMachineOSBuild + 11C73 + CFBundleDevelopmentRegion + English + CFBundleExecutable + finish_installation + CFBundleIconFile + Sparkle + CFBundleIdentifier + org.andymatuschak.sparkle.finish-installation + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 4D199 + DTPlatformVersion + GM + DTSDKBuild + 10K549 + DTSDKName + macosx10.6 + DTXcode + 0420 + DTXcodeBuild + 4D199 + LSBackgroundOnly + 1 + LSMinimumSystemVersion + 10.4 + LSUIElement + 1 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/MacOS/finish_installation b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/MacOS/finish_installation new file mode 100755 index 0000000..6426267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/MacOS/finish_installation differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/PkgInfo b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/SUStatus.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/SUStatus.nib new file mode 100644 index 0000000..74d62f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/SUStatus.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/Sparkle.icns b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/Sparkle.icns new file mode 100644 index 0000000..8e56d45 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/Sparkle.icns differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000..9bbb996 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings new file mode 100644 index 0000000..4725267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..664946d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..ebfa934 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..8e4ab94 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000..2ea7c12 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..4ccd7af Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings new file mode 100644 index 0000000..867de0b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..023c473 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000..9a0bc8b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings new file mode 100644 index 0000000..497cd83 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings new file mode 100644 index 0000000..e6320ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..7dba6a3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..16c3fb8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings new file mode 100644 index 0000000..32af491 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000..b741758 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000..c1f7e85 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b6d2b26 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..172c8ab Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..e9126f7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b6d2b26 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..172c8ab Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..e9126f7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/fr_CA.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..4e61334 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..11c0e17 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..a5392de Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000..2ea7c12 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/is.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..43a112a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..ad650d7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..597b2ff Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..4ccd7af Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/it.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..ae3e677 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0eb6ee3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..a95237c Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/Sparkle.strings new file mode 100644 index 0000000..867de0b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ja.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..31f813a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..34f9d44 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa6378a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ko.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a9fa51a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..22df73b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..7b6473f Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..023c473 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/nl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..3320f52 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..6fb78aa Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..00589de Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000..9a0bc8b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..da60542 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f9e0817 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa81c11 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..da60542 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f9e0817 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa81c11 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_BR.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c0818b0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..b1b19e0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..be34d39 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/Sparkle.strings new file mode 100644 index 0000000..497cd83 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/pt_PT.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e50a8a7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f7d7960 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..bcaf4b0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/Sparkle.strings new file mode 100644 index 0000000..e6320ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ro.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c80c463 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..c59d67b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..2b857f5 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..7dba6a3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/ru.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b833756 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..845fc6f Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..d05528b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/sk.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..0e6acb3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..46bac42 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..bd3642e Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..16c3fb8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/sv.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e18c9ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..a20bcd6 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..b81322c Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/Sparkle.strings new file mode 100644 index 0000000..32af491 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/tr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c574695 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..884abe8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..4787b9b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000..b741758 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_CN.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..eaef210 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..8aa7c42 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..2afd737 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000..c1f7e85 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Resources/zh_TW.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Sparkle b/DNSCrypt-Menubar/Sparkle.framework/Sparkle new file mode 100755 index 0000000..154fe71 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Sparkle differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUAppcast.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUAppcast.h new file mode 100644 index 0000000..5a60d2f --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUAppcast.h @@ -0,0 +1,36 @@ +// +// SUAppcast.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCAST_H +#define SUAPPCAST_H + +@class SUAppcastItem; +@interface SUAppcast : NSObject +{ +@private + NSArray *items; + NSString *userAgentString; + id delegate; + NSString *downloadFilename; + NSURLDownload *download; +} + +- (void)fetchAppcastFromURL:(NSURL *)url; +- (void)setDelegate:delegate; +- (void)setUserAgentString:(NSString *)userAgentString; + +- (NSArray *)items; + +@end + +@interface NSObject (SUAppcastDelegate) +- (void)appcastDidFinishLoading:(SUAppcast *)appcast; +- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h new file mode 100644 index 0000000..d106732 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h @@ -0,0 +1,58 @@ +// +// SUAppcastItem.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCASTITEM_H +#define SUAPPCASTITEM_H + +@interface SUAppcastItem : NSObject +{ +@private + NSString *title; + NSDate *date; + NSString *itemDescription; + + NSURL *releaseNotesURL; + + NSString *DSASignature; + NSString *minimumSystemVersion; + + NSURL *fileURL; + NSString *versionString; + NSString *displayVersionString; + + NSDictionary *deltaUpdates; + + NSDictionary *propertiesDictionary; + + NSURL *infoURL; // UK 2007-08-31 +} + +// Initializes with data from a dictionary provided by the RSS class. +- initWithDictionary:(NSDictionary *)dict; +- initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error; + +- (NSString *)title; +- (NSString *)versionString; +- (NSString *)displayVersionString; +- (NSDate *)date; +- (NSString *)itemDescription; +- (NSURL *)releaseNotesURL; +- (NSURL *)fileURL; +- (NSString *)DSASignature; +- (NSString *)minimumSystemVersion; +- (NSDictionary *)deltaUpdates; +- (BOOL)isDeltaUpdate; + +// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. +- (NSDictionary *)propertiesDictionary; + +- (NSURL *)infoURL; // UK 2007-08-31 + +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUUpdater.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUUpdater.h new file mode 100644 index 0000000..ff04620 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUUpdater.h @@ -0,0 +1,161 @@ +// +// SUUpdater.h +// Sparkle +// +// Created by Andy Matuschak on 1/4/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUUPDATER_H +#define SUUPDATER_H + +#import "SUVersionComparisonProtocol.h" +#import "SUVersionDisplayProtocol.h" + +@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; + +@interface SUUpdater : NSObject +{ +@private + NSTimer *checkTimer; + SUUpdateDriver *driver; + + NSString *customUserAgentString; + SUHost *host; + IBOutlet id delegate; +} + ++ (SUUpdater *)sharedUpdater; ++ (SUUpdater *)updaterForBundle:(NSBundle *)bundle; +- initForBundle:(NSBundle *)bundle; + +- (NSBundle *)hostBundle; + +- (void)setDelegate:(id)delegate; +- delegate; + +- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks; +- (BOOL)automaticallyChecksForUpdates; + +- (void)setUpdateCheckInterval:(NSTimeInterval)interval; +- (NSTimeInterval)updateCheckInterval; + +- (void)setFeedURL:(NSURL *)feedURL; +- (NSURL *)feedURL; // *** MUST BE CALLED ON MAIN THREAD *** + +- (void)setUserAgentString:(NSString *)userAgent; +- (NSString *)userAgentString; + +- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile; +- (BOOL)sendsSystemProfile; + +- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates; +- (BOOL)automaticallyDownloadsUpdates; + +// This IBAction is meant for a main menu item. Hook up any menu item to this action, +// and Sparkle will check for updates and report back its findings verbosely. +- (IBAction)checkForUpdates:(id)sender; + +// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update, +// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an +// update is found, it will be downloaded and prepped for installation. +- (void)checkForUpdatesInBackground; + +// Date of last update check. Returns nil if no check has been performed. +- (NSDate*)lastUpdateCheckDate; + +// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though, +// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI. +- (void)checkForUpdateInformation; + +// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer. +- (void)resetUpdateCycle; + +- (BOOL)updateInProgress; + +@end + + +// ----------------------------------------------------------------------------- +// SUUpdater Delegate: +// ----------------------------------------------------------------------------- + +@interface NSObject (SUUpdaterDelegateInformalProtocol) + +// Use this to keep Sparkle from popping up e.g. while your setup assistant is showing: +- (BOOL)updaterMayCheckForUpdates:(SUUpdater *)bundle; + +// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. +- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; + +// Override this to dynamically specify the entire URL. +- (NSString*)feedURLStringForUpdater:(SUUpdater*)updater; + +// Use this to override the default behavior for Sparkle prompting the user about automatic update checks. +- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle; + +// Implement this if you want to do some special handling with the appcast once it finishes loading. +- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; + +// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding +// a valid update, if any, in the given appcast. +- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle; + +// Sent when a valid update is found by the update driver. +- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update; + +// Sent when a valid update is not found. +- (void)updaterDidNotFindUpdate:(SUUpdater *)update; + +// Sent immediately before installing the specified update. +- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update; + +// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue. +// This is not called if the user didn't relaunch on the previous update, in that case it will immediately +// restart. +- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation; + +// Some apps *can not* be relaunched in certain circumstances. They can use this method +// to prevent a relaunch "hard": +- (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; + +// Called immediately before relaunching. +- (void)updaterWillRelaunchApplication:(SUUpdater *)updater; + +// This method allows you to provide a custom version comparator. +// If you don't implement this method or return nil, the standard version comparator will be used. +- (id )versionComparatorForUpdater:(SUUpdater *)updater; + +// This method allows you to provide a custom version comparator. +// If you don't implement this method or return nil, the standard version displayer will be used. +- (id )versionDisplayerForUpdater:(SUUpdater *)updater; + +// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle. +- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; + +// Called before and after, respectively, an updater shows a modal alert window, to give the host +// the opportunity to hide attached windows etc. that may get in the way: +-(void) updaterWillShowModalAlert:(SUUpdater *)updater; +-(void) updaterDidShowModalAlert:(SUUpdater *)updater; + +@end + + +// ----------------------------------------------------------------------------- +// Constants: +// ----------------------------------------------------------------------------- + +// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds. +#if defined(DEBUG) && DEBUG && 0 +#define SU_MIN_CHECK_INTERVAL 60 +#else +#define SU_MIN_CHECK_INTERVAL 60*60 +#endif + +#if defined(DEBUG) && DEBUG && 0 +#define SU_DEFAULT_CHECK_INTERVAL 60 +#else +#define SU_DEFAULT_CHECK_INTERVAL 60*60*24 +#endif + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h new file mode 100644 index 0000000..6c65ea4 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h @@ -0,0 +1,29 @@ +// +// SUVersionComparisonProtocol.h +// Sparkle +// +// Created by Andy Matuschak on 12/21/07. +// Copyright 2007 Andy Matuschak. All rights reserved. +// + +#ifndef SUVERSIONCOMPARISONPROTOCOL_H +#define SUVERSIONCOMPARISONPROTOCOL_H + +#import + +/*! + @protocol + @abstract Implement this protocol to provide version comparison facilities for Sparkle. +*/ +@protocol SUVersionComparison + +/*! + @method + @abstract An abstract method to compare two version strings. + @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. +*/ +- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! + +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h new file mode 100644 index 0000000..368b9c9 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h @@ -0,0 +1,27 @@ +// +// SUVersionDisplayProtocol.h +// EyeTV +// +// Created by Uli Kusterer on 08.12.09. +// Copyright 2009 Elgato Systems GmbH. All rights reserved. +// + +#import + + +/*! + @protocol + @abstract Implement this protocol to apply special formatting to the two + version numbers. +*/ +@protocol SUVersionDisplay + +/*! + @method + @abstract An abstract method to format two version strings. + @discussion You get both so you can display important distinguishing + information, but leave out unnecessary/confusing parts. +*/ +-(void) formatVersion: (NSString**)inOutVersionA andVersion: (NSString**)inOutVersionB; + +@end diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/Sparkle.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/Sparkle.h new file mode 100644 index 0000000..08dd577 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Headers/Sparkle.h @@ -0,0 +1,21 @@ +// +// Sparkle.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SPARKLE_H +#define SPARKLE_H + +// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless +// there are name-space collisions) so we can list all of them to start with: + +#import + +#import +#import +#import + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/Info.plist b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..056166b --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,40 @@ + + + + + BuildMachineOSBuild + 11C73 + CFBundleDevelopmentRegion + en + CFBundleExecutable + Sparkle + CFBundleIdentifier + org.andymatuschak.Sparkle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sparkle + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.5 Beta (git) + CFBundleSignature + ???? + CFBundleVersion + 290f64f + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 4D199 + DTPlatformVersion + GM + DTSDKBuild + 10K549 + DTSDKName + macosx10.6 + DTXcode + 0420 + DTXcodeBuild + 4D199 + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/License.txt b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/License.txt new file mode 100644 index 0000000..978193f --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/License.txt @@ -0,0 +1,153 @@ +Copyright (c) 2006 Andy Matuschak + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +================= +EXTERNAL LICENSES +================= + +This project uses software developed by the OpenSSL Project for use in the OpenSSL +Toolkit (http://www.openssl.org). This toolkit is licensed as follows: +/* ==================================================================== +* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modiÞcation, are permitted provided that the following conditions +* are met: +* +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* +* 3. All advertising materials mentioning features or use of this +* software must display the following acknowledgment: +* ÒThis product includes software developed by the OpenSSL Project +* for use in the OpenSSL Toolkit. (http://www.openssl.org/)Ó +* +* 4. The names ÒOpenSSL ToolkitÓ and ÒOpenSSL ProjectÓ must not be used to +* endorse or promote products derived from this software without +* prior written permission. For written permission, please contact +* openssl-core@openssl.org. +* +* 5. Products derived from this software may not be called ÒOpenSSLÓ +* nor may ÒOpenSSLÓ appear in their names without prior written +* permission of the OpenSSL Project. +* +* 6. Redistributions of any form whatsoever must retain the following + +* acknowledgment: +* ÒThis product includes software developed by the OpenSSL Project +* for use in the OpenSSL Toolkit (http://www.openssl.org/)Ó +* +* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS ISÕÕ AND ANY +* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +* OF THE POSSIBILITY OF SUCH DAMAGE. +* ==================================================================== +* +* This product includes cryptographic software written by Eric Young +* (eay@cryptsoft.com). This product includes software written by Tim +* Hudson (tjh@cryptsoft.com). +* +*/ + +Original SSLeay License +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +* All rights reserved. +* +* This package is an SSL implementation written +* by Eric Young (eay@cryptsoft.com). +* The implementation was written so as to conform with Netscapes SSL. +* +* This library is free for commercial and non-commercial use as long as +* the following conditions are aheared to. The following conditions +* apply to all code found in this distribution, be it the RC4, RSA, +* lhash, DES, etc., code; not just the SSL code. The SSL documentation +* included with this distribution is covered by the same copyright terms +* except that the holder is Tim Hudson (tjh@cryptsoft.com). +* +* Copyright remains Eric YoungÕs, and as such any Copyright notices in +* the code are not to be removed. +* If this package is used in a product, Eric Young should be given attribution +* as the author of the parts of the library used. +* This can be in the form of a textual message at program startup or +* in documentation (online or textual) provided with the package. +* +* Redistribution and use in source and binary forms, with or without +* modiÞcation, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. All advertising materials mentioning features or use of this software +* must display the following acknowledgement: +* ÒThis product includes cryptographic software written by +* Eric Young (eay@cryptsoft.com)Ó +* The word ÔcryptographicÕ can be left out if the rouines from the library +* being used are not cryptographic related :-). +* 4. If you include any Windows speciÞc code (or a derivative thereof) from +* the apps directory (application code) you must include an acknowledgement: +* ÒThis product includes software written by Tim Hudson (tjh@cryptsoft.com)Ó +* +* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS ISÕÕ AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGE. +* +* The licence and distribution terms for any publically available version or +* derivative of this code cannot be changed. i.e. this code cannot simply be +* copied and put under another distribution licence +* [including the GNU Public Licence.] +*/ + +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (: +/*- + * Copyright 2003-2005 Colin Percival + * All rights reserved + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted providing that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist new file mode 100644 index 0000000..63644f0 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist @@ -0,0 +1,182 @@ + + + + + ADP2,1 + Developer Transition Kit + iMac1,1 + iMac G3 (Rev A-D) + iMac4,1 + iMac (Core Duo) + iMac4,2 + iMac for Education (17-inch, Core Duo) + iMac5,1 + iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) + iMac5,2 + iMac (Core 2 Duo, 17 inch, Combo Drive) + iMac6,1 + iMac (Core 2 Duo, 24 inch, SuperDrive) + iMac8,1 + iMac (April 2008) + MacBook1,1 + MacBook (Core Duo) + MacBook2,1 + MacBook (Core 2 Duo) + MacBook4,1 + MacBook (Core 2 Duo Feb 2008) + MacBookAir1,1 + MacBook Air (January 2008) + MacBookAir2,1 + MacBook Air (June 2009) + MacBookAir3,1 + MacBook Air (October 2010) + MacBookPro1,1 + MacBook Pro Core Duo (15-inch) + MacBookPro1,2 + MacBook Pro Core Duo (17-inch) + MacBookPro2,1 + MacBook Pro Core 2 Duo (17-inch) + MacBookPro2,2 + MacBook Pro Core 2 Duo (15-inch) + MacBookPro3,1 + MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) + MacBookPro3,2 + MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) + MacBookPro4,1 + MacBook Pro (Core 2 Duo Feb 2008) + Macmini1,1 + Mac Mini (Core Solo/Duo) + MacPro1,1 + Mac Pro (four-core) + MacPro2,1 + Mac Pro (eight-core) + MacPro3,1 + Mac Pro (January 2008 4- or 8- core "Harpertown") + MacPro4,1 + Mac Pro (March 2009) + MacPro5,1 + Mac Pro (August 2010) + PowerBook1,1 + PowerBook G3 + PowerBook2,1 + iBook G3 + PowerBook2,2 + iBook G3 (FireWire) + PowerBook2,3 + iBook G3 + PowerBook2,4 + iBook G3 + PowerBook3,1 + PowerBook G3 (FireWire) + PowerBook3,2 + PowerBook G4 + PowerBook3,3 + PowerBook G4 (Gigabit Ethernet) + PowerBook3,4 + PowerBook G4 (DVI) + PowerBook3,5 + PowerBook G4 (1GHz / 867MHz) + PowerBook4,1 + iBook G3 (Dual USB, Late 2001) + PowerBook4,2 + iBook G3 (16MB VRAM) + PowerBook4,3 + iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) + PowerBook5,1 + PowerBook G4 (17 inch) + PowerBook5,2 + PowerBook G4 (15 inch FW 800) + PowerBook5,3 + PowerBook G4 (17-inch 1.33GHz) + PowerBook5,4 + PowerBook G4 (15 inch 1.5/1.33GHz) + PowerBook5,5 + PowerBook G4 (17-inch 1.5GHz) + PowerBook5,6 + PowerBook G4 (15 inch 1.67GHz/1.5GHz) + PowerBook5,7 + PowerBook G4 (17-inch 1.67GHz) + PowerBook5,8 + PowerBook G4 (Double layer SD, 15 inch) + PowerBook5,9 + PowerBook G4 (Double layer SD, 17 inch) + PowerBook6,1 + PowerBook G4 (12 inch) + PowerBook6,2 + PowerBook G4 (12 inch, DVI) + PowerBook6,3 + iBook G4 + PowerBook6,4 + PowerBook G4 (12 inch 1.33GHz) + PowerBook6,5 + iBook G4 (Early-Late 2004) + PowerBook6,7 + iBook G4 (Mid 2005) + PowerBook6,8 + PowerBook G4 (12 inch 1.5GHz) + PowerMac1,1 + Power Macintosh G3 (Blue & White) + PowerMac1,2 + Power Macintosh G4 (PCI Graphics) + PowerMac10,1 + Mac Mini G4 + PowerMac10,2 + Mac Mini (Late 2005) + PowerMac11,2 + Power Macintosh G5 (Late 2005) + PowerMac12,1 + iMac G5 (iSight) + PowerMac2,1 + iMac G3 (Slot-loading CD-ROM) + PowerMac2,2 + iMac G3 (Summer 2000) + PowerMac3,1 + Power Macintosh G4 (AGP Graphics) + PowerMac3,2 + Power Macintosh G4 (AGP Graphics) + PowerMac3,3 + Power Macintosh G4 (Gigabit Ethernet) + PowerMac3,4 + Power Macintosh G4 (Digital Audio) + PowerMac3,5 + Power Macintosh G4 (Quick Silver) + PowerMac3,6 + Power Macintosh G4 (Mirrored Drive Door) + PowerMac4,1 + iMac G3 (Early/Summer 2001) + PowerMac4,2 + iMac G4 (Flat Panel) + PowerMac4,4 + eMac + PowerMac4,5 + iMac G4 (17-inch Flat Panel) + PowerMac5,1 + Power Macintosh G4 Cube + PowerMac6,1 + iMac G4 (USB 2.0) + PowerMac6,3 + iMac G4 (20-inch Flat Panel) + PowerMac6,4 + eMac (USB 2.0, 2005) + PowerMac7,2 + Power Macintosh G5 + PowerMac7,3 + Power Macintosh G5 + PowerMac8,1 + iMac G5 + PowerMac8,2 + iMac G5 (Ambient Light Sensor) + PowerMac9,1 + Power Macintosh G5 (Late 2005) + RackMac1,1 + Xserve G4 + RackMac1,2 + Xserve G4 (slot-loading, cluster node) + RackMac3,1 + Xserve G5 + Xserve1,1 + Xserve (Intel Xeon) + Xserve2,1 + Xserve (January 2008 quad-core) + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/SUStatus.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/SUStatus.nib new file mode 100644 index 0000000..74d62f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/SUStatus.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..222ec10 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..fe2d291 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..15d1c82 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000..9bbb996 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..eddb8a7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..5a98852 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..53d787d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings new file mode 100644 index 0000000..4725267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a5cdc33 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0c9c0f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..4e57acd Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..664946d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a718bac Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..40c6d88 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..73ede86 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..ebfa934 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..d268ddf Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..2430a9b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..0ff0add Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..8e4ab94 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Info.plist b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Info.plist new file mode 100644 index 0000000..c9fae2c --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Info.plist @@ -0,0 +1,50 @@ + + + + + BuildMachineOSBuild + 11C73 + CFBundleDevelopmentRegion + English + CFBundleExecutable + finish_installation + CFBundleIconFile + Sparkle + CFBundleIdentifier + org.andymatuschak.sparkle.finish-installation + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 4D199 + DTPlatformVersion + GM + DTSDKBuild + 10K549 + DTSDKName + macosx10.6 + DTXcode + 0420 + DTXcodeBuild + 4D199 + LSBackgroundOnly + 1 + LSMinimumSystemVersion + 10.4 + LSUIElement + 1 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation new file mode 100755 index 0000000..6426267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/PkgInfo b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/SUStatus.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/SUStatus.nib new file mode 100644 index 0000000..74d62f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/SUStatus.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/Sparkle.icns b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/Sparkle.icns new file mode 100644 index 0000000..8e56d45 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/Sparkle.icns differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000..9bbb996 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings new file mode 100644 index 0000000..4725267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..664946d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..ebfa934 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..8e4ab94 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000..2ea7c12 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..4ccd7af Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings new file mode 100644 index 0000000..867de0b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..023c473 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000..9a0bc8b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings new file mode 100644 index 0000000..497cd83 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings new file mode 100644 index 0000000..e6320ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..7dba6a3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..16c3fb8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings new file mode 100644 index 0000000..32af491 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000..b741758 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000..c1f7e85 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b6d2b26 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..172c8ab Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..e9126f7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b6d2b26 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..172c8ab Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..e9126f7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/fr_CA.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..4e61334 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..11c0e17 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..a5392de Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000..2ea7c12 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..43a112a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..ad650d7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..597b2ff Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..4ccd7af Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..ae3e677 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0eb6ee3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..a95237c Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings new file mode 100644 index 0000000..867de0b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..31f813a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..34f9d44 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa6378a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a9fa51a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..22df73b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..7b6473f Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..023c473 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..3320f52 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..6fb78aa Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..00589de Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000..9a0bc8b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..da60542 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f9e0817 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa81c11 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..da60542 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f9e0817 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa81c11 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c0818b0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..b1b19e0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..be34d39 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings new file mode 100644 index 0000000..497cd83 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e50a8a7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f7d7960 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..bcaf4b0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings new file mode 100644 index 0000000..e6320ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c80c463 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..c59d67b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..2b857f5 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..7dba6a3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b833756 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..845fc6f Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..d05528b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..0e6acb3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..46bac42 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..bd3642e Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..16c3fb8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e18c9ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..a20bcd6 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..b81322c Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings new file mode 100644 index 0000000..32af491 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c574695 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..884abe8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..4787b9b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000..b741758 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..eaef210 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..8aa7c42 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..2afd737 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000..c1f7e85 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Sparkle b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Sparkle new file mode 100755 index 0000000..154fe71 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/A/Sparkle differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUAppcast.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUAppcast.h new file mode 100644 index 0000000..5a60d2f --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUAppcast.h @@ -0,0 +1,36 @@ +// +// SUAppcast.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCAST_H +#define SUAPPCAST_H + +@class SUAppcastItem; +@interface SUAppcast : NSObject +{ +@private + NSArray *items; + NSString *userAgentString; + id delegate; + NSString *downloadFilename; + NSURLDownload *download; +} + +- (void)fetchAppcastFromURL:(NSURL *)url; +- (void)setDelegate:delegate; +- (void)setUserAgentString:(NSString *)userAgentString; + +- (NSArray *)items; + +@end + +@interface NSObject (SUAppcastDelegate) +- (void)appcastDidFinishLoading:(SUAppcast *)appcast; +- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUAppcastItem.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUAppcastItem.h new file mode 100644 index 0000000..d106732 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUAppcastItem.h @@ -0,0 +1,58 @@ +// +// SUAppcastItem.h +// Sparkle +// +// Created by Andy Matuschak on 3/12/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUAPPCASTITEM_H +#define SUAPPCASTITEM_H + +@interface SUAppcastItem : NSObject +{ +@private + NSString *title; + NSDate *date; + NSString *itemDescription; + + NSURL *releaseNotesURL; + + NSString *DSASignature; + NSString *minimumSystemVersion; + + NSURL *fileURL; + NSString *versionString; + NSString *displayVersionString; + + NSDictionary *deltaUpdates; + + NSDictionary *propertiesDictionary; + + NSURL *infoURL; // UK 2007-08-31 +} + +// Initializes with data from a dictionary provided by the RSS class. +- initWithDictionary:(NSDictionary *)dict; +- initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error; + +- (NSString *)title; +- (NSString *)versionString; +- (NSString *)displayVersionString; +- (NSDate *)date; +- (NSString *)itemDescription; +- (NSURL *)releaseNotesURL; +- (NSURL *)fileURL; +- (NSString *)DSASignature; +- (NSString *)minimumSystemVersion; +- (NSDictionary *)deltaUpdates; +- (BOOL)isDeltaUpdate; + +// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. +- (NSDictionary *)propertiesDictionary; + +- (NSURL *)infoURL; // UK 2007-08-31 + +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUUpdater.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUUpdater.h new file mode 100644 index 0000000..ff04620 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUUpdater.h @@ -0,0 +1,161 @@ +// +// SUUpdater.h +// Sparkle +// +// Created by Andy Matuschak on 1/4/06. +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SUUPDATER_H +#define SUUPDATER_H + +#import "SUVersionComparisonProtocol.h" +#import "SUVersionDisplayProtocol.h" + +@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; + +@interface SUUpdater : NSObject +{ +@private + NSTimer *checkTimer; + SUUpdateDriver *driver; + + NSString *customUserAgentString; + SUHost *host; + IBOutlet id delegate; +} + ++ (SUUpdater *)sharedUpdater; ++ (SUUpdater *)updaterForBundle:(NSBundle *)bundle; +- initForBundle:(NSBundle *)bundle; + +- (NSBundle *)hostBundle; + +- (void)setDelegate:(id)delegate; +- delegate; + +- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks; +- (BOOL)automaticallyChecksForUpdates; + +- (void)setUpdateCheckInterval:(NSTimeInterval)interval; +- (NSTimeInterval)updateCheckInterval; + +- (void)setFeedURL:(NSURL *)feedURL; +- (NSURL *)feedURL; // *** MUST BE CALLED ON MAIN THREAD *** + +- (void)setUserAgentString:(NSString *)userAgent; +- (NSString *)userAgentString; + +- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile; +- (BOOL)sendsSystemProfile; + +- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates; +- (BOOL)automaticallyDownloadsUpdates; + +// This IBAction is meant for a main menu item. Hook up any menu item to this action, +// and Sparkle will check for updates and report back its findings verbosely. +- (IBAction)checkForUpdates:(id)sender; + +// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update, +// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an +// update is found, it will be downloaded and prepped for installation. +- (void)checkForUpdatesInBackground; + +// Date of last update check. Returns nil if no check has been performed. +- (NSDate*)lastUpdateCheckDate; + +// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though, +// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI. +- (void)checkForUpdateInformation; + +// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer. +- (void)resetUpdateCycle; + +- (BOOL)updateInProgress; + +@end + + +// ----------------------------------------------------------------------------- +// SUUpdater Delegate: +// ----------------------------------------------------------------------------- + +@interface NSObject (SUUpdaterDelegateInformalProtocol) + +// Use this to keep Sparkle from popping up e.g. while your setup assistant is showing: +- (BOOL)updaterMayCheckForUpdates:(SUUpdater *)bundle; + +// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. +- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; + +// Override this to dynamically specify the entire URL. +- (NSString*)feedURLStringForUpdater:(SUUpdater*)updater; + +// Use this to override the default behavior for Sparkle prompting the user about automatic update checks. +- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle; + +// Implement this if you want to do some special handling with the appcast once it finishes loading. +- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; + +// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding +// a valid update, if any, in the given appcast. +- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle; + +// Sent when a valid update is found by the update driver. +- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update; + +// Sent when a valid update is not found. +- (void)updaterDidNotFindUpdate:(SUUpdater *)update; + +// Sent immediately before installing the specified update. +- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update; + +// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue. +// This is not called if the user didn't relaunch on the previous update, in that case it will immediately +// restart. +- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation; + +// Some apps *can not* be relaunched in certain circumstances. They can use this method +// to prevent a relaunch "hard": +- (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; + +// Called immediately before relaunching. +- (void)updaterWillRelaunchApplication:(SUUpdater *)updater; + +// This method allows you to provide a custom version comparator. +// If you don't implement this method or return nil, the standard version comparator will be used. +- (id )versionComparatorForUpdater:(SUUpdater *)updater; + +// This method allows you to provide a custom version comparator. +// If you don't implement this method or return nil, the standard version displayer will be used. +- (id )versionDisplayerForUpdater:(SUUpdater *)updater; + +// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle. +- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; + +// Called before and after, respectively, an updater shows a modal alert window, to give the host +// the opportunity to hide attached windows etc. that may get in the way: +-(void) updaterWillShowModalAlert:(SUUpdater *)updater; +-(void) updaterDidShowModalAlert:(SUUpdater *)updater; + +@end + + +// ----------------------------------------------------------------------------- +// Constants: +// ----------------------------------------------------------------------------- + +// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds. +#if defined(DEBUG) && DEBUG && 0 +#define SU_MIN_CHECK_INTERVAL 60 +#else +#define SU_MIN_CHECK_INTERVAL 60*60 +#endif + +#if defined(DEBUG) && DEBUG && 0 +#define SU_DEFAULT_CHECK_INTERVAL 60 +#else +#define SU_DEFAULT_CHECK_INTERVAL 60*60*24 +#endif + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUVersionComparisonProtocol.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUVersionComparisonProtocol.h new file mode 100644 index 0000000..6c65ea4 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUVersionComparisonProtocol.h @@ -0,0 +1,29 @@ +// +// SUVersionComparisonProtocol.h +// Sparkle +// +// Created by Andy Matuschak on 12/21/07. +// Copyright 2007 Andy Matuschak. All rights reserved. +// + +#ifndef SUVERSIONCOMPARISONPROTOCOL_H +#define SUVERSIONCOMPARISONPROTOCOL_H + +#import + +/*! + @protocol + @abstract Implement this protocol to provide version comparison facilities for Sparkle. +*/ +@protocol SUVersionComparison + +/*! + @method + @abstract An abstract method to compare two version strings. + @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. +*/ +- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! + +@end + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUVersionDisplayProtocol.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUVersionDisplayProtocol.h new file mode 100644 index 0000000..368b9c9 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/SUVersionDisplayProtocol.h @@ -0,0 +1,27 @@ +// +// SUVersionDisplayProtocol.h +// EyeTV +// +// Created by Uli Kusterer on 08.12.09. +// Copyright 2009 Elgato Systems GmbH. All rights reserved. +// + +#import + + +/*! + @protocol + @abstract Implement this protocol to apply special formatting to the two + version numbers. +*/ +@protocol SUVersionDisplay + +/*! + @method + @abstract An abstract method to format two version strings. + @discussion You get both so you can display important distinguishing + information, but leave out unnecessary/confusing parts. +*/ +-(void) formatVersion: (NSString**)inOutVersionA andVersion: (NSString**)inOutVersionB; + +@end diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/Sparkle.h b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/Sparkle.h new file mode 100644 index 0000000..08dd577 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Headers/Sparkle.h @@ -0,0 +1,21 @@ +// +// Sparkle.h +// Sparkle +// +// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) +// Copyright 2006 Andy Matuschak. All rights reserved. +// + +#ifndef SPARKLE_H +#define SPARKLE_H + +// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless +// there are name-space collisions) so we can list all of them to start with: + +#import + +#import +#import +#import + +#endif diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/Info.plist b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/Info.plist new file mode 100644 index 0000000..056166b --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/Info.plist @@ -0,0 +1,40 @@ + + + + + BuildMachineOSBuild + 11C73 + CFBundleDevelopmentRegion + en + CFBundleExecutable + Sparkle + CFBundleIdentifier + org.andymatuschak.Sparkle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Sparkle + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.5 Beta (git) + CFBundleSignature + ???? + CFBundleVersion + 290f64f + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 4D199 + DTPlatformVersion + GM + DTSDKBuild + 10K549 + DTSDKName + macosx10.6 + DTXcode + 0420 + DTXcodeBuild + 4D199 + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/License.txt b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/License.txt new file mode 100644 index 0000000..978193f --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/License.txt @@ -0,0 +1,153 @@ +Copyright (c) 2006 Andy Matuschak + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +================= +EXTERNAL LICENSES +================= + +This project uses software developed by the OpenSSL Project for use in the OpenSSL +Toolkit (http://www.openssl.org). This toolkit is licensed as follows: +/* ==================================================================== +* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modiÞcation, are permitted provided that the following conditions +* are met: +* +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in +* the documentation and/or other materials provided with the +* distribution. +* +* 3. All advertising materials mentioning features or use of this +* software must display the following acknowledgment: +* ÒThis product includes software developed by the OpenSSL Project +* for use in the OpenSSL Toolkit. (http://www.openssl.org/)Ó +* +* 4. The names ÒOpenSSL ToolkitÓ and ÒOpenSSL ProjectÓ must not be used to +* endorse or promote products derived from this software without +* prior written permission. For written permission, please contact +* openssl-core@openssl.org. +* +* 5. Products derived from this software may not be called ÒOpenSSLÓ +* nor may ÒOpenSSLÓ appear in their names without prior written +* permission of the OpenSSL Project. +* +* 6. Redistributions of any form whatsoever must retain the following + +* acknowledgment: +* ÒThis product includes software developed by the OpenSSL Project +* for use in the OpenSSL Toolkit (http://www.openssl.org/)Ó +* +* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS ISÕÕ AND ANY +* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +* OF THE POSSIBILITY OF SUCH DAMAGE. +* ==================================================================== +* +* This product includes cryptographic software written by Eric Young +* (eay@cryptsoft.com). This product includes software written by Tim +* Hudson (tjh@cryptsoft.com). +* +*/ + +Original SSLeay License +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +* All rights reserved. +* +* This package is an SSL implementation written +* by Eric Young (eay@cryptsoft.com). +* The implementation was written so as to conform with Netscapes SSL. +* +* This library is free for commercial and non-commercial use as long as +* the following conditions are aheared to. The following conditions +* apply to all code found in this distribution, be it the RC4, RSA, +* lhash, DES, etc., code; not just the SSL code. The SSL documentation +* included with this distribution is covered by the same copyright terms +* except that the holder is Tim Hudson (tjh@cryptsoft.com). +* +* Copyright remains Eric YoungÕs, and as such any Copyright notices in +* the code are not to be removed. +* If this package is used in a product, Eric Young should be given attribution +* as the author of the parts of the library used. +* This can be in the form of a textual message at program startup or +* in documentation (online or textual) provided with the package. +* +* Redistribution and use in source and binary forms, with or without +* modiÞcation, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. All advertising materials mentioning features or use of this software +* must display the following acknowledgement: +* ÒThis product includes cryptographic software written by +* Eric Young (eay@cryptsoft.com)Ó +* The word ÔcryptographicÕ can be left out if the rouines from the library +* being used are not cryptographic related :-). +* 4. If you include any Windows speciÞc code (or a derivative thereof) from +* the apps directory (application code) you must include an acknowledgement: +* ÒThis product includes software written by Tim Hudson (tjh@cryptsoft.com)Ó +* +* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS ISÕÕ AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGE. +* +* The licence and distribution terms for any publically available version or +* derivative of this code cannot be changed. i.e. this code cannot simply be +* copied and put under another distribution licence +* [including the GNU Public Licence.] +*/ + +License for bspatch.c and bsdiff.c, from bsdiff 4.3 (: +/*- + * Copyright 2003-2005 Colin Percival + * All rights reserved + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted providing that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/SUModelTranslation.plist b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/SUModelTranslation.plist new file mode 100644 index 0000000..63644f0 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/SUModelTranslation.plist @@ -0,0 +1,182 @@ + + + + + ADP2,1 + Developer Transition Kit + iMac1,1 + iMac G3 (Rev A-D) + iMac4,1 + iMac (Core Duo) + iMac4,2 + iMac for Education (17-inch, Core Duo) + iMac5,1 + iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) + iMac5,2 + iMac (Core 2 Duo, 17 inch, Combo Drive) + iMac6,1 + iMac (Core 2 Duo, 24 inch, SuperDrive) + iMac8,1 + iMac (April 2008) + MacBook1,1 + MacBook (Core Duo) + MacBook2,1 + MacBook (Core 2 Duo) + MacBook4,1 + MacBook (Core 2 Duo Feb 2008) + MacBookAir1,1 + MacBook Air (January 2008) + MacBookAir2,1 + MacBook Air (June 2009) + MacBookAir3,1 + MacBook Air (October 2010) + MacBookPro1,1 + MacBook Pro Core Duo (15-inch) + MacBookPro1,2 + MacBook Pro Core Duo (17-inch) + MacBookPro2,1 + MacBook Pro Core 2 Duo (17-inch) + MacBookPro2,2 + MacBook Pro Core 2 Duo (15-inch) + MacBookPro3,1 + MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) + MacBookPro3,2 + MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) + MacBookPro4,1 + MacBook Pro (Core 2 Duo Feb 2008) + Macmini1,1 + Mac Mini (Core Solo/Duo) + MacPro1,1 + Mac Pro (four-core) + MacPro2,1 + Mac Pro (eight-core) + MacPro3,1 + Mac Pro (January 2008 4- or 8- core "Harpertown") + MacPro4,1 + Mac Pro (March 2009) + MacPro5,1 + Mac Pro (August 2010) + PowerBook1,1 + PowerBook G3 + PowerBook2,1 + iBook G3 + PowerBook2,2 + iBook G3 (FireWire) + PowerBook2,3 + iBook G3 + PowerBook2,4 + iBook G3 + PowerBook3,1 + PowerBook G3 (FireWire) + PowerBook3,2 + PowerBook G4 + PowerBook3,3 + PowerBook G4 (Gigabit Ethernet) + PowerBook3,4 + PowerBook G4 (DVI) + PowerBook3,5 + PowerBook G4 (1GHz / 867MHz) + PowerBook4,1 + iBook G3 (Dual USB, Late 2001) + PowerBook4,2 + iBook G3 (16MB VRAM) + PowerBook4,3 + iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) + PowerBook5,1 + PowerBook G4 (17 inch) + PowerBook5,2 + PowerBook G4 (15 inch FW 800) + PowerBook5,3 + PowerBook G4 (17-inch 1.33GHz) + PowerBook5,4 + PowerBook G4 (15 inch 1.5/1.33GHz) + PowerBook5,5 + PowerBook G4 (17-inch 1.5GHz) + PowerBook5,6 + PowerBook G4 (15 inch 1.67GHz/1.5GHz) + PowerBook5,7 + PowerBook G4 (17-inch 1.67GHz) + PowerBook5,8 + PowerBook G4 (Double layer SD, 15 inch) + PowerBook5,9 + PowerBook G4 (Double layer SD, 17 inch) + PowerBook6,1 + PowerBook G4 (12 inch) + PowerBook6,2 + PowerBook G4 (12 inch, DVI) + PowerBook6,3 + iBook G4 + PowerBook6,4 + PowerBook G4 (12 inch 1.33GHz) + PowerBook6,5 + iBook G4 (Early-Late 2004) + PowerBook6,7 + iBook G4 (Mid 2005) + PowerBook6,8 + PowerBook G4 (12 inch 1.5GHz) + PowerMac1,1 + Power Macintosh G3 (Blue & White) + PowerMac1,2 + Power Macintosh G4 (PCI Graphics) + PowerMac10,1 + Mac Mini G4 + PowerMac10,2 + Mac Mini (Late 2005) + PowerMac11,2 + Power Macintosh G5 (Late 2005) + PowerMac12,1 + iMac G5 (iSight) + PowerMac2,1 + iMac G3 (Slot-loading CD-ROM) + PowerMac2,2 + iMac G3 (Summer 2000) + PowerMac3,1 + Power Macintosh G4 (AGP Graphics) + PowerMac3,2 + Power Macintosh G4 (AGP Graphics) + PowerMac3,3 + Power Macintosh G4 (Gigabit Ethernet) + PowerMac3,4 + Power Macintosh G4 (Digital Audio) + PowerMac3,5 + Power Macintosh G4 (Quick Silver) + PowerMac3,6 + Power Macintosh G4 (Mirrored Drive Door) + PowerMac4,1 + iMac G3 (Early/Summer 2001) + PowerMac4,2 + iMac G4 (Flat Panel) + PowerMac4,4 + eMac + PowerMac4,5 + iMac G4 (17-inch Flat Panel) + PowerMac5,1 + Power Macintosh G4 Cube + PowerMac6,1 + iMac G4 (USB 2.0) + PowerMac6,3 + iMac G4 (20-inch Flat Panel) + PowerMac6,4 + eMac (USB 2.0, 2005) + PowerMac7,2 + Power Macintosh G5 + PowerMac7,3 + Power Macintosh G5 + PowerMac8,1 + iMac G5 + PowerMac8,2 + iMac G5 (Ambient Light Sensor) + PowerMac9,1 + Power Macintosh G5 (Late 2005) + RackMac1,1 + Xserve G4 + RackMac1,2 + Xserve G4 (slot-loading, cluster node) + RackMac3,1 + Xserve G5 + Xserve1,1 + Xserve (Intel Xeon) + Xserve2,1 + Xserve (January 2008 quad-core) + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/SUStatus.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/SUStatus.nib new file mode 100644 index 0000000..74d62f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/SUStatus.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..222ec10 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..fe2d291 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..15d1c82 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000..9bbb996 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/cs.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..eddb8a7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..5a98852 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..53d787d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/Sparkle.strings new file mode 100644 index 0000000..4725267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/da.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a5cdc33 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0c9c0f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..4e57acd Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..664946d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/de.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a718bac Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..40c6d88 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..73ede86 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..ebfa934 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/en.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..d268ddf Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..2430a9b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..0ff0add Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..8e4ab94 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/es.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Info.plist b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Info.plist new file mode 100644 index 0000000..c9fae2c --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Info.plist @@ -0,0 +1,50 @@ + + + + + BuildMachineOSBuild + 11C73 + CFBundleDevelopmentRegion + English + CFBundleExecutable + finish_installation + CFBundleIconFile + Sparkle + CFBundleIdentifier + org.andymatuschak.sparkle.finish-installation + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 4D199 + DTPlatformVersion + GM + DTSDKBuild + 10K549 + DTSDKName + macosx10.6 + DTXcode + 0420 + DTXcodeBuild + 4D199 + LSBackgroundOnly + 1 + LSMinimumSystemVersion + 10.4 + LSUIElement + 1 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/MacOS/finish_installation b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/MacOS/finish_installation new file mode 100755 index 0000000..6426267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/MacOS/finish_installation differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/PkgInfo b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/PkgInfo new file mode 100644 index 0000000..bd04210 --- /dev/null +++ b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/PkgInfo @@ -0,0 +1 @@ +APPL???? \ No newline at end of file diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/SUStatus.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/SUStatus.nib new file mode 100644 index 0000000..74d62f2 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/SUStatus.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/Sparkle.icns b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/Sparkle.icns new file mode 100644 index 0000000..8e56d45 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/Sparkle.icns differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings new file mode 100644 index 0000000..9bbb996 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings new file mode 100644 index 0000000..4725267 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings new file mode 100644 index 0000000..664946d Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings new file mode 100644 index 0000000..ebfa934 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings new file mode 100644 index 0000000..8e4ab94 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000..2ea7c12 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..4ccd7af Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings new file mode 100644 index 0000000..867de0b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..023c473 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000..9a0bc8b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings new file mode 100644 index 0000000..497cd83 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings new file mode 100644 index 0000000..e6320ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..7dba6a3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..16c3fb8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings new file mode 100644 index 0000000..32af491 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000..b741758 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000..c1f7e85 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b6d2b26 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..172c8ab Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..e9126f7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b6d2b26 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..172c8ab Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..e9126f7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/Sparkle.strings new file mode 100644 index 0000000..236f807 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/fr_CA.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..4e61334 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..11c0e17 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..a5392de Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/Sparkle.strings new file mode 100644 index 0000000..2ea7c12 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/is.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..43a112a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..ad650d7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..597b2ff Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/Sparkle.strings new file mode 100644 index 0000000..4ccd7af Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/it.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..ae3e677 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..0eb6ee3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..a95237c Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/Sparkle.strings new file mode 100644 index 0000000..867de0b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ja.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..31f813a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..34f9d44 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa6378a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ko.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..a9fa51a Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..22df73b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..7b6473f Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/Sparkle.strings new file mode 100644 index 0000000..023c473 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/nl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..3320f52 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..6fb78aa Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..00589de Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/Sparkle.strings new file mode 100644 index 0000000..9a0bc8b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pl.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..da60542 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f9e0817 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa81c11 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..da60542 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f9e0817 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..fa81c11 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/Sparkle.strings new file mode 100644 index 0000000..b67c3b8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_BR.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c0818b0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..b1b19e0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..be34d39 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/Sparkle.strings new file mode 100644 index 0000000..497cd83 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/pt_PT.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e50a8a7 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..f7d7960 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..bcaf4b0 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/Sparkle.strings new file mode 100644 index 0000000..e6320ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ro.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c80c463 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..c59d67b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..2b857f5 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/Sparkle.strings new file mode 100644 index 0000000..7dba6a3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/ru.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..b833756 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..845fc6f Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..d05528b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sk.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..0e6acb3 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..46bac42 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..bd3642e Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/Sparkle.strings new file mode 100644 index 0000000..16c3fb8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/sv.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..e18c9ad Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..a20bcd6 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..b81322c Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/Sparkle.strings new file mode 100644 index 0000000..32af491 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/tr.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..c574695 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..884abe8 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..4787b9b Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/Sparkle.strings new file mode 100644 index 0000000..b741758 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_CN.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib new file mode 100644 index 0000000..eaef210 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUUpdateAlert.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUUpdateAlert.nib new file mode 100644 index 0000000..8aa7c42 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUUpdateAlert.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib new file mode 100644 index 0000000..2afd737 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/Sparkle.strings b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/Sparkle.strings new file mode 100644 index 0000000..c1f7e85 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Resources/zh_TW.lproj/Sparkle.strings differ diff --git a/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Sparkle b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Sparkle new file mode 100755 index 0000000..154fe71 Binary files /dev/null and b/DNSCrypt-Menubar/Sparkle.framework/Versions/Current/Sparkle differ diff --git a/DNSCrypt-Menubar/dnscrypt.icns b/DNSCrypt-Menubar/dnscrypt.icns new file mode 100644 index 0000000..a2394a9 Binary files /dev/null and b/DNSCrypt-Menubar/dnscrypt.icns differ diff --git a/DNSCrypt-Preference-Pane/COPYING b/DNSCrypt-Preference-Pane/COPYING new file mode 100644 index 0000000..c831144 --- /dev/null +++ b/DNSCrypt-Preference-Pane/COPYING @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2011 OpenDNS, Inc. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt.xcodeproj/project.pbxproj b/DNSCrypt-Preference-Pane/DNSCrypt.xcodeproj/project.pbxproj new file mode 100644 index 0000000..3558cdb --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt.xcodeproj/project.pbxproj @@ -0,0 +1,376 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0946B0C613F47F53008277C6 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0946B0C513F47F53008277C6 /* Cocoa.framework */; }; + 0946B0C813F47F53008277C6 /* PreferencePanes.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0946B0C713F47F53008277C6 /* PreferencePanes.framework */; }; + 0946B0D213F47F53008277C6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0946B0D013F47F53008277C6 /* InfoPlist.strings */; }; + 0946B0D613F47F53008277C6 /* DNSCrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = 0946B0D513F47F53008277C6 /* DNSCrypt.m */; }; + 0946B0D813F47F53008277C6 /* DNSCrypt.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 0946B0D713F47F53008277C6 /* DNSCrypt.tiff */; }; + 0946B0DB13F47F53008277C6 /* DNSCrypt.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0946B0D913F47F53008277C6 /* DNSCrypt.xib */; }; + 0946B0E413F48065008277C6 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0946B0E313F48065008277C6 /* Security.framework */; }; + 09640E95145CA4AD008B37EC /* opendns_logo_300.png in Resources */ = {isa = PBXBuildFile; fileRef = 09640E94145CA4AD008B37EC /* opendns_logo_300.png */; }; + 09A13ABC145F2D8700B227A4 /* ajax-loader.gif in Resources */ = {isa = PBXBuildFile; fileRef = 09A13ABB145F2D8700B227A4 /* ajax-loader.gif */; }; + 4B36C4651468B87A0085B07C /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B36C4641468B87A0085B07C /* WebKit.framework */; }; + 4B89D983147CA39200872F60 /* dnscrypt_256.png in Resources */ = {isa = PBXBuildFile; fileRef = 4B89D982147CA39200872F60 /* dnscrypt_256.png */; }; + 4BABEA28144F5A7B006AEF34 /* led_green.png in Resources */ = {isa = PBXBuildFile; fileRef = 4BABEA1F144F5A7B006AEF34 /* led_green.png */; }; + 4BABEA29144F5A7B006AEF34 /* led_yellow.png in Resources */ = {isa = PBXBuildFile; fileRef = 4BABEA20144F5A7B006AEF34 /* led_yellow.png */; }; + 4BABEA2A144F5A7B006AEF34 /* led_red.png in Resources */ = {isa = PBXBuildFile; fileRef = 4BABEA21144F5A7B006AEF34 /* led_red.png */; }; + 4BABEA2B144F5A7B006AEF34 /* shield_yellow.png in Resources */ = {isa = PBXBuildFile; fileRef = 4BABEA22144F5A7B006AEF34 /* shield_yellow.png */; }; + 4BABEA2C144F5A7B006AEF34 /* shield_red.png in Resources */ = {isa = PBXBuildFile; fileRef = 4BABEA23144F5A7B006AEF34 /* shield_red.png */; }; + 4BABEA2D144F5A7B006AEF34 /* shield_green.png in Resources */ = {isa = PBXBuildFile; fileRef = 4BABEA24144F5A7B006AEF34 /* shield_green.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 0946B0C213F47F53008277C6 /* DNSCrypt.prefPane */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DNSCrypt.prefPane; sourceTree = BUILT_PRODUCTS_DIR; }; + 0946B0C513F47F53008277C6 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 0946B0C713F47F53008277C6 /* PreferencePanes.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PreferencePanes.framework; path = System/Library/Frameworks/PreferencePanes.framework; sourceTree = SDKROOT; }; + 0946B0CA13F47F53008277C6 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 0946B0CB13F47F53008277C6 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 0946B0CC13F47F53008277C6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 0946B0CF13F47F53008277C6 /* DNSCrypt-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "DNSCrypt-Info.plist"; sourceTree = ""; }; + 0946B0D113F47F53008277C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 0946B0D313F47F53008277C6 /* DNSCrypt-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DNSCrypt-Prefix.pch"; sourceTree = ""; }; + 0946B0D413F47F53008277C6 /* DNSCrypt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DNSCrypt.h; sourceTree = ""; }; + 0946B0D513F47F53008277C6 /* DNSCrypt.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DNSCrypt.m; sourceTree = ""; }; + 0946B0D713F47F53008277C6 /* DNSCrypt.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = DNSCrypt.tiff; sourceTree = ""; }; + 0946B0DA13F47F53008277C6 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/DNSCrypt.xib; sourceTree = ""; }; + 0946B0E113F48056008277C6 /* SecurityFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SecurityFoundation.framework; path = System/Library/Frameworks/SecurityFoundation.framework; sourceTree = SDKROOT; }; + 0946B0E313F48065008277C6 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 09640E94145CA4AD008B37EC /* opendns_logo_300.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = opendns_logo_300.png; sourceTree = ""; }; + 09A13ABB145F2D8700B227A4 /* ajax-loader.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "ajax-loader.gif"; sourceTree = ""; }; + 4B36C4641468B87A0085B07C /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; + 4B89D982147CA39200872F60 /* dnscrypt_256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dnscrypt_256.png; sourceTree = ""; }; + 4BABEA1F144F5A7B006AEF34 /* led_green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = led_green.png; sourceTree = ""; }; + 4BABEA20144F5A7B006AEF34 /* led_yellow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = led_yellow.png; sourceTree = ""; }; + 4BABEA21144F5A7B006AEF34 /* led_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = led_red.png; sourceTree = ""; }; + 4BABEA22144F5A7B006AEF34 /* shield_yellow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shield_yellow.png; sourceTree = ""; }; + 4BABEA23144F5A7B006AEF34 /* shield_red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shield_red.png; sourceTree = ""; }; + 4BABEA24144F5A7B006AEF34 /* shield_green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shield_green.png; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0946B0BD13F47F53008277C6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B36C4651468B87A0085B07C /* WebKit.framework in Frameworks */, + 0946B0E413F48065008277C6 /* Security.framework in Frameworks */, + 0946B0C613F47F53008277C6 /* Cocoa.framework in Frameworks */, + 0946B0C813F47F53008277C6 /* PreferencePanes.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0946B0B513F47F52008277C6 = { + isa = PBXGroup; + children = ( + 0946B0CD13F47F53008277C6 /* DNSCrypt */, + 0946B0C413F47F53008277C6 /* Frameworks */, + 0946B0C313F47F53008277C6 /* Products */, + ); + sourceTree = ""; + }; + 0946B0C313F47F53008277C6 /* Products */ = { + isa = PBXGroup; + children = ( + 0946B0C213F47F53008277C6 /* DNSCrypt.prefPane */, + ); + name = Products; + sourceTree = ""; + }; + 0946B0C413F47F53008277C6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 0946B0C513F47F53008277C6 /* Cocoa.framework */, + 0946B0C913F47F53008277C6 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 0946B0C913F47F53008277C6 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 0946B0CA13F47F53008277C6 /* AppKit.framework */, + 0946B0CB13F47F53008277C6 /* CoreData.framework */, + 0946B0CC13F47F53008277C6 /* Foundation.framework */, + 0946B0C713F47F53008277C6 /* PreferencePanes.framework */, + 0946B0E313F48065008277C6 /* Security.framework */, + 0946B0E113F48056008277C6 /* SecurityFoundation.framework */, + 4B36C4641468B87A0085B07C /* WebKit.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + 0946B0CD13F47F53008277C6 /* DNSCrypt */ = { + isa = PBXGroup; + children = ( + 0946B0D413F47F53008277C6 /* DNSCrypt.h */, + 0946B0D513F47F53008277C6 /* DNSCrypt.m */, + 0946B0D713F47F53008277C6 /* DNSCrypt.tiff */, + 4B89D982147CA39200872F60 /* dnscrypt_256.png */, + 0946B0D913F47F53008277C6 /* DNSCrypt.xib */, + 0946B0CE13F47F53008277C6 /* Supporting Files */, + ); + path = DNSCrypt; + sourceTree = ""; + }; + 0946B0CE13F47F53008277C6 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 4BABEA1E144F5A67006AEF34 /* Status */, + 09640E94145CA4AD008B37EC /* opendns_logo_300.png */, + 0946B0CF13F47F53008277C6 /* DNSCrypt-Info.plist */, + 0946B0D013F47F53008277C6 /* InfoPlist.strings */, + 0946B0D313F47F53008277C6 /* DNSCrypt-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 4BABEA1E144F5A67006AEF34 /* Status */ = { + isa = PBXGroup; + children = ( + 09A13ABB145F2D8700B227A4 /* ajax-loader.gif */, + 4BABEA1F144F5A7B006AEF34 /* led_green.png */, + 4BABEA20144F5A7B006AEF34 /* led_yellow.png */, + 4BABEA21144F5A7B006AEF34 /* led_red.png */, + 4BABEA22144F5A7B006AEF34 /* shield_yellow.png */, + 4BABEA23144F5A7B006AEF34 /* shield_red.png */, + 4BABEA24144F5A7B006AEF34 /* shield_green.png */, + ); + name = Status; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 0946B0BE13F47F53008277C6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 0946B0C113F47F53008277C6 /* DNSCrypt */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0946B0DE13F47F53008277C6 /* Build configuration list for PBXNativeTarget "DNSCrypt" */; + buildPhases = ( + 0946B0BC13F47F53008277C6 /* Sources */, + 0946B0BD13F47F53008277C6 /* Frameworks */, + 0946B0BE13F47F53008277C6 /* Headers */, + 0946B0BF13F47F53008277C6 /* Resources */, + 0946B0C013F47F53008277C6 /* Rez */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DNSCrypt; + productName = DNSCrypt; + productReference = 0946B0C213F47F53008277C6 /* DNSCrypt.prefPane */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0946B0B713F47F52008277C6 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0430; + }; + buildConfigurationList = 0946B0BA13F47F52008277C6 /* Build configuration list for PBXProject "DNSCrypt" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 0946B0B513F47F52008277C6; + productRefGroup = 0946B0C313F47F53008277C6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0946B0C113F47F53008277C6 /* DNSCrypt */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0946B0BF13F47F53008277C6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0946B0D213F47F53008277C6 /* InfoPlist.strings in Resources */, + 0946B0D813F47F53008277C6 /* DNSCrypt.tiff in Resources */, + 0946B0DB13F47F53008277C6 /* DNSCrypt.xib in Resources */, + 4BABEA28144F5A7B006AEF34 /* led_green.png in Resources */, + 4BABEA29144F5A7B006AEF34 /* led_yellow.png in Resources */, + 4BABEA2A144F5A7B006AEF34 /* led_red.png in Resources */, + 4BABEA2B144F5A7B006AEF34 /* shield_yellow.png in Resources */, + 4BABEA2C144F5A7B006AEF34 /* shield_red.png in Resources */, + 4BABEA2D144F5A7B006AEF34 /* shield_green.png in Resources */, + 09640E95145CA4AD008B37EC /* opendns_logo_300.png in Resources */, + 09A13ABC145F2D8700B227A4 /* ajax-loader.gif in Resources */, + 4B89D983147CA39200872F60 /* dnscrypt_256.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXRezBuildPhase section */ + 0946B0C013F47F53008277C6 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXRezBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0946B0BC13F47F53008277C6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0946B0D613F47F53008277C6 /* DNSCrypt.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 0946B0D013F47F53008277C6 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 0946B0D113F47F53008277C6 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 0946B0D913F47F53008277C6 /* DNSCrypt.xib */ = { + isa = PBXVariantGroup; + children = ( + 0946B0DA13F47F53008277C6 /* en */, + ); + name = DNSCrypt.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0946B0DC13F47F53008277C6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_OBJC_GC = supported; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 0946B0DD13F47F53008277C6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_ARC = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_ENABLE_OBJC_GC = supported; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + SDKROOT = macosx; + }; + name = Release; + }; + 0946B0DF13F47F53008277C6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DNSCrypt/DNSCrypt-Prefix.pch"; + INFOPLIST_FILE = "DNSCrypt/DNSCrypt-Info.plist"; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = prefPane; + }; + name = Debug; + }; + 0946B0E013F47F53008277C6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "DNSCrypt/DNSCrypt-Prefix.pch"; + INFOPLIST_FILE = "DNSCrypt/DNSCrypt-Info.plist"; + INSTALL_PATH = "$(HOME)/Library/PreferencePanes"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = prefPane; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0946B0BA13F47F52008277C6 /* Build configuration list for PBXProject "DNSCrypt" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0946B0DC13F47F53008277C6 /* Debug */, + 0946B0DD13F47F53008277C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0946B0DE13F47F53008277C6 /* Build configuration list for PBXNativeTarget "DNSCrypt" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0946B0DF13F47F53008277C6 /* Debug */, + 0946B0E013F47F53008277C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0946B0B713F47F52008277C6 /* Project object */; +} diff --git a/DNSCrypt-Preference-Pane/DNSCrypt.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/DNSCrypt-Preference-Pane/DNSCrypt.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..3319cb3 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt-Info.plist b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt-Info.plist new file mode 100644 index 0000000..0c50fb9 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt-Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.opendns.osx.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.7 + CFBundleSignature + ???? + CFBundleVersion + 0.7 + NSHumanReadableCopyright + Copyright © 2011 OpenDNS Inc. All rights reserved. + NSMainNibFile + DNSCrypt + NSPrefPaneIconFile + dnscrypt_256.png + NSPrefPaneIconLabel + DNSCrypt + NSPrincipalClass + DNSCrypt + + diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt-Prefix.pch b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt-Prefix.pch new file mode 100644 index 0000000..eb394a3 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'DNSCrypt' target in the 'DNSCrypt' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h new file mode 100644 index 0000000..5e5e037 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.h @@ -0,0 +1,68 @@ +// +// DNSCrypt.h +// DNSCrypt +// +// Created by OpenDNS, Inc. on 8/11/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#import +#import + +#define kDNSCRYPT_PACKAGE_VERSION @"0.7" + +#define KDNSCRYPT_CONFIG_UPDATER_LABEL @"com.opendns.osx.DNSCryptConfigUpdater" +#define KDNSCRYPT_PROXY_LABEL @"com.opendns.osx.DNSCryptProxy" + +#define KLAUNCHCTL_PATH @"/bin/launchctl" + +#define kSOCK_GRAND_PARENT_DIR @"/var/run" +#define kSOCK_PARENT_DIR kSOCK_GRAND_PARENT_DIR @"/com.opendns.osx.DNSCryptConfigUpdater" +#define kSOCK_PATH kSOCK_PARENT_DIR @"/sock" + +#define kDNSCRYPT_PREFPANE_SUPPORT_DIR @"DNSCrypt Prefpane" +#define kDNSCRYPT_PREFPANE_FILE @"PrefPane.plist" + +#define kRESOLVER_IP_LOCALHOST @"127.0.0.1" +#define kRESOLVER_IP_OPENDNS1 @"208.67.220.220" +#define kRESOLVER_IP_OPENDNS2 @"208.67.222.222" + +#define kOPENDNS_URL @"http://www.opendns.com" + +#define kBUNDLE_IDENTIFIER @"com.opendns.osx.DNSCrypt" + +#define kDNSCRYPT_RESOLVER @"208.67.220.220" + +#define kCHECKBOXES_FREEZE_DELAY 5.5 + +typedef enum { + kDNS_CONFIGURATION_UNKNOWN, kDNS_CONFIGURATION_VANILLA, kDNS_CONFIGURATION_LOCALHOST, kDNS_CONFIGURATION_OPENDNS +} DNSConfigurationState; + +@interface DNSCrypt : NSPreferencePane { + AuthorizationRef auth; +} + +@property (weak) IBOutlet NSButton *enableOpenDNSButton; +@property (weak) IBOutlet NSButton *enableDNSCryptButton; +@property (weak) IBOutlet NSTextField *currentResolverTextField; +@property (weak) IBOutlet NSButton *enableInsecureDNSButton; +@property (weak) IBOutlet NSImageView *statusImageView; +@property (weak) IBOutlet NSTextField *statusText; +@property (weak) IBOutlet NSButton *useHTTPSButton; +@property (weak) IBOutlet WebView *previewNotesWebView; +@property (weak) IBOutlet WebView *releaseNotesWebView; +@property (weak) IBOutlet WebView *feedbackWebView; +@property (weak) IBOutlet WebView *aboutWebView; + +- (void) mainViewDidLoad; + +- (IBAction)enableOpenDNSButtonPressed:(NSButton *)sender; +- (IBAction)enableDNSCryptButtonPressed:(NSButton *)sender; +- (IBAction)enableInsecureDNSButtonPressed:(NSButton *)sender; +- (IBAction)enableHTTPSButtonPressed:(NSButton *)sender; +- (IBAction)openDNSLinkPushed:(NSButton *)sender; + + + +@end diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m new file mode 100644 index 0000000..5099ae2 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.m @@ -0,0 +1,432 @@ +// +// DNSCrypt.m +// DNSCrypt +// +// Created by OpenDNS, Inc. on 8/11/11. +// Copyright (c) 2011 OpenDNS, Inc. All rights reserved. +// + +#include +#include +#import "DNSCrypt.h" + +@implementation DNSCrypt +@synthesize previewNotesWebView; +@synthesize releaseNotesWebView; +@synthesize feedbackWebView; +@synthesize aboutWebView; + +@synthesize enableOpenDNSButton; +@synthesize enableDNSCryptButton; +@synthesize enableInsecureDNSButton; +@synthesize statusImageView; +@synthesize statusText; +@synthesize useHTTPSButton; +@synthesize currentResolverTextField; + +DNSConfigurationState state; +BOOL useHTTPSPort = NO; +BOOL enableInsecure = NO; +BOOL checkBoxesHaveBeenInitialized = NO; + +- (BOOL) ensureConfigUpdaterIsRunning +{ + NSArray *arguments = [NSArray arrayWithObjects: @"start", KDNSCRYPT_CONFIG_UPDATER_LABEL, nil]; + NSTask *task = [[[NSTask alloc] init] autorelease]; + task.launchPath = KLAUNCHCTL_PATH; + task.arguments = arguments; + task.standardError = [NSFileHandle fileHandleWithNullDevice]; + [task launch]; + [task waitUntilExit]; + + return FALSE; +} + +- (BOOL) sendCommandToConfigUpdater: (NSString *) command storeResultTo: (__autoreleasing NSData **) dataP withMaxSize: (NSUInteger) maxSize +{ + const char *sockPath = [kSOCK_PATH cStringUsingEncoding: NSUTF8StringEncoding]; + size_t sockPathSize = strlen(sockPath) + (size_t) 1U; + struct sockaddr_un *su; + assert(sockPathSize < sizeof su->sun_path); + socklen_t sun_len = (socklen_t) (sizeof *su) + (socklen_t) sockPathSize; + su = calloc(1U, sun_len); + su->sun_family = AF_UNIX; + memcpy(su->sun_path, sockPath, sockPathSize); + su->sun_len = SUN_LEN(su); + CFSocketRef socket = CFSocketCreate(kCFAllocatorDefault, PF_UNIX, SOCK_DGRAM, IPPROTO_IP, 0, NULL, NULL); + CFSocketSetSocketFlags(socket, CFSocketGetSocketFlags(socket) & ~kCFSocketCloseOnInvalidate); + int fd = CFSocketGetNative(socket); + NSData *address = [NSData dataWithBytes: su length: SUN_LEN(su)]; + CFSocketError err = CFSocketConnectToAddress(socket, (__bridge CFDataRef) address, 30.0); + free(su); + if (err != kCFSocketSuccess) { + CFRelease(socket); + return FALSE; + } + NSFileHandle *fh = [[[NSFileHandle alloc] initWithFileDescriptor: fd closeOnDealloc: TRUE] autorelease]; + CFRelease(socket); + NSData *data = [command dataUsingEncoding: NSUTF8StringEncoding]; + NSAssert(data.length <= UINT32_MAX, @"data.length > UINT32_MAX"); + uint32_t dataLen = (uint32_t) data.length; + [fh writeData: [NSData dataWithBytes: &dataLen length: sizeof dataLen]]; + [fh writeData: data]; + if (dataP && maxSize) { + *dataP = [fh readDataOfLength: maxSize]; + } + [fh closeFile]; + + return TRUE; +} + +- (BOOL) sendCommandToConfigUpdater: (NSString *) command +{ + return [self sendCommandToConfigUpdater: command storeResultTo: nil withMaxSize: 0U]; +} + +- (BOOL) resolversForService: (NSArray *) resolversForService includeResolvers:(NSArray *) resolvers +{ + NSUInteger matches = 0U; + + for (NSString *resolverForService in resolversForService) { + if ([resolvers containsObject: resolverForService]) { + matches++; + } else { + break; + } + } + if (matches >= resolvers.count) { + return TRUE; + } + return FALSE; +} + +- (NSString *) getSupportDirectory +{ + NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); + NSString *path = nil; + NSError *error = nil; + BOOL isDirectory; + + for (path in paths) { + if ([[NSFileManager defaultManager] fileExistsAtPath: path isDirectory: &isDirectory] == FALSE || isDirectory == FALSE) { + continue; + } + path = [path stringByAppendingPathComponent: kDNSCRYPT_PREFPANE_SUPPORT_DIR]; + if ([[NSFileManager defaultManager] createDirectoryAtPath: path withIntermediateDirectories: TRUE attributes: nil error: &error] == TRUE) { + return path; + } + } + NSLog(@"Error: [%@]", error); + return nil; +} + +- (NSString *) getPrefPaneConfigFile +{ + NSString *supportDirectory = [self getSupportDirectory]; + if (! supportDirectory) { + return nil; + } + return [supportDirectory stringByAppendingPathComponent: kDNSCRYPT_PREFPANE_FILE]; +} + +- (BOOL) savePrefPaneConfig +{ + NSString *prefPaneConfigFile = [self getPrefPaneConfigFile]; + if (prefPaneConfigFile == nil) { + return FALSE; + } + NSDictionary *config = [[[NSDictionary alloc] initWithObjectsAndKeys: + [NSNumber numberWithBool: useHTTPSPort], @"useHTTPSPort", + [NSNumber numberWithBool: enableInsecure], @"enableInsecure", + nil] autorelease]; + return [config writeToFile: prefPaneConfigFile atomically: YES]; +} + +- (BOOL) loadPrefPaneConfig +{ + NSString *prefPaneConfigFile = [self getPrefPaneConfigFile]; + if (prefPaneConfigFile == nil) { + return FALSE; + } + NSDictionary *config = [NSDictionary dictionaryWithContentsOfFile: prefPaneConfigFile]; + if (config == nil) { + return FALSE; + } + NSNumber *useHTTPSPort_ = [config objectForKey: @"useHTTPSPort"]; + if ([useHTTPSPort_ isKindOfClass: [NSNumber class]]) { + useHTTPSPort = [useHTTPSPort_ boolValue]; + } + NSNumber *enableInsecure_ = [config objectForKey: @"enableInsecure"]; + if ([enableInsecure_ isKindOfClass: [NSNumber class]]) { + enableInsecure = [enableInsecure_ boolValue]; + } + return TRUE; +} + +- (void) initializeCheckBoxesWithState: (DNSConfigurationState) currentState +{ + [self loadPrefPaneConfig]; + switch (currentState) { + case kDNS_CONFIGURATION_OPENDNS: + enableOpenDNSButton.state = NSOnState; + enableDNSCryptButton.state = NSOffState; + break; + + case kDNS_CONFIGURATION_LOCALHOST: + enableOpenDNSButton.state = NSOnState; + enableDNSCryptButton.state = NSOnState; + if (useHTTPSPort) { + useHTTPSButton.state = NSOnState; + } + break; + + default: + enableOpenDNSButton.state = NSOffState; + enableDNSCryptButton.state = NSOffState; + } + if (enableInsecure) { + enableInsecureDNSButton.state = NSOnState; + } +} + +- (BOOL) updateStatusWithCurrentConfig +{ + DNSConfigurationState currentState = kDNS_CONFIGURATION_UNKNOWN; + NSArray *resolversForLocalhost = [NSArray arrayWithObjects: kRESOLVER_IP_LOCALHOST, nil]; + NSArray *resolversForOpenDNS = [NSArray arrayWithObjects: kRESOLVER_IP_OPENDNS1, kRESOLVER_IP_OPENDNS2, nil]; + + NSError *err; + NSString *resolvConf = [NSString stringWithContentsOfFile: @"/etc/resolv.conf" encoding: NSISOLatin1StringEncoding error: &err]; + if (resolvConf) { + NSMutableArray *resolvers = [[[NSMutableArray alloc] init] autorelease]; + NSMutableString *resolversString = [[[NSMutableString alloc] init] autorelease]; + NSArray *lines = [resolvConf componentsSeparatedByString: @"\n"]; + for (NSString *line in lines) { + line = [line stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSArray *entry = [line componentsSeparatedByCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; + if (![[entry objectAtIndex: 0U] isEqualToString: @"nameserver"]) { + continue; + } + NSString *resolver = [entry objectAtIndex: 1U]; + [resolvers addObject: resolver]; + [resolversString appendFormat: @"%s%@", (resolversString.length > 0 ? "\n" : ""), resolver]; + } + if ([self resolversForService: resolvers includeResolvers: resolversForLocalhost]) { + currentState = kDNS_CONFIGURATION_LOCALHOST; + } else if ([self resolversForService: resolvers includeResolvers: resolversForOpenDNS]) { + currentState = kDNS_CONFIGURATION_OPENDNS; + } else { + currentState = kDNS_CONFIGURATION_VANILLA; + } + if ([resolversString isEqualToString: kRESOLVER_IP_LOCALHOST]) { + NSString *dnsCryptString; + + if (useHTTPSPort == NO) { + dnsCryptString = NSLocalizedString(@"%@\nusing DNSCrypt", @"Current resolver when DNSCrypt has been enabled"); + } else { + dnsCryptString = NSLocalizedString(@"%@\nusing DNSCrypt/HTTPS", @"Current resolver when DNSCrypt has been enabled on the HTTPS port"); + } + resolversString = [NSString stringWithFormat: dnsCryptString, kDNSCRYPT_RESOLVER]; + } + currentResolverTextField.stringValue = resolversString; + } + + NSBundle *bundle = [NSBundle bundleWithIdentifier: @"com.opendns.osx.DNSCrypt"]; + switch (currentState) { + case kDNS_CONFIGURATION_UNKNOWN: + statusText.stringValue = NSLocalizedString(@"No network", @"Status"); + statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_red.png"]] autorelease]; + break; + case kDNS_CONFIGURATION_VANILLA: + statusText.stringValue = NSLocalizedString(@"Unprotected", @"Status"); + statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_red.png"]] autorelease]; + break; + case kDNS_CONFIGURATION_OPENDNS: + statusText.stringValue = NSLocalizedString(@"Unprotected", @"Status"); + statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_yellow.png"]] autorelease]; + break; + case kDNS_CONFIGURATION_LOCALHOST: + statusText.stringValue = NSLocalizedString(@"Protected", @"Status"); + statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"shield_green.png"]] autorelease]; + break; + default: + return FALSE; + } + + if (checkBoxesHaveBeenInitialized == NO) { + [self initializeCheckBoxesWithState: currentState]; + } + return TRUE; +} + +- (void) showSpinners { + NSBundle *bundle = [NSBundle bundleWithIdentifier: kBUNDLE_IDENTIFIER]; + + statusText.stringValue = @""; + statusImageView.image = [[[NSImage alloc] initWithContentsOfFile: [bundle pathForImageResource: @"ajax-loader.gif"]] autorelease]; + currentResolverTextField.stringValue = @""; +} + +- (void) periodicallyUpdateStatusWithCurrentConfig { + [self updateStatusWithCurrentConfig]; + [NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(periodicallyUpdateStatusWithCurrentConfig) object: nil]; + [self performSelector: @selector(periodicallyUpdateStatusWithCurrentConfig) withObject:nil afterDelay: 0.7]; +} + +- (void) mainViewDidLoad +{ + state = kDNS_CONFIGURATION_UNKNOWN; + [self ensureConfigUpdaterIsRunning]; + [self periodicallyUpdateStatusWithCurrentConfig]; + [previewNotesWebView setDrawsBackground:false]; + + NSString *version = kDNSCRYPT_PACKAGE_VERSION; + NSString *softwareBlurbFormat = NSLocalizedString(@"This software (v: %@) encrypts DNS packets between your computer and OpenDNS. This prevents man-in-the-middle attacks and snooping of DNS traffic by ISPs or others.", @"Description of what the package does - %@ is replaced by the version number"); + NSString *provideFeedback = NSLocalizedString(@"Please help by providing feedback!", @"Ask for feedback"); + NSString *describeTCPWorkaround = NSLocalizedString(@"If you have a firewall or other middleware mangling your packets, try enabling DNSCrypt with TCP over port 443.", @"Describe what the TCP/443 checkbox does"); + NSString *describeFallback = NSLocalizedString(@"If you prefer reliability over security, enable fallback to insecure DNS.", @"Describe what the 'fallback to insecure mode' checkbox does"); + + NSMutableString *htmlString = [NSMutableString stringWithString: @""]; + + [htmlString appendFormat: softwareBlurbFormat, version]; + [htmlString appendString: @"

"]; + [htmlString appendString: @""]; + [htmlString appendString: provideFeedback]; + [htmlString appendString: @""]; + [htmlString appendString: @"
    "]; + [htmlString appendFormat: @"
  • %@
  • ", describeTCPWorkaround]; + [htmlString appendFormat: @"
  • %@
  • ", describeFallback]; + [htmlString appendString: @"
"]; + [htmlString appendString: @""]; + [[previewNotesWebView mainFrame] loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"file:///"]]; + + [feedbackWebView setDrawsBackground:false]; + [feedbackWebView setShouldUpdateWhileOffscreen:true]; + [feedbackWebView setUIDelegate:self]; + NSString *feedbackURLText = [NSString stringWithString:@"http://dnscrypt.opendns.com/feedback.php"]; + [[feedbackWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:feedbackURLText]]]; + + [releaseNotesWebView setDrawsBackground:false]; + [releaseNotesWebView setShouldUpdateWhileOffscreen:true]; + [releaseNotesWebView setUIDelegate:self]; + NSString *releaseNotesURLText = [NSString stringWithString:@"http://dnscrypt.opendns.com/releasenotes.php"]; + [[releaseNotesWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:releaseNotesURLText]]]; + + [aboutWebView setDrawsBackground:false]; + [aboutWebView setShouldUpdateWhileOffscreen:true]; + [aboutWebView setUIDelegate:self]; + NSString *aboutURLText = [NSString stringWithString:@"http://dnscrypt.opendns.com/about.php"]; + [[aboutWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:aboutURLText]]]; + +} + +- (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element + defaultMenuItems:(NSArray *)defaultMenuItems +{ + // disable right-click context menu + return nil; +} + +- (void) resetCheckBoxesHaveBeenInitialized +{ + checkBoxesHaveBeenInitialized = NO; +} + +- (BOOL) updateConfig +{ + checkBoxesHaveBeenInitialized = YES; + [NSObject cancelPreviousPerformRequestsWithTarget: self selector: @selector(resetCheckBoxesHaveBeenInitialized) object: nil]; + [self performSelector: @selector(resetCheckBoxesHaveBeenInitialized) withObject: self afterDelay:kCHECKBOXES_FREEZE_DELAY]; + [self ensureConfigUpdaterIsRunning]; + if (enableDNSCryptButton.state == NSOffState) { + if (enableOpenDNSButton.state == NSOffState) { + [self sendCommandToConfigUpdater: @"CONFIG VANILLA"]; + [self sendCommandToConfigUpdater: @"PROXY STOP"]; + state = kDNS_CONFIGURATION_VANILLA; + } else { + [self sendCommandToConfigUpdater: @"CONFIG OPENDNS"]; + [self sendCommandToConfigUpdater: @"PROXY STOP"]; + state = kDNS_CONFIGURATION_OPENDNS; + } + } else { + NSString *proxyStartCommand; + + if (useHTTPSPort == NO) { + proxyStartCommand = @"PROXY START --resolver-address=" kDNSCRYPT_RESOLVER; + } else { + proxyStartCommand = @"PROXY START --tcp-port=443 --resolver-address=" kDNSCRYPT_RESOLVER; + } + [self sendCommandToConfigUpdater: proxyStartCommand]; + [self sendCommandToConfigUpdater: @"CONFIG LOCALHOST"]; + state = kDNS_CONFIGURATION_LOCALHOST; + } + [self periodicallyUpdateStatusWithCurrentConfig]; + [self showSpinners]; + [self savePrefPaneConfig]; + + return TRUE; +} + +- (BOOL) updateInsecure { + [self ensureConfigUpdaterIsRunning]; + if (enableInsecure) { + [self sendCommandToConfigUpdater: @"FALLBACK ON"]; + } else { + [self sendCommandToConfigUpdater: @"FALLBACK OFF"]; + } + [self savePrefPaneConfig]; + + return TRUE; +} + +- (IBAction)enableOpenDNSButtonPressed:(NSButton *)sender +{ + if (sender.state == NSOffState && enableDNSCryptButton.state != NSOffState) { + enableDNSCryptButton.state = NSOffState; + useHTTPSButton.state = NSOffState; + } + [self updateConfig]; +} + +- (IBAction)enableDNSCryptButtonPressed:(NSButton *)sender +{ + if (sender.state == NSOnState && enableOpenDNSButton.state != NSOnState) { + enableOpenDNSButton.state = NSOnState; + } else if (sender.state == NSOffState) { + useHTTPSButton.state = NSOffState; + } + [self updateConfig]; +} + +- (IBAction)enableInsecureDNSButtonPressed:(NSButton *)sender +{ + if (sender.state == NSOnState) { + enableInsecure = YES; + } else { + enableInsecure = NO; + } + [self updateInsecure]; +} + +- (IBAction)enableHTTPSButtonPressed:(NSButton *)sender +{ + if (sender.state == NSOnState) { + useHTTPSPort = YES; + } else { + useHTTPSPort = NO; + } + if (useHTTPSPort == YES) { + enableDNSCryptButton.state = NSOnState; + enableOpenDNSButton.state = NSOnState; + } + [self updateConfig]; +} + +- (IBAction)openDNSLinkPushed:(NSButton *)sender +{ + (void) sender; + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString: kOPENDNS_URL]]; +} + + +@end diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.tiff b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.tiff new file mode 100644 index 0000000..2acf158 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/DNSCrypt.tiff differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/ajax-loader.gif b/DNSCrypt-Preference-Pane/DNSCrypt/ajax-loader.gif new file mode 100644 index 0000000..542b830 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/ajax-loader.gif differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/dnscrypt_256.png b/DNSCrypt-Preference-Pane/DNSCrypt/dnscrypt_256.png new file mode 100644 index 0000000..5117189 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/dnscrypt_256.png differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/DNSCrypt.xib b/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/DNSCrypt.xib new file mode 100644 index 0000000..48db080 --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/DNSCrypt.xib @@ -0,0 +1,1274 @@ + + + + 1070 + 11C74 + 1938 + 1138.23 + 567.00 + + 1938 + 822 + + + NSButton + NSTextFieldCell + NSButtonCell + NSImageView + NSBox + NSImageCell + NSTabView + WebView + NSCustomObject + NSTabViewItem + NSView + NSWindowTemplate + NSTextField + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + + + PluginDependencyRecalculationVersion + + + + + DNSCrypt + + + FirstResponder + + + NSApplication + + + 7 + 2 + {{176, 715}, {589, 375}} + 1081606144 + << do not localize >> + NSWindow + + View + + + {224.66399999999999, 10} + + + 256 + + + + 274 + {{13, 10}, {563, 359}} + + + _NS:461 + + + 1 + + + 256 + + + + 268 + {{15, 247}, {245, 24}} + + + _NS:239 + YES + + 67239424 + 0 + Enable OpenDNS + + LucidaGrande-Bold + 14 + 16 + + _NS:239 + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 268 + {{15, 223}, {204, 22}} + + + _NS:239 + YES + + 67239424 + 0 + Enable DNSCrypt + + _NS:239 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{15, 163}, {204, 22}} + + + _NS:239 + YES + + 67239424 + 0 + Fallback to insecure DNS + + LucidaGrande + 14 + 16 + + _NS:239 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{15, 187}, {244, 22}} + + + _NS:239 + YES + + 67239424 + 0 + DNSCrypt over TCP/443 (slower) + + _NS:239 + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 268 + {{14, 73}, {176, 19}} + + + _NS:3936 + YES + + 68288064 + 272630784 + Current DNS Resolver: + + LucidaGrande + 16 + 16 + + _NS:3936 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{54, 284}, {72, 19}} + + + _NS:3936 + YES + + 68288064 + 272630784 + Status: + + LucidaGrande + 18 + 16 + + _NS:3936 + + + + + + + + 268 + {{26, 17}, {240, 40}} + + + _NS:3596 + YES + + 67239424 + 4194304 + ... + + Monaco + 14 + 16 + + + _NS:3596 + + YES + + + 3 + MC4yMDQ2MzcwOTY4AA + + + + + + 268 + {{14, 87}, {240, 57}} + + + _NS:3596 + YES + + 67239424 + 4194304 + Note: Only enable TCP/443 if you use lots of commercial Wi-Fi hotspots at places like Starbucks or GoGo-Inflight Wifi. + + LucidaGrande + 11 + 16 + + + _NS:3596 + + YES + + + 6 + System + textColor + + + + + + + 268 + {{115, 283}, {125, 19}} + + + _NS:3596 + YES + + 67239424 + 4194304 + ... + + Monaco + 16 + 16 + + + _NS:3596 + + YES + + + 3 + MC4yMDQ2MzcwOTY4AA + + + + + + 256 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{302, 222}, {224, 88}} + + + YES + + 130560 + 33554432 + + NSImage + opendns_logo_300 + + 0 + 0 + 0 + NO + + YES + + + + 256 + + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple PNG pasteboard type + NSFilenamesPboardType + NeXT Encapsulated PostScript v1.2 pasteboard type + NeXT TIFF v4.0 pasteboard type + + {{17, 277}, {32.395949255088134, 32.395949255088134}} + + + YES + + 130560 + 33554432 + + NSImage + ajax-loader + + 2 + 0 + 0 + YES + + YES + + + + 12 + {{269.5, 2}, {4, 300}} + + + _NS:1557 + {0, 0} + + 67239424 + 0 + Box + + LucidaGrande + 13 + 1044 + + + 6 + System + textBackgroundColor + + 3 + MQA + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + 3 + 2 + 0 + NO + + + + 268 + {{323, 190}, {183, 32}} + + + _NS:2419 + YES + + 67239424 + 134217728 + http://www.opendns.com/ + + LucidaGrande + 12 + 16 + + _NS:2419 + + -2038021889 + 129 + + Browse the OpenDNS web site + + 400 + 75 + + + + + 256 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple URL pasteboard type + Apple Web Archive pasteboard type + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + WebURLsWithTitlesPboardType + public.png + public.url + public.url-name + + {{302, 2}, {224, 192}} + + + _NS:51 + + + + + + + + + + + YES + YES + + + + 12 + {{17, 213}, {240, 5}} + + + _NS:2411 + {0, 0} + + 67239424 + 0 + Box + + + + 3 + MCAwLjgwMDAwMDAxMTkAA + + + 3 + 2 + 0 + NO + + + {{10, 33}, {543, 313}} + + _NS:463 + + General + + + + + 2 + + + 256 + + + + 256 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple URL pasteboard type + Apple Web Archive pasteboard type + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + WebURLsWithTitlesPboardType + public.png + public.url + public.url-name + + {{17, 17}, {509, 293}} + + + _NS:51 + + + + YES + YES + + + {{10, 33}, {543, 313}} + + + _NS:620 + + About + + + + + 2 + + + 256 + + + + 256 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple URL pasteboard type + Apple Web Archive pasteboard type + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + WebURLsWithTitlesPboardType + public.png + public.url + public.url-name + + {{17, 17}, {509, 293}} + + + _NS:51 + + + + YES + YES + + + {{10, 33}, {543, 313}} + + _NS:620 + + Release Notes + + + + + 1 + + + 256 + + + + 256 + + Apple HTML pasteboard type + Apple PDF pasteboard type + Apple PICT pasteboard type + Apple URL pasteboard type + Apple Web Archive pasteboard type + NSColor pasteboard type + NSFilenamesPboardType + NSStringPboardType + NeXT RTFD pasteboard type + NeXT Rich Text Format v1.0 pasteboard type + NeXT TIFF v4.0 pasteboard type + WebURLsWithTitlesPboardType + public.png + public.url + public.url-name + + {{17, 17}, {509, 293}} + + + _NS:51 + + + + YES + YES + + + {{10, 33}, {543, 313}} + + _NS:610 + + Preview Feedback + + + + + + + LucidaGrande + 13 + 16 + + 0 + YES + YES + + + + + + {589, 375} + + + + {{0, 0}, {1920, 1178}} + {224.66399999999999, 32} + {10000000000000, 10000000000000} + YES + + + NSObject + + + + + + + _window + + + + 26 + + + + enableInsecureDNSButton + + + + 301 + + + + enableInsecureDNSButtonPressed: + + + + 293 + + + + useHTTPSButton + + + + 308 + + + + enableHTTPSButtonPressed: + + + + 309 + + + + statusText + + + + 304 + + + + enableDNSCryptButton + + + + 300 + + + + enableDNSCryptButtonPressed: + + + + 292 + + + + currentResolverTextField + + + + 296 + + + + enableOpenDNSButton + + + + 294 + + + + enableOpenDNSButtonPressed: + + + + 291 + + + + statusImageView + + + + 303 + + + + openDNSLinkPushed: + + + + 326 + + + + previewNotesWebView + + + + 346 + + + + feedbackWebView + + + + 353 + + + + releaseNotesWebView + + + + 355 + + + + aboutWebView + + + + 359 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + 12 + + + + + + PrefPane + + + 6 + + + + + + + + -3 + + + Application + + + 99 + + + + + + + + + + + 263 + + + + + 100 + + + + + + + + 103 + + + + + + + + + + + + + + + + + + + + + + 281 + + + + + + + + 282 + + + + + 279 + + + + + + + + 280 + + + + + 305 + + + + + + + + 306 + + + + + 274 + + + + + + + + 275 + + + + + 179 + + + + + + + + 180 + + + + + 162 + + + + + + + + 163 + + + + + 174 + + + + + + + + 175 + + + + + 139 + + + + + + + + 140 + + + + + 276 + + + + + 216 + + + + + + + + 217 + + + + + 270 + + + + + + + + 271 + + + + + 268 + + + + + + + + 269 + + + + + 323 + + + + + + + + 324 + + + + + 343 + + + + + 345 + + + + + 348 + + + + + + + + 351 + + + + + + + + 349 + + + + + + + + 350 + + + + + + + + 352 + + + + + 354 + + + + + 356 + + + + + + + + 357 + + + + + + + + 358 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{132, 373}, {668, 368}} + + AccessibilityDescription + + AccessibilityDescription + + Enable OpenDNS + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + AccessibilityDescription + + AccessibilityDescription + + Enable DNSCrypt + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + AccessibilityDescription + + AccessibilityDescription + + OpenDNS logo + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + AccessibilityDescription + + AccessibilityDescription + + Fallback to insecure DNS + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + AccessibilityDescription + + AccessibilityDescription + + Fallback to insecure DNS + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + com.apple.WebKitIBPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.WebKitIBPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + InitialTabViewItem + + InitialTabViewItem + + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 359 + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + YES + 3 + + {15, 15} + {35, 35} + {300, 119} + + + diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/InfoPlist.strings b/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/DNSCrypt-Preference-Pane/DNSCrypt/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/led_green.png b/DNSCrypt-Preference-Pane/DNSCrypt/led_green.png new file mode 100644 index 0000000..73a40a4 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/led_green.png differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/led_red.png b/DNSCrypt-Preference-Pane/DNSCrypt/led_red.png new file mode 100644 index 0000000..f3f2f40 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/led_red.png differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/led_yellow.png b/DNSCrypt-Preference-Pane/DNSCrypt/led_yellow.png new file mode 100644 index 0000000..e9a6c6a Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/led_yellow.png differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/opendns_logo_300.png b/DNSCrypt-Preference-Pane/DNSCrypt/opendns_logo_300.png new file mode 100644 index 0000000..78ba097 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/opendns_logo_300.png differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/shield_green.png b/DNSCrypt-Preference-Pane/DNSCrypt/shield_green.png new file mode 100644 index 0000000..be17fec Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/shield_green.png differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/shield_red.png b/DNSCrypt-Preference-Pane/DNSCrypt/shield_red.png new file mode 100644 index 0000000..d8b9e15 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/shield_red.png differ diff --git a/DNSCrypt-Preference-Pane/DNSCrypt/shield_yellow.png b/DNSCrypt-Preference-Pane/DNSCrypt/shield_yellow.png new file mode 100644 index 0000000..f79cc73 Binary files /dev/null and b/DNSCrypt-Preference-Pane/DNSCrypt/shield_yellow.png differ