PROCEDURE activate_smtp (
  debug_mode, dm              : boolean = $optional
  default_destination, dd     : application = $optional
  job_class, jc               : name = $job_default(job_class, batch)
  load_map, lm                : file = $optional
  maximum_queued_time, mqt    : any of integer 0..65535, ..
                                       key infinite, keyend, anyend = $optional
  maximum_subtasks, ms        : integer 1..20 = $optional
  process_interval, pi        : integer 0..60 = $optional
  retransmission_interval, ri : integer 5..60 = $optional
  status
  )


*IF $variable(rav$proc_doc,declared)<>'UNKNOWN'

"   This request initiates the SMTP client application as a NOS/VE job.
*IFEND


  VAR
    application_job_name: name = $name('SMTP'//$mainframe(id))
    ignore_status: status
    manna_status: status
    map_file: string
    options: string
    smtp_bound_product: file = $system.tcp_ip.smtp_bound_product
    smtp_job_log: file = $system.tcp_ip.smtp_job_log
    select_status: status
    starting_procedure_name: name = ipp$smtp_controller
    submit_status: status
    system_job_name: name
    task_parameters: string
  VAREND

  IF NOT $file(smtp_bound_product permanent) THEN
    put_line ' --ERROR-- Unable to activate:  SMTP is not installed.'..
      o=$response
    EXIT procedure
  IFEND

  $system.osf$command_library.manage_network_applications status=manna_status
  EXIT_PROC WITH manna_status WHEN NOT manna_status.normal

  display_client_status client=osa$smtp_client o=$null status=manna_status
  include_line 'quit' status=ignore_status
  EXIT_PROC WITH manna_status WHEN NOT manna_status.normal

  MANAGE_JOBS
    SELECT_JOB login_user=$SYSTEM login_family=$SYSTEM ..
      name=application_job_name job_state=(deferred, queued, initiated) ..
      status=select_status
    IF select_status.normal THEN
      IF $size(jmv$selected_jobs) > 0 THEN
        put_line ' SMTP is already active as job(s):' ..
          o=$response
        display_value jmv$selected_jobs o=$response
        EXIT procedure
      IFEND
    ELSE
      EXIT procedure WITH select_status
    IFEND
  QUIT

  IF $specified(load_map) THEN
    map_file = $string(load_map)
    options = 'all'
  ELSE
    map_file = '$null'
    options = 'none'
  IFEND

" Build task parameters string for activate_system_task "

  task_parameters = ''

  IF $specified(debug_mode) THEN
    task_parameters = task_parameters // ' debug_mode=' // ..
          $strrep(debug_mode)
  IFEND

  IF $specified(default_destination) THEN
    task_parameters = task_parameters // ' default_destination=' // ..
          $string(default_destination)
  IFEND

  IF $specified(maximum_queued_time) THEN
    task_parameters = task_parameters // ' maximum_queued_time=' // ..
          $strrep(maximum_queued_time)
  IFEND

  IF $specified(maximum_subtasks) THEN
    task_parameters = task_parameters // ' maximum_subtasks=' // ..
          $strrep(maximum_subtasks)
  IFEND

  IF $specified(process_interval) THEN
    task_parameters = task_parameters // ' process_interval=' // ..
          $strrep(process_interval)
  IFEND

  IF $specified(retransmission_interval) THEN
    task_parameters = task_parameters // ' retransmission_interval=' // ..
          $strrep(retransmission_interval)
  IFEND

  JOB user_job_name=application_job_name ..
      job_class=job_class ..
      job_recovery_disposition=terminate ..
      job_abort_disposition=terminate ..
      output_disposition=smtp_job_log ..
      substitution_mark='?' ..
      system_job_name=system_job_name ..
      status=submit_status

    VAR
      ignore: status
    VAREND

    TASK ring=6
      execute_task l=?smtp_bound_product? ..
         sp=?starting_procedure_name? p='?task_parameters?' ..
         load_map=?map_file? load_map_options=?options?
    TASKEND

  JOBEND

  IF submit_status.normal THEN
    put_line ' SMTP has been activated as job '//..
$string(application_job_name)//' ('//$string(system_job_name)//').' ..
          o=$response
  ELSE
    put_line ' --ERROR-- Unable to submit job for SMTP.' ..
      o=$response
  IFEND
  EXIT procedure WITH submit_status WHEN NOT submit_status.normal

PROCEND activate_smtp
