this repo has no description
at fixPythonPipStalling 193 lines 4.3 kB view raw
1/* 2 * Copyright (c) 2015-2018 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#import "configAgent.h" 25 26@interface ConfigAgent() 27 28@property (nonatomic) NWNetworkAgentRegistration * internalRegistrationObject; 29@property (nonatomic) NSString *internalAssociatedEntity; 30@property (nonatomic, copy) NSData *internalAgentData; 31@property (nonatomic) BOOL internalShouldUpdateAgent; 32@property (strong) void (^internalStartHandler)(void); 33@property (nonatomic) id internalAgentMapping; 34 35@end 36 37@implementation ConfigAgent 38 39@synthesize agentUUID; 40@synthesize agentDescription; 41@synthesize active; 42@synthesize kernelActivated; 43@synthesize userActivated; 44@synthesize voluntary; 45@synthesize specificUseOnly; 46 47+ (NSString *)agentDomain 48{ 49 return @kConfigAgentDomain; 50} 51 52+ (NSString *)agentType 53{ 54 return @kConfigAgentTypeGeneric; 55} 56 57+ (instancetype)agentFromData:(NSData *)data 58{ 59#pragma unused(data) 60 return nil; 61} 62 63- (instancetype)initWithParameters:(NSDictionary *)parameters 64{ 65 self = [super init]; 66 if (self) { 67 NSString *intf = [parameters valueForKey:@kEntityName]; 68 69 _internalRegistrationObject = nil; 70 _internalAssociatedEntity = [intf copy]; 71 _internalAgentData = nil; 72 _internalShouldUpdateAgent = YES; 73 _internalAgentMapping = nil; 74 75 active = YES; 76 kernelActivated = NO; 77 userActivated = YES; 78 voluntary = NO; 79 } 80 81 return self; 82} 83 84- (void)addAgentRegistrationObject:(NWNetworkAgentRegistration *)regObject 85{ 86 _internalRegistrationObject = regObject; 87} 88 89- (AgentType)getAgentType 90{ 91 return kAgentTypeUnknown; 92} 93 94- (NSUUID *)getAgentUUID 95{ 96 return nil; 97} 98 99- (NSString *)getAgentName 100{ 101 return @kConfigAgentTypeGeneric; 102} 103 104- (AgentSubType)getAgentSubType 105{ 106 return kAgentSubTypeUnknown; 107} 108 109- (NWNetworkAgentRegistration *)getRegistrationObject 110{ 111 return _internalRegistrationObject; 112} 113 114- (NSString *)getAssociatedEntity 115{ 116 return _internalAssociatedEntity; 117} 118 119- (NSData *)getAgentData 120{ 121 return _internalAgentData; 122} 123 124- (NSData *)copyAgentData 125{ 126 return _internalAgentData; 127} 128 129- (void)setAgentMapping:(id)agent 130{ 131 _internalAgentMapping = agent; 132} 133 134- (id)getAgentMapping 135{ 136 return _internalAgentMapping; 137} 138 139- (void)setStartHandler:(void (^)(void))startHandler 140{ 141 if (startHandler != nil) { 142 self.internalStartHandler = startHandler; 143 } 144} 145 146- (BOOL)startAgentWithOptions:(NSDictionary *)options 147{ 148#pragma unused(options) 149 BOOL ok = NO; 150 if (!self.active) { 151 self.active = YES; 152 ok = [self.internalRegistrationObject updateNetworkAgent:self]; 153 } 154 155 return ok; 156} 157 158- (void)updateAgentData:(NSData *)data 159{ 160 if ([data isEqual:_internalAgentData]) { 161 _internalShouldUpdateAgent = NO; 162 return; 163 } 164 165 _internalAgentData = [data copy]; 166 _internalShouldUpdateAgent = YES; 167} 168 169- (BOOL)shouldUpdateAgent 170{ 171 return _internalShouldUpdateAgent; 172} 173 174- (NSUUID *)createUUIDForName:(NSString *)agentName 175{ 176 /* We would like to have same UUIDs for an interface/domain. So here is a way to fix this, 177 without maintaining any state in configd. 178 179 - We know that every agent has a unique name. 180 - Use that name to calculate an MD5 hash. MD5 because the digest size is 16 bytes, and so it uuid_t. 181 - create a NSUUID from these raw bytes. 182 183 - So for a name, we would always have the same UUID. 184 185 */ 186 unsigned char hashValue[CC_SHA256_DIGEST_LENGTH]; 187 const char *strForHash = [agentName UTF8String]; 188 CC_SHA256(strForHash, (CC_LONG)strlen(strForHash), hashValue); 189 190 return [[NSUUID alloc] initWithUUIDBytes:hashValue]; 191} 192 193@end