PROCEDURE rap$define_name_resolver (
  domain_name, dn: application = $required
  name_servers, ns: list of application = $required
  resolver_configuration_file, rcf: file = $system.tcp_ip.resolver_configuration
  tcp_solution, ts: key (gateway_di, gdi), (tcp_device, td), keyend = td
  status)

  VAR
    command_file: string = '$local.'//$unique
    dot_count: integer
    ignore_status: status
    index: integer
    ipa_part: integer
    local_status: status
    ns_string: string
  VAREND

  local_status.normal = TRUE
  FOR each entry in name_servers
    index = 0
    dot_count = 0
    ns_string = $string(entry)//'.'

    WHILE index < $size(ns_string) AND dot_count < 4
      ipa_part = 0
      index = index + 1
      dot_count = dot_count + 1
      WHILE $evaluate($substring($string(ns_string),index,1),integer,check).normal
        ipa_part = (ipa_part * 10) + $integer($substring($string(ns_string),index,1))
        index = index + 1
      WHILEND
      IF ipa_part = 0 OR ipa_part > 255 OR $substring($string(ns_string),index,1) <> '.'
        index = $size(ns_string) + 1
      IFEND
    WHILEND

    IF index <> $size(ns_string) OR dot_count <> 4
      $system.put_line ' Invalid IP address format for name_server specified: '//$string(entry) o=$response
      local_status.normal = FALSE
    IFEND
  FOREND

  IF NOT local_status.normal
    local_status.condition = ipe$ipam_invalid_ip_address
    EXIT PROC WITH local_status
  IFEND

  IF tcp_solution = tcp_device THEN
    $system.collect_text $fname(command_file) until='    collect_end'
      $system.osf$command_library.manage_network_applications
        define_tcpip_application application=osa$udp_domain_name_resolver ..
             protocol=datagram_socket
          change_maximum_sockets ms=100
        end_define_tcpip_application
        activate_tcpip_application application=osa$udp_domain_name_resolver
        define_tcpip_application application=osa$tcp_domain_name_resolver ..
             protocol=stream_socket
          change_maximum_sockets ms=100
        end_define_tcpip_application
        activate_tcpip_application application=osa$tcp_domain_name_resolver
      quit
    collect_end
  ELSE
    $system.put_line ' WARNING - TCP/IP Gateway support terminated at release level 1.7.1' o=$response
    $system.collect_text $fname(command_file) until='    collect_end'
      $system.osf$command_library.manage_network_applications
        define_client client=osa$udp_domain_name_resolver protocol=cdna_session
          change_maximum_connections mc=100
        end_define_client
        activate_client client=osa$udp_domain_name_resolver
        define_client client=osa$tcp_domain_name_resolver protocol=cdna_session
          change_maximum_connections mc=100
        end_define_client
        activate_client client=osa$tcp_domain_name_resolver
      quit
    collect_end
  IFEND

  $system.put_line 'domain '//$string(domain_name) o=resolver_configuration_file.$next
  FOR each entry in name_servers
    $system.put_line 'nameserver '//$string(entry) o=resolver_configuration_file.$eoi
  FOREND
  $system.create_file_permit file=resolver_configuration_file group=public

  $system.include_file $fname(command_file) status=local_status
  $system.delete_file $fname(command_file) status=ignore_status

  IF local_status.normal THEN
    $system.put_line ' IPAM Domain Name Resolver is defined' o=$response
  IFEND

  EXIT_PROC WITH local_status WHEN NOT local_status.normal

PROCEND rap$define_name_resolver
