| 
					
				 | 
			
			
				@@ -144,8 +144,9 @@ static const NSTimeInterval kInvertedTimeout = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       [[GRPCProtoMethod alloc] initWithPackage:kPackage service:kService method:@"EmptyCall"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   kUnaryCallMethod = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       [[GRPCProtoMethod alloc] initWithPackage:kPackage service:kService method:@"UnaryCall"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  kOutputStreamingCallMethod = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      [[GRPCProtoMethod alloc] initWithPackage:kPackage service:kService method:@"StreamingOutputCall"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  kOutputStreamingCallMethod = [[GRPCProtoMethod alloc] initWithPackage:kPackage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                service:kService 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                                 method:@"StreamingOutputCall"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   kFullDuplexCallMethod = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       [[GRPCProtoMethod alloc] initWithPackage:kPackage service:kService method:@"FullDuplexCall"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -616,30 +617,29 @@ static const NSTimeInterval kInvertedTimeout = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   request.payload.body = [NSMutableData dataWithLength:kSimpleDataLength]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPCRequestOptions *callRequest = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  [[GRPCRequestOptions alloc] initWithHost:(NSString *)kHostAddress 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      path:kFullDuplexCallMethod.HTTPPath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    safety:GRPCCallSafetyDefault]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      [[GRPCRequestOptions alloc] initWithHost:(NSString *)kHostAddress 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                          path:kFullDuplexCallMethod.HTTPPath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        safety:GRPCCallSafetyDefault]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPCMutableCallOptions *options = [[GRPCMutableCallOptions alloc] init]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   options.transportType = GRPCTransportTypeInsecure; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   options.enableFlowControl = YES; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   __block NSUInteger messageId = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   __block GRPCCall2 *call = [[GRPCCall2 alloc] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     initWithRequestOptions:callRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     responseHandler:[[ClientTestsBlockCallbacks alloc] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      initWithInitialMetadataCallback:nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      messageCallback:^(NSData *message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        if (messageId <= 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                          [expectPassedMessage fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                          [expectBlockedMessage fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        messageId++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      closeCallback:nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      writeDataCallback:^{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                        [expectWriteTwice fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                      }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                     callOptions:options]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      initWithRequestOptions:callRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             responseHandler:[[ClientTestsBlockCallbacks alloc] initWithInitialMetadataCallback:nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 messageCallback:^(NSData *message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   if (messageId <= 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     [expectPassedMessage fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                     [expectBlockedMessage fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   messageId++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 closeCallback:nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 writeDataCallback:^{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   [expectWriteTwice fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                 callOptions:options]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   [call receiveNextMessages:2]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   [call start]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -669,16 +669,15 @@ static const NSTimeInterval kInvertedTimeout = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   __block BOOL closed = NO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GRPCCall2 *call = [[GRPCCall2 alloc] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       initWithRequestOptions:callRequest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             responseHandler:[[ClientTestsBlockCallbacks alloc] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                 initWithInitialMetadataCallback:nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                 messageCallback:^(NSData *message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                   [expectPassedMessage fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                   XCTAssertFalse(closed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              closeCallback:^(NSDictionary *ttrailers, NSError *error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                closed = YES; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                [expectPassedClose fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                              }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             responseHandler:[[ClientTestsBlockCallbacks alloc] initWithInitialMetadataCallback:nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 messageCallback:^(NSData *message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   [expectPassedMessage fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   XCTAssertFalse(closed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 closeCallback:^(NSDictionary *ttrailers, NSError *error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   closed = YES; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                   [expectPassedClose fulfill]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 }] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  callOptions:options]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   [call receiveNextMessages:1]; 
			 |