Guest User

Untitled

a guest
Jun 19th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. //
  2. // MHProxy.m
  3. // MineHelmet
  4. //
  5. // Created by Dylan Lukes on 10/24/10.
  6. // Copyright 2010 Dylan Lukes. All rights reserved.
  7. //
  8.  
  9. #import "MHProxy.h"
  10.  
  11. #define MAX_READ_SIZE 512
  12.  
  13. @interface MHProxy (PrivateMethods)
  14.  
  15. - (void)handleClientInputEvent:(NSStreamEvent)event;
  16. - (void)handleClientOutputEvent:(NSStreamEvent)event;
  17. - (void)handleServerInputEvent:(NSStreamEvent)event;
  18. - (void)handleServerOutputEvent:(NSStreamEvent)event;
  19.  
  20. @end
  21.  
  22.  
  23. @implementation MHProxy
  24.  
  25. - (id)initWithClientDescriptor:(int)clientfd serverDescriptor:(int)serverfd {
  26. if (self = [super init]) {
  27. clientWriteQueue = [[NSMutableArray alloc] init];
  28. serverWriteQueue = [[NSMutableArray alloc] init];
  29.  
  30. CFStreamCreatePairWithSocket(NULL,
  31. clientfd,
  32. (CFReadStreamRef *)&fromClient,
  33. (CFWriteStreamRef *)&toClient);
  34. CFStreamCreatePairWithSocket(NULL,
  35. serverfd,
  36. (CFReadStreamRef *)&fromServer,
  37. (CFWriteStreamRef *)&toServer);
  38.  
  39. [fromClient retain];
  40. [toClient retain];
  41. [fromServer retain];
  42. [toServer retain];
  43.  
  44. [fromClient setDelegate:self];
  45. [toClient setDelegate:self];
  46. [fromServer setDelegate:self];
  47. [toServer setDelegate:self];
  48.  
  49. [fromClient scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
  50. [toClient scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
  51. [fromServer scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
  52. [toServer scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
  53.  
  54. [fromClient open];
  55. [toClient open];
  56. [fromServer open];
  57. [toServer open];
  58. }
  59. return self;
  60. }
  61.  
  62. - (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)streamEvent {
  63. // Check for errors:
  64. if (streamEvent == NSStreamEventErrorOccurred) {
  65. [NSApp presentError:[stream streamError]];
  66. }
  67.  
  68. // Dispatch events
  69. if (stream == fromClient && streamEvent == NSStreamEventHasBytesAvailable)
  70. [self handleClientInputEvent:streamEvent];
  71. if (stream == toClient && streamEvent == NSStreamEventHasSpaceAvailable)
  72. [self handleClientOutputEvent:streamEvent];
  73. if (stream == fromServer && streamEvent == NSStreamEventHasBytesAvailable)
  74. [self handleServerInputEvent:streamEvent];
  75. if (stream == toServer && streamEvent == NSStreamEventHasSpaceAvailable)
  76. [self handleServerOutputEvent:streamEvent];
  77. }
  78.  
  79. - (void)handleClientInputEvent:(NSStreamEvent)event{
  80. uint8_t buffer[512];
  81. NSInteger bytesRead = [fromClient read:buffer maxLength:512];
  82.  
  83. // Enqueue data for output
  84. [serverWriteQueue addObject:[NSData dataWithBytes:buffer length:bytesRead]];
  85. }
  86.  
  87. - (void)handleClientOutputEvent:(NSStreamEvent)event{
  88. if ([clientWriteQueue count] > 0) {
  89. NSData *data = [clientWriteQueue objectAtIndex:0];
  90. [toClient write:[data bytes] maxLength:[data length]];
  91. }
  92. }
  93.  
  94. - (void)handleServerInputEvent:(NSStreamEvent)event{
  95. uint8_t buffer[512];
  96. NSInteger bytesRead = [fromServer read:buffer maxLength:512];
  97.  
  98. // Enqueue data for output
  99. [clientWriteQueue addObject:[NSData dataWithBytes:buffer length:bytesRead]];
  100. }
  101.  
  102. - (void)handleServerOutputEvent:(NSStreamEvent)event{
  103. if ([serverWriteQueue count] > 0) {
  104. NSData *data = [serverWriteQueue objectAtIndex:0];
  105. [toServer write:[data bytes] maxLength:[data length]];
  106. }
  107. }
  108.  
  109. - (void)dealloc {
  110. [clientWriteQueue release];
  111. [serverWriteQueue release];
  112. [super dealloc];
  113. }
  114.  
  115. @end
Add Comment
Please, Sign In to add comment