Ejemplo n.º 1
0
static void* method_config_convert_value(
    const grpc_method_config* method_config) {
  message_size_limits* value = gpr_malloc(sizeof(message_size_limits));
  const int32_t* max_request_message_bytes =
      grpc_method_config_get_max_request_message_bytes(method_config);
  value->max_send_size =
      max_request_message_bytes != NULL ? *max_request_message_bytes : -1;
  const int32_t* max_response_message_bytes =
      grpc_method_config_get_max_response_message_bytes(method_config);
  value->max_recv_size =
      max_response_message_bytes != NULL ? *max_response_message_bytes : -1;
  return value;
}
Ejemplo n.º 2
0
// Constructor for call_data.
static grpc_error* init_call_elem(grpc_exec_ctx* exec_ctx,
                                  grpc_call_element* elem,
                                  grpc_call_element_args* args) {
  channel_data* chand = elem->channel_data;
  call_data* calld = elem->call_data;
  calld->next_recv_message_ready = NULL;
  grpc_closure_init(&calld->recv_message_ready, recv_message_ready, elem);
  // Get max sizes from channel data, then merge in per-method config values.
  // Note: Per-method config is only available on the client, so we
  // apply the max request size to the send limit and the max response
  // size to the receive limit.
  calld->max_send_size = chand->max_send_size;
  calld->max_recv_size = chand->max_recv_size;
  if (chand->method_config_table != NULL) {
    grpc_method_config* method_config =
        grpc_method_config_table_get_method_config(chand->method_config_table,
                                                   args->path);
    if (method_config != NULL) {
      const int32_t* max_request_message_bytes =
          grpc_method_config_get_max_request_message_bytes(method_config);
      if (max_request_message_bytes != NULL &&
          (*max_request_message_bytes < calld->max_send_size ||
           calld->max_send_size < 0)) {
        calld->max_send_size = *max_request_message_bytes;
      }
      const int32_t* max_response_message_bytes =
          grpc_method_config_get_max_response_message_bytes(method_config);
      if (max_response_message_bytes != NULL &&
          (*max_response_message_bytes < calld->max_recv_size ||
           calld->max_recv_size < 0)) {
        calld->max_recv_size = *max_response_message_bytes;
      }
    }
  }
  return GRPC_ERROR_NONE;
}