You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.4 KiB

  1. //
  2. // FLEXNetworkTransaction.m
  3. // Flipboard
  4. //
  5. // Created by Ryan Olson on 2/8/15.
  6. // Copyright (c) 2015 Flipboard. All rights reserved.
  7. //
  8. #import "FLEXNetworkTransaction.h"
  9. @interface FLEXNetworkTransaction ()
  10. @property (nonatomic, readwrite) NSData *cachedRequestBody;
  11. @end
  12. @implementation FLEXNetworkTransaction
  13. - (NSString *)description
  14. {
  15. NSString *description = [super description];
  16. description = [description stringByAppendingFormat:@" id = %@;", self.requestID];
  17. description = [description stringByAppendingFormat:@" url = %@;", self.request.URL];
  18. description = [description stringByAppendingFormat:@" duration = %f;", self.duration];
  19. description = [description stringByAppendingFormat:@" receivedDataLength = %lld", self.receivedDataLength];
  20. return description;
  21. }
  22. - (NSData *)cachedRequestBody {
  23. if (!_cachedRequestBody) {
  24. if (self.request.HTTPBody != nil) {
  25. _cachedRequestBody = self.request.HTTPBody;
  26. } else if ([self.request.HTTPBodyStream conformsToProtocol:@protocol(NSCopying)]) {
  27. NSInputStream *bodyStream = [self.request.HTTPBodyStream copy];
  28. const NSUInteger bufferSize = 1024;
  29. uint8_t buffer[bufferSize];
  30. NSMutableData *data = [NSMutableData data];
  31. [bodyStream open];
  32. NSInteger readBytes = 0;
  33. do {
  34. readBytes = [bodyStream read:buffer maxLength:bufferSize];
  35. [data appendBytes:buffer length:readBytes];
  36. } while (readBytes > 0);
  37. [bodyStream close];
  38. _cachedRequestBody = data;
  39. }
  40. }
  41. return _cachedRequestBody;
  42. }
  43. + (NSString *)readableStringFromTransactionState:(FLEXNetworkTransactionState)state
  44. {
  45. NSString *readableString = nil;
  46. switch (state) {
  47. case FLEXNetworkTransactionStateUnstarted:
  48. readableString = @"Unstarted";
  49. break;
  50. case FLEXNetworkTransactionStateAwaitingResponse:
  51. readableString = @"Awaiting Response";
  52. break;
  53. case FLEXNetworkTransactionStateReceivingData:
  54. readableString = @"Receiving Data";
  55. break;
  56. case FLEXNetworkTransactionStateFinished:
  57. readableString = @"Finished";
  58. break;
  59. case FLEXNetworkTransactionStateFailed:
  60. readableString = @"Failed";
  61. break;
  62. }
  63. return readableString;
  64. }
  65. @end