Source/NSURLRequest+TNLAdditions.m (44 lines of code) (raw):

// // NSURLRequest+TNLAdditions.m // TwitterNetworkLayer // // Created on 11/9/16. // Copyright © 2020 Twitter. All rights reserved. // #import "NSURL+TNLAdditions.h" #import "NSURLRequest+TNLAdditions.h" #import "TNL_Project.h" #import "TNLError.h" NS_ASSUME_NONNULL_BEGIN @implementation NSURLRequest (TNLAdditions) - (nullable NSString *)tnl_hostName { return [self valueForHTTPHeaderField:@"Host"] ?: self.URL.host; } @end @implementation NSMutableURLRequest (TNLAdditions) - (TNLHostReplacementResult)tnl_replaceURLHost:(NSString *)newHost behavior:(TNLHostSanitizerBehavior)behavior error:(out NSError * __autoreleasing __nullable * __nullable)error { __block NSError *returnError = nil; tnl_defer(^{ if (returnError && error) { *error = returnError; } }); NSString *oldHost = self.URL.host; if (TNLHostSanitizerBehaviorBlock == behavior) { returnError = TNLErrorCreateWithCodeAndUserInfo(TNLErrorCodeGlobalHostWasBlocked, (oldHost) ? @{ TNLErrorHostKey : oldHost } : nil); return TNLHostReplacementResultFail; } else if (TNLHostSanitizerBehaviorIsModification(behavior)) { if (newHost.length == 0) { returnError = TNLErrorCreateWithCode(TNLErrorCodeOtherHostCannotBeEmpty); return TNLHostReplacementResultFail; } if ([oldHost isEqualToString:newHost]) { return TNLHostReplacementResultNoop; } self.URL = [self.URL tnl_URLByReplacingHost:newHost]; if (TNLHostSanitizerBehaviorChange == behavior && ![self valueForHTTPHeaderField:@"Host"]) { // update the "Host" [self setValue:oldHost forHTTPHeaderField:@"Host"]; } return TNLHostReplacementResultSuccess; } return TNLHostReplacementResultNoop; } @end NS_ASSUME_NONNULL_END