
  PROCEDURE [INLINE] dfp$validate_rpc_status
    (    p_cpu_queue_entry: ^dft$cpu_queue_entry;
     VAR p_receive_rpc_buffer_header: ^dft$rpc_response_buffer_header;
     VAR status: ost$status);

    VAR
      p_status_response: ^dft$status_response,
      p_status: ^ost$status;

    RESET p_cpu_queue_entry^.p_receive_buffer;
    NEXT p_status_response IN p_cpu_queue_entry^.p_receive_buffer;
    IF p_status_response^.buffer_header.version <>
          dfc$status_buffer_version THEN
      osp$set_status_abnormal (dfc$file_server_id, dfe$protocol_error_version,
            p_status_response^.buffer_header.version, status);
      osp$append_status_parameter (osc$status_parameter_delimiter,
            dfc$status_buffer_version, status);
      IF dfv$file_server_debug_enabled THEN
        osp$system_error (' DF - CLIENT PROTOCOL ERROR VERSION ',
              ^status);
      IFEND;
      RETURN;
    IFEND;

    IF p_status_response^.buffer_header.transaction_count <>
          p_cpu_queue_entry^.transaction_count THEN
      osp$set_status_abnormal (dfc$file_server_id, dfe$protocol_error_sequence,
            'CLIENT - transaction count', status);
      osp$append_status_integer (osc$status_parameter_delimiter,
            p_cpu_queue_entry^.transaction_count, 10, FALSE, status);
      osp$append_status_integer (osc$status_parameter_delimiter,
            p_status_response^.buffer_header.transaction_count, 10, FALSE,
            status);
      IF dfv$file_server_debug_enabled THEN
        osp$system_error (' DF - CLIENT PROTOCOL ERROR TRANS COUNT ',
              ^status);
      IFEND;
      RETURN;
    IFEND;

    IF p_status_response^.status.normal THEN
      status.normal := TRUE;
    ELSE
      NEXT p_status IN p_cpu_queue_entry^.p_receive_buffer;
      status := p_status^;
      IF NOT status.normal AND ((status.condition = dfe$restart_server_request) OR
            (status.condition = dfe$server_has_terminated) OR
            (status.condition = dfe$server_request_terminated) OR
            (status.condition = dfe$server_not_active)) THEN
        RETURN;
      IFEND;
    IFEND;

    NEXT p_receive_rpc_buffer_header IN p_cpu_queue_entry^.p_receive_buffer;
    IF p_receive_rpc_buffer_header^.call_progress.transaction_per_rpc_request <>
          p_cpu_queue_entry^.call_progress.transaction_per_rpc_request THEN
      { Protocol error takes precedence over the status from the user.
      osp$set_status_abnormal (dfc$file_server_id, dfe$protocol_error_sequence,
            'CLIENT - rpc transaction count', status);
      osp$append_status_integer (osc$status_parameter_delimiter,
            p_cpu_queue_entry^.call_progress.transaction_per_rpc_request, 10,
            FALSE, status);
      osp$append_status_integer (osc$status_parameter_delimiter,
            p_receive_rpc_buffer_header^.call_progress.
            transaction_per_rpc_request, 10, FALSE, status);
      IF dfv$file_server_debug_enabled THEN
        osp$system_error (' DF - CLIENT PROTOCOL ERROR RPC COUNT',
              ^status);
      IFEND;
      RETURN;
    IFEND;
  PROCEND dfp$validate_rpc_status;
?? PUSH (LISTEXT := ON) ??
*copyc dft$rpc_buffer_header
*copyc dfd$driver_queue_types
*copyc dfe$error_condition_codes
*copyc dfv$file_server_debug_enabled
*copyc osp$append_status_integer
*copyc osp$append_status_parameter
*copyc osp$set_status_abnormal
*copyc osp$system_error
?? POP ??
