|  | @@ -55,6 +55,21 @@ bool leak_check = true;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static void dont_log(gpr_log_func_args *args) {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +////////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | +// global state
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static gpr_timespec g_now;
 | 
	
		
			
				|  |  | +static grpc_server *g_server;
 | 
	
		
			
				|  |  | +static grpc_channel *g_channel;
 | 
	
		
			
				|  |  | +static grpc_resource_quota *g_resource_quota;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +extern gpr_timespec (*gpr_now_impl)(gpr_clock_type clock_type);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static gpr_timespec now_impl(gpr_clock_type clock_type) {
 | 
	
		
			
				|  |  | +  GPR_ASSERT(clock_type != GPR_TIMESPAN);
 | 
	
		
			
				|  |  | +  return g_now;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  ////////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  |  // input_stream: allows easy access to input bytes, and allows reading a little
 | 
	
		
			
				|  |  |  //               past the end (avoiding needing to check everywhere)
 | 
	
	
		
			
				|  | @@ -150,13 +165,27 @@ static grpc_channel_args *read_args(input_stream *inp) {
 | 
	
		
			
				|  |  |    size_t n = next_byte(inp);
 | 
	
		
			
				|  |  |    grpc_arg *args = gpr_malloc(sizeof(*args) * n);
 | 
	
		
			
				|  |  |    for (size_t i = 0; i < n; i++) {
 | 
	
		
			
				|  |  | -    bool is_string = next_byte(inp) & 1;
 | 
	
		
			
				|  |  | -    args[i].type = is_string ? GRPC_ARG_STRING : GRPC_ARG_INTEGER;
 | 
	
		
			
				|  |  | -    args[i].key = read_string(inp);
 | 
	
		
			
				|  |  | -    if (is_string) {
 | 
	
		
			
				|  |  | -      args[i].value.string = read_string(inp);
 | 
	
		
			
				|  |  | -    } else {
 | 
	
		
			
				|  |  | -      args[i].value.integer = read_int(inp);
 | 
	
		
			
				|  |  | +    switch (next_byte(inp)) {
 | 
	
		
			
				|  |  | +      case 1:
 | 
	
		
			
				|  |  | +        args[i].type = GRPC_ARG_STRING;
 | 
	
		
			
				|  |  | +        args[i].key = read_string(inp);
 | 
	
		
			
				|  |  | +        args[i].value.string = read_string(inp);
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 2:
 | 
	
		
			
				|  |  | +        args[i].type = GRPC_ARG_INTEGER;
 | 
	
		
			
				|  |  | +        args[i].key = read_string(inp);
 | 
	
		
			
				|  |  | +        args[i].value.integer = read_int(inp);
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      case 3:
 | 
	
		
			
				|  |  | +        args[i].type = GRPC_ARG_POINTER;
 | 
	
		
			
				|  |  | +        args[i].key = GRPC_ARG_RESOURCE_QUOTA;
 | 
	
		
			
				|  |  | +        args[i].value.pointer.vtable = grpc_resource_quota_arg_vtable();
 | 
	
		
			
				|  |  | +        args[i].value.pointer.p = g_resource_quota;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +      default:
 | 
	
		
			
				|  |  | +        end(inp);
 | 
	
		
			
				|  |  | +        n = i;
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    grpc_channel_args *a = gpr_malloc(sizeof(*a));
 | 
	
	
		
			
				|  | @@ -167,21 +196,6 @@ static grpc_channel_args *read_args(input_stream *inp) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static bool is_eof(input_stream *inp) { return inp->cur == inp->end; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -////////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  | -// global state
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -static gpr_timespec g_now;
 | 
	
		
			
				|  |  | -static grpc_server *g_server;
 | 
	
		
			
				|  |  | -static grpc_channel *g_channel;
 | 
	
		
			
				|  |  | -static grpc_resource_quota *g_resource_quota;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -extern gpr_timespec (*gpr_now_impl)(gpr_clock_type clock_type);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -static gpr_timespec now_impl(gpr_clock_type clock_type) {
 | 
	
		
			
				|  |  | -  GPR_ASSERT(clock_type != GPR_TIMESPAN);
 | 
	
		
			
				|  |  | -  return g_now;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  ////////////////////////////////////////////////////////////////////////////////
 | 
	
		
			
				|  |  |  // dns resolution
 | 
	
		
			
				|  |  |  
 |