Google
 

Trailing-Edge - PDP-10 Archives - SRI_NIC_PERM_SRC_3_19910112 - mm-new/smtpsv.mac
There are 5 other files named smtpsv.mac in the archive. Click here to see a list.
	TITLE SMTPSV TOPS-20 SMTP listener
	SUBTTL Written by Mark Crispin - January 1984

; Copyright (C) 1984 Mark Crispin.  All rights reserved.

; Version components

SMTWHO==0			; who last edited SMTPSV (0=developers)
SMTVER==5			; SMTPSV's release version (matches monitor's)
SMTMIN==3			; SMTPSV's minor version
SMTEDT==^D3			; SMTPSV's edit version

;  SMTPSV is the Internet SMTP listener.  It listens for connections on the
; SMTP port and fires up a server job running MAISER.
;
;  SMTPSV has been intentionally kept as simple as possible.  It is intended
; that in an actual production environment a full Internet server/logger such
; as NETSRV (also available from the author) will be used.
;
;  SMTPSV runs on TOPS-20 release 5.3 and later monitors.  SMTPSV will not
; run on Tenex; the "Twenex" operating system is a figment of the imagination
; of certain individuals.  There ain't no such thing as a free lunch.

	SEARCH MACSYM,MONSYM	; system definitions
	SALL			; suppress macro expansions
	.DIRECTIVE FLBLST	; sane listings for ASCIZ, etc.
	.TEXT "/NOINITIAL"	; suppress loading of JOBDAT
	.TEXT "SMTPSV/SAVE"	; save as SMTPSV.EXE

; AC definitions

A=:1				; JSYS, temporary ACs
B=:2
C=:3
D=:4

; Data area

CRJBLK:	BLOCK .CJSLO+1		; CRJOB% argument block
JFN:	BLOCK 1			; listening JFN
JOB:	BLOCK 1			; job created by CRJOB%
	SUBTTL Main program
; Entry vector

EVEC:	JRST SMTPSV		; START address
	JRST SMTPSV		; REENTER address
	<FLD SMTWHO,VI%WHO>!<FLD SMTVER,VI%MAJ>!<FLD SMTMIN,VI%MIN>!<FLD SMTEDT,VI%EDN>
EVECL==.-EVEC

SMTPSV:	RESET%			; flush all I/O
	MOVX A,.FHSLF		; this fork
	MOVX B,1		; we want queue zero only
	SPRIW%			; set JOBBIT priority word
	 ERJMP .+1
	DO.			; this is the loop of the SMTP server
	  MOVX A,GJ%SHT		; GTJFN% flags
	  HRROI B,[ASCIZ/TCP:25#/] ; get pointer to name
	  GTJFN%		; get a JFN 
	   ERJMP STOP
	  MOVEM A,JFN		; save the JFN
	  MOVX B,OF%RD!OF%WR!<FLD .TCMWI,OF%MOD>!<FLD ^D8,OF%BSZ>
	  OPENF%		; open in 8-bit mode
	   ERJMP STOP
	  MOVE A,[CRJBLK,,CRJBLK+1] ; zero the CRJOB% argument block
	  SETZM CRJBLK
	  BLT A,CRJBLK+.CJSLO
	  HRROI A,[ASCIZ/SYSTEM:MAISER.EXE/] ; program to run
	  MOVEM A,CRJBLK+.CJFIL	; save the file name pointer
	  MOVX A,.NULIO		; get TTY designator
	  MOVEM A,CRJBLK+.CJTTY	; new job is detached
	  MOVX A,CJ%FIL!CJ%WTA!CJ%CAP ; wait until attached before starting
	  MOVEI B,CRJBLK	; get address of argument block
	  CRJOB%		; create the job
	   ERJMP STOP		; trap errors
	  MOVEM A,JOB		; save the job number
	  MOVE A,JFN		; get network JFN
	  ATNVT%		; attach NVT
	   ERJMP STOP
	  MOVE D,A		; TTY number to use
	  MOVE A,JOB		; get the job number back
	  TXO A,AT%TRM		; attach JSYS flags
	  SETZB B,C
	  ATACH%		; put the job where it belongs
	   ERJMP STOP		; handle errors
	  LOOP.			; and loop forever
	ENDDO.
	SUBTTL Other randomness

STOP:	HRROI A,[ASCIZ/SMTPSV: /]
	ESOUT%
	MOVX A,.PRIOU
	HRLOI B,.FHSLF		; dumb ERSTR%
	SETZ C,
	ERSTR%
	 NOP			; undefined error number
	 NOP			; can't happen
	MOVX A,^D5000		; sleep for 5 seconds
	DISMS%
	JRST SMTPSV		; restart

; Literals

...VAR:!VAR			; generate variables (there shouldn't be any)
IFN .-...VAR,<.FATAL Variables illegal in this program>
...LIT:	XLIST			; save trees during LIT
	LIT			; generate literals
	LIST

	END EVECL,,EVEC		; The End