SRURLUtilities.m 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // Copyright (c) 2016-present, Facebook, Inc.
  3. // All rights reserved.
  4. //
  5. // This source code is licensed under the BSD-style license found in the
  6. // LICENSE file in the root directory of this source tree. An additional grant
  7. // of patent rights can be found in the PATENTS file in the same directory.
  8. //
  9. #import "SRURLUtilities.h"
  10. #import "SRHash.h"
  11. NS_ASSUME_NONNULL_BEGIN
  12. NSString *SRURLOrigin(NSURL *url)
  13. {
  14. NSMutableString *origin = [NSMutableString string];
  15. NSString *scheme = url.scheme.lowercaseString;
  16. if ([scheme isEqualToString:@"wss"]) {
  17. scheme = @"https";
  18. } else if ([scheme isEqualToString:@"ws"]) {
  19. scheme = @"http";
  20. }
  21. [origin appendFormat:@"%@://%@", scheme, url.host];
  22. NSNumber *port = url.port;
  23. BOOL portIsDefault = (!port ||
  24. ([scheme isEqualToString:@"http"] && port.integerValue == 80) ||
  25. ([scheme isEqualToString:@"https"] && port.integerValue == 443));
  26. if (!portIsDefault) {
  27. [origin appendFormat:@":%@", port.stringValue];
  28. }
  29. return origin;
  30. }
  31. extern BOOL SRURLRequiresSSL(NSURL *url)
  32. {
  33. NSString *scheme = url.scheme.lowercaseString;
  34. return ([scheme isEqualToString:@"wss"] || [scheme isEqualToString:@"https"]);
  35. }
  36. extern NSString *_Nullable SRBasicAuthorizationHeaderFromURL(NSURL *url)
  37. {
  38. NSData *data = [[NSString stringWithFormat:@"%@:%@", url.user, url.password] dataUsingEncoding:NSUTF8StringEncoding];
  39. return [NSString stringWithFormat:@"Basic %@", SRBase64EncodedStringFromData(data)];
  40. }
  41. extern NSString *_Nullable SRStreamNetworkServiceTypeFromURLRequest(NSURLRequest *request)
  42. {
  43. NSString *networkServiceType = nil;
  44. switch (request.networkServiceType) {
  45. case NSURLNetworkServiceTypeDefault:
  46. break;
  47. case NSURLNetworkServiceTypeVoIP:
  48. networkServiceType = NSStreamNetworkServiceTypeVoIP;
  49. break;
  50. case NSURLNetworkServiceTypeVideo:
  51. networkServiceType = NSStreamNetworkServiceTypeVideo;
  52. break;
  53. case NSURLNetworkServiceTypeBackground:
  54. networkServiceType = NSStreamNetworkServiceTypeBackground;
  55. break;
  56. case NSURLNetworkServiceTypeVoice:
  57. networkServiceType = NSStreamNetworkServiceTypeVoice;
  58. break;
  59. #if (__MAC_OS_X_VERSION_MAX_ALLOWED >= 101200 || __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000 || __TV_OS_VERSION_MAX_ALLOWED >= 100000 || __WATCH_OS_VERSION_MAX_ALLOWED >= 30000)
  60. case NSURLNetworkServiceTypeCallSignaling:
  61. networkServiceType = NSStreamNetworkServiceTypeCallSignaling;
  62. break;
  63. #endif
  64. }
  65. return networkServiceType;
  66. }
  67. NS_ASSUME_NONNULL_END