+- (NSObject *) getIORegistryEntry:(NSString *)path :(NSString *)entry {
+ NSObject *value(CYIOGetValue([path UTF8String], entry));
+
+ if (value != nil)
+ if ([value isKindOfClass:[NSData class]])
+ value = CYHex((NSData *) value);
+
+ return value;
+}
+
+- (void) _setCydiaSource:(NSString *)source {
+ @synchronized (HostConfig_) {
+ CydiaSource_ = source;
+ [Metadata_ setObject:source forKey:@"CydiaSource"];
+ }
+
+ Changed_ = true;
+}
+
+- (void) setCydiaSource:(NSString *)source {
+ [self performSelectorOnMainThread:@selector(_setCydiaSource:) withObject:source waitUntilDone:NO];
+}
+
+- (NSString *) cydiaSource {
+ @synchronized (HostConfig_) {
+ return (id) CydiaSource_ ?: [NSNull null];
+ }
+}
+
+- (NSArray *) getMetadataKeys {
+@synchronized (Values_) {
+ return [Values_ allKeys];
+} }
+
+- (id) getMetadataValue:(NSString *)key {
+@synchronized (Values_) {
+ return [Values_ objectForKey:key];
+} }
+
+- (void) setMetadataValue:(NSString *)key :(NSString *)value {
+@synchronized (Values_) {
+ if (value == nil || value == (id) [WebUndefined undefined] || value == (id) [NSNull null])
+ [Values_ removeObjectForKey:key];
+ else
+ [Values_ setObject:value forKey:key];
+
+ [delegate_ performSelectorOnMainThread:@selector(updateValues) withObject:nil waitUntilDone:YES];
+} }
+
+- (id) getSessionValue:(NSString *)key {
+@synchronized (SessionData_) {
+ return [SessionData_ objectForKey:key];
+} }
+
+- (void) setSessionValue:(NSString *)key :(NSString *)value {
+@synchronized (SessionData_) {
+ if (value == (id) [WebUndefined undefined])
+ [SessionData_ removeObjectForKey:key];
+ else
+ [SessionData_ setObject:value forKey:key];
+} }
+
+- (void) addBridgedHost:(NSString *)host {
+@synchronized (HostConfig_) {
+ [BridgedHosts_ addObject:host];
+} }
+
+- (void) addInsecureHost:(NSString *)host {
+@synchronized (HostConfig_) {
+ [InsecureHosts_ addObject:host];
+} }
+
+- (void) addTokenHost:(NSString *)host {
+@synchronized (HostConfig_) {
+ [TokenHosts_ addObject:host];
+} }
+
+- (void) addPipelinedHost:(NSString *)host scheme:(NSString *)scheme {
+@synchronized (HostConfig_) {
+ if (scheme != (id) [WebUndefined undefined])
+ host = [NSString stringWithFormat:@"%@:%@", [scheme lowercaseString], host];
+
+ [PipelinedHosts_ addObject:host];
+} }
+
+- (void) popViewController:(NSNumber *)value {
+ if (value == (id) [WebUndefined undefined])
+ value = [NSNumber numberWithBool:YES];
+ [indirect_ performSelectorOnMainThread:@selector(popViewControllerWithNumber:) withObject:value waitUntilDone:NO];
+}
+
+- (void) addSource:(NSString *)href :(NSString *)distribution :(WebScriptObject *)sections {
+ NSMutableArray *array([NSMutableArray arrayWithCapacity:[sections count]]);
+
+ for (NSString *section in sections)
+ [array addObject:section];
+
+ [delegate_ performSelectorOnMainThread:@selector(addSource:) withObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:
+ @"deb", @"Type",
+ href, @"URI",
+ distribution, @"Distribution",
+ array, @"Sections",
+ nil] waitUntilDone:NO];
+}
+