/* * Copyright (c) 2018-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the LICENSE * file in the root directory of this source tree. * */ #if FB_SONARKIT_ENABLED #import #import #import #import "FlipperKitNetworkPlugin.h" #import "SKNetworkReporter.h" #import "SonarKitNetworkPlugin+CPPInitialization.h" #import "SKBufferingPlugin+CPPInitialization.h" #import "SKDispatchQueue.h" @interface FlipperKitNetworkPlugin () @end @implementation FlipperKitNetworkPlugin - (void)setAdapter:(id)adapter { _adapter = adapter; _adapter.delegate = self; } - (instancetype)init { if (self = [super initWithQueue:dispatch_queue_create("com.sonarkit.network.buffer", DISPATCH_QUEUE_SERIAL)]) { } return self; } - (instancetype)initWithNetworkAdapter:(id)adapter { if (self = [super initWithQueue:dispatch_queue_create("com.sonarkit.network.buffer", DISPATCH_QUEUE_SERIAL)]) { adapter.delegate = self; _adapter = adapter; } return self; } - (instancetype)initWithNetworkAdapter:(id)adapter queue:(dispatch_queue_t)queue; { if (self = [super initWithQueue:queue]) { adapter.delegate = self; _adapter = adapter; } return self; } #pragma mark - SKNetworkReporterDelegate - (void)didObserveRequest:(SKRequestInfo *)request; { NSMutableArray *> *headers = [NSMutableArray new]; for (NSString *key in [request.request.allHTTPHeaderFields allKeys]) { NSDictionary *header = @{ @"key": key, @"value": request.request.allHTTPHeaderFields[key] }; [headers addObject: header]; } NSString *body = request.body; [self send:@"newRequest" sonarObject:@{ @"id": @(request.identifier), @"timestamp": @(request.timestamp), @"method": request.request.HTTPMethod ?: [NSNull null], @"url": [request.request.URL absoluteString] ?: [NSNull null], @"headers": headers, @"data": body ? body : [NSNull null] }]; } - (void)didObserveResponse:(SKResponseInfo *)response { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response.response; NSMutableArray *> *headers = [NSMutableArray new]; for (NSString *key in [httpResponse.allHeaderFields allKeys]) { NSDictionary *header = @{ @"key": key, @"value": httpResponse.allHeaderFields[key] }; [headers addObject: header]; } NSString *body = response.body; [self send:@"newResponse" sonarObject:@{ @"id": @(response.identifier), @"timestamp": @(response.timestamp), @"status": @(httpResponse.statusCode), @"reason": [NSHTTPURLResponse localizedStringForStatusCode: httpResponse.statusCode] ?: [NSNull null], @"headers": headers, @"data": body ? body : [NSNull null] }]; } @end @implementation FlipperKitNetworkPlugin (CPPInitialization) - (instancetype)initWithNetworkAdapter:(id)adapter dispatchQueue:(std::shared_ptr)queue { if (self = [super initWithDispatchQueue:queue]) { adapter.delegate = self; _adapter = adapter; } return self; } @end #endif