Trailing-Edge
-
PDP-10 Archives
-
BB-5255D-BM
-
4-sources/ftsctl.mac
There is 1 other file named ftsctl.mac in the archive. Click here to see a list.
;<4.ARPA-UTILITIES>FTSCTL.MAC.4, 4-Jan-80 09:46:37, EDIT BY R.ACE
;UPDATE COPYRIGHT DATES
;<4.ARPA-UTILITIES>FTSCTL.MAC.3, 9-Jan-79 13:59:27, Edit by LCAMPBELL
; Update copyright notice
;<3A.ARPA-UTILITIES>FTSCTL.MAC.3, 26-Jul-78 14:03:06, Edit by ENGEL
;CHANGE <SYSTEM> TO SYSTEM:
;<JBORCHEK>FTSCTL.MAC.2, 24-Apr-78 17:02:10, EDIT BY JBORCHEK
;USE IPCF TO CHECK IF FTPSER HAS DIED
;<3.ARPA-UTILITIES>FTSCTL.MAC.5, 14-Nov-77 10:19:12, EDIT BY CROSSLAND
;CORRECT COPYRIGHT NOTICE
;<3.ARPA-UTILITIES>FTSCTL.MAC.4, 26-Oct-77 02:37:01, EDIT BY CROSSLAND
;UPDATE COPYRIGHT FOR RELEASE 3
;<3-UTILITIES>FTSCTL.MAC.3, 27-Jul-77 01:00:45, EDIT BY CROSSLAND
;ADD SPACE FOR NEW AND FUTRE CRJOB ARGS.
;<3-UTILITIES>FTSCTL.MAC.2, 11-Jun-77 02:17:46, EDIT BY CROSSLAND
;MAKE COMPATIBLE WITH MOUNTABLE STRUCTURES
;<A-UTILITIES>FTSCTL.MAC.3, 3-Dec-76 15:57:22, EDIT BY CLEMENTS
;PUT IN IPCF LISTENER - CONDITIONED OUT TIL COMPLETED SOMEDAY
;put back in jobont. it's really needed.
; CHANGE FOR NEW CRJOB LAYOUT, LACK OF JOBONT, QUOTE "#".
;<2MURPHY>FTSCTL.MAC.2, 16-Jul-76 17:19:52, EDIT BY MURPHY
;CHANGE STENEX TO MONSYM,MACSYM
;<SOURCES>FTSCTL.MAC;20 11-May-76 14:58:38 EDIT BY CLEMENTS
; Fix tight loop when entflg is off
;<SOURCES>FTSCTL.MAC;19 23-Apr-76 15:37:16 EDIT BY CLEMENTS
;<SOURCES>FTSCTL.MAC;18 22-SEP-75 13:06:18 EDIT BY CLEMENTS
;<CLEMENTS>FTSCTL.MAC;16 11-JUL-75 15:48:09 EDIT BY CLEMENTS
;<CLEMENTS>FTSCTL.MAC;15 11-JUL-75 15:17:01 EDIT BY CLEMENTS
;<CLEMENTS>FTSCTL.MAC;14 10-JUL-75 13:08:53 EDIT BY CLEMENTS
;This software is furnished under a license and may only be used
; or copied in accordance with the terms of such license.
;
;Copyright (C) 1976,1977,1978,1979,1980 Digital Equipment Corporation, Maynard, Mass.
TITLE FTSCTL CONTROL JOB FOR FTP SERVICE USING CRJOB
SEARCH MONSYM,MACSYM
VWHO==0 ;LAST EDITED BY DEC
VMAJOR==4 ;MAJOR VERSION #
VMINOR==0 ;REVISION #
VEDIT==4 ;EDIT NUMBER
LOC <.JBVER==137>
VERSIO: <VWHO>B2+<VMAJOR>B11+<VMINOR>B17+VEDIT ;VERSION NUMBER
RELOC
F=0
A=1
B=2
C=3
D=4
W=5 ;SOME WORK AC'S
W1=6
W2=7
W3=10
X=15
Y=16
P=17
LSNCHN==1 ;PSI HERE WHEN ICP SOCKET IS POKED
JLOCHN==2 ;PSI WHEN OWNED JOB LOGS OUT
PIDCHN==3 ;PSI HERE WHEN IPCF TRAFFIC ARRIVES
;Note: so far this just listens on one socket and connects up an
;old-style NVT. should add second listener, new style NVT
; and new FTP server, (1b2 on in AC1 of ATNVT).
FTSCTL: RESET
MOVEI F,0
MOVE P,PDP
MOVEI A,400000
RPCAP
IOR C,B
EPCAP
MOVEI A,400000 ;SET UP PSI SYS THIS FORK
MOVE B,[LEVTAB,,CHNTAB] ; ..
SIR
MOVSI B,(1B1+1B3) ;CHANNELS TO TURN ON
AIC
EIR ;TURN PSI SYSTEM ON
MOVX W,IP%CPD ;CREATE A PID
SETZB W1,W2 ;SPACE FOR SEND/RCV PIDS
MOVE W3,[ENDPKT-DEFPKT,,DEFPKT]
MOVEI A,4 ;LENGTH OF DESCRIPTOR
MOVEI B,W ;WHERE DESCRIPTOR IS
MSEND ;SEND TO SYSTEM INFO
JRST NOPID ;NONE AVAILABLE?
MOVEM W1,MYPID ;SAVE PID IN CRJOB BLOCK
MOVEI A,3 ;SET UP PI CHANNEL OF PID
MOVEI B,W ;IN WORK AC'S
MOVEI W,.MUPIC
MOVE W1,MYPID
MOVEI W2,PIDCHN ;CHANNEL WILL BE POKED
MUTIL ;WHEN TRAFFIC COMES FOR PID
JRST NOPID ;CAN'T?
SETZM LSNCHK ;NOT POKED TO LISTEN YET
SETZM LGOCHK ;NOR FOR A LOGGING OUT OWNED JOB
SETZM PIDCHK ;NOR FOR LOGGING
SETOM PNDJOB ;NO PENDING JOB YET
SETOM LSNJFN ;NO LISTEN SOCKET JFN YET
REGO: MOVE A,['NETRDY']
SYSGT
JUMPGE A,WREGO ;QUIT IF NET NOT UP YET
MOVEI A,^D5000 ;MAKE SURE THERE IS NO TIGHT LOOP HERE.
DISMS ;WAIT A LITTLE WHILE.
OLOOP: MOVE P,PDP ;RESET STACK
PUSHJ P,CHKLGO ;SEE IF ANY PENDING LOGOUTS
PUSHJ P,CHKLSN ;MAKE SURE ICP SOCKET IS LISTENING
SKIPE PIDCHK ;ANY PENDING INTS?
PUSHJ P,CHKPID ;SEE IF ANY LOGGING PACKETS
PUSHJ P,GETJOB ;MAKE SURE A JOB IS ON THE SHELF
MOVEI A,^D60000 ;LOOK AGAIN IN A MINUTE
SKIPL LSNJFN ;ARE BOTH SOCKET AND JOB READY?
SKIPGE PNDJOB ; ..
MOVEI A,^D1000 ;NO, DON'T SLEEP SO LONG.
WAITPC: DISMS
JRST OLOOP ;GO CHECK JOB AND SOCKET AGAIN
NOPID: MOVEI A,^D5000
DISMS
JRST REGO
IMPDED: SKIPL A,LSNJFN
CLOSF
JFCL
SETOM LSNJFN
MOVEI A,^D60000
DISMS
JRST REGO
;CALL HERE TO MAKE SURE THERE IS A JOB PENDING
GETJOB: SKIPLE PNDJOB ;JOB ALREADY PENDING?
JRST NOCRJ ;YES. NO MORE, THANKS.
MOVX A,<CJ%FIL!CJ%WTA!CJ%CAP!CJ%SLO> ;GET A JOB
MOVEI 2,CRJBLK ; ..
CRJOB
JRST CRJXXX
MOVEM A,PNDJOB ;THIS JOB IS PENDING
MOVEI A,^D100000(A) ;COMPUTE LOCAL SOCKET RELATIVE TO IT
LSH A,^D15 ; ..
MOVEM A,SOKETS ;SAVE SOCKET "S"
NOCRJ: POPJ P,0 ;THERE IS A JOB
LISTEN: HRROI A,GTJSTR ;BUILD STRING TO GTJFN THE LISTEN SOCKET
HRROI B,[ASCIZ /NET:/]
MOVEI C,0
SOUT
MOVE B,ICPSKT ;THE SOCKET NUMBER TO LISTEN ON
SKIPE PRIVF ;PRIVATE?
TRO B,400
MOVEI C,10 ;OCTAL
NOUT
0 ;CAN'T FAIL
HRROI B,ABSTXT ;ABSOLUTE SOCKET
MOVEI C,0 ;AND NO REMOTE SOCKET
SOUT
MOVSI A,400001 ;GET A JFN FOR ICP SOCKET
HRROI B,GTJSTR ; ..
GTJFN
POPJ P,0 ;CAN'T?
MOVEM A,LSNJFN
MOVE B,[400000,,100000] ;WILL SEND 32 BIT BYTE ON IT LATER
OPENF
JRST [MOVE A,LSNJFN
RLJFN
JFCL
SETOM LSNJFN
POPJ P,0]
MOVSI C,777700+LSNCHN
MOVEI B,24
MTOPR ;SET FOR PSI ON RFC
CPOPJ1: AOS 0(P) ;SKIP RETURN
CPOPJ: POPJ P,0 ;RETURN
CHKLSN: SKIPL LSNJFN ;IS ICP SOCKET KNOWN?
JRST CHKLS1 ;YES
PUSHJ P,LISTEN ;NO. MAKE ONE.
JRST LSNXXX ;FAILED TO MAKE LISTENER
CHKLS1: MOVE A,['NETRDY']
SYSGT ;MAKE SURE NET STILL UP
JUMPGE A,IMPDED
MOVE A,['ENTFLG']
SYSGT ;MAKE SURE SYSTEM ACCEPTING LOGINS
SKIPE B
JUMPE A,REJECT ;REJECT IF NOT.
MOVEI A,.GTNJF ;GET STATUS OF NETWORK JFN
MOVE B,LSNJFN
MOVEI C,NCPBLK ;GET ENTIRE BLOCK OF DATA
MOVSI D,-20
GTNCP
JRST CHKLSX ;DEAD
MOVE A,NCPBLK+.NCFSM ;STILL LISTENING?
CAIE A,.NSLSN
JRST CHKLS2
SKIPGE NCPBLK+.NCFHS ;LSN AND CONNECTED TO A HOST
POPJ P,
CHKLSX: MOVE A,LSNJFN
TLO A,(1B1)
CLOSF ;GET RID OF THIS GLITCHED SOCKET
JFCL
SETOM LSNJFN ;FAILED
JRST CHKLSN ;AND TRY AGAIN
CHKLS2: SETZM LSNCHK
MOVE C,NCPBLK+.NCFHS ;HOST
MOVEM C,FHSTN
MOVE D,NCPBLK+.NCFSK ;SOCKET
MOVEM D,FORNS
MOVE A,NCPBLK+.NCSIZ ;CONNECTION SIZE
CAIE A,40
JRST REJECT
MOVE A,NCPBLK+.NCFSM
CAIE A,.NSRCR ;RFCR?
JRST REJECT ;NO
JRST ACCEPT ;YES, GO ANSWER IT
ACCEPT: SETOM RJFN
SETOM SJFN ;TELNET SOCKETS
HRROI A,GTJSTR ;MAKE A NAME FOR THE TELNET SOCKETS
HRROI B,[ASCIZ /NET:/]
MOVEI C,0
SOUT
MOVE B,SOKETS ;LOCAL SOCKET NUMBER
MOVEI C,10 ;OCTAL
NOUT
0
HRROI B,ABSTXT ;ABS SOCKET FLAG
MOVEI C,0
SOUT
MOVE B,FHSTN ;FOREIGN HOST NUMBER
MOVEI C,10 ;OCTAL
NOUT
0
MOVEI B,"-"
IDPB B,A
MOVE B,FORNS ;SOCKET "U"
ADDI B,2 ;U+2 AND U+3
NOUT
0
;FALL THRU
;FALLS IN FROM ABOVE
ACPT1: MOVSI A,1
HRROI B,GTJSTR
GTJFN
JRST REJECT
MOVEM A,SJFN
MOVSI A,1
HRROI B,GTJSTR
GTJFN
JRST REJECT
MOVEM A,RJFN
MOVE A,LSNJFN
MOVEI B,20 ;ACCEPT THE ICP
MTOPR
MOVE A,LSNJFN
MOVE B,SOKETS
BOUT ;SEND HIM "S"
ERJMP REJECT
TLO A,(1B1)
CLOSF
JFCL
SETOM LSNJFN
MOVE A,SJFN
MOVE B,[103400,,100000]
OPENF ;OPEN TELNET SEND JFN
JRST REJEC1
MOVE A,RJFN
MOVE B,[103400,,200000]
OPENF
JRST REJEC1
HRRZ A,RJFN
HRRZ B,SJFN
ZATNVT: ATNVT
JRST REJEC2
MOVEM A,TTYNUM
SETOM RJFN
SETOM SJFN
HRRZ D,TTYNUM
ANDI D,377777
HRRZ A,PNDJOB
HRLI A,(1B2) ;FLAG FOR PROXY ATACH
MOVSI B,500000
SETZ C,
ZATACH: ATACH
JRST REJEC4
SETOM PNDJOB
JRST REGO
REJECT: MOVE A,LSNJFN
TLO A,(1B1)
SKIPL A
CLOSF
JFCL
SETOM LSNJFN
JRST REGO
REJEC1: MOVE A,RJFN
TLO A,(1B1)
SKIPL A
CLOSF
JFCL
SETOM RJFN
MOVE A,SJFN
TLO A,(1B1)
SKIPL A
CLOSF
JFCL
SETOM SJFN
JRST REJECT
REJEC2: JRST REJEC1
REJEC4: JRST REJEC1
chklgo:
POPJ P, ;DO NOTHING IF WE USE IPCF INSTEAD
setzm lgochk ;see if there are any pending lgouts
gjinf ;get my job number
movei y,(c) ;save it here
move a,['jobont'] ;where to look for my jobs
sysgt
jumpe b,cpopj ;gotta have that table
hllz x,b ;table length
hrrz d,b ;and number
cklo1: move a,d
hrl a,x
getab
jrst cpopj
caie y,(a) ;is this my job?
jrst cklo3 ;no
tlnn a,(1b1) ;yes. is it trying to log out?
jrst cklo2 ;no.
movei a,(x) ;yes. log it out from here.
lgout ; ... should do any statistics first
jfcl ;should succeed
movei a,(x) ;is this the one i had pending?
camn a,pndjob ; ..
setom pndjob ;yes. somebody lgd it out. get another.
cklo2: aobjn x,cklo1 ;check all jobs in system
popj p,0
cklo3: movei a,(x) ;not my job. did i think it was?
camn a,pndjob ;was it my on-shelf job?
setom pndjob ;yes. it isn't. make another.
jrst cklo2
CHKPID: SETZM PIDCHK ;HAVE SEEN THE INT.
MOVEI A,7
MOVEI B,PIDARG ;SEE WHAT IS ON THIS PID
MOVE W,MYPID
MOVEM W,PIDARG+1
MOVEI W,.MUQRY ;INQUIRY FUNCTION
MOVEM W,PIDARG
MUTIL ;ASK SYSTEM
JRST CKPIDN ;NONE
MOVEI A,6 ;OK, RECEIVE ONE
MOVEI B,W
MOVE W2,MYPID
MOVE W3,[1000,,PIDBLK] ;MESSAGE STORAGE
MRECV ;GET THE MSG
JRST CKPIDN ;NONE?
TRNN W,6B32 ;FROM SYSTEM INFO (NOT SYSTEM IPCF)?
JRST NOTINF ;NO, PROB FROM FTPSER JOB
TRNN W,77B29 ;YES, IS IT AN ERROR?
JRST CKPIDN ;NO, IGNORE IT.
ANDI W,7B32 ;MAKE SURE ITS FROM INFO
CAIE W,20 ; ..
JRST CKPIDN ;NOT. IGNORE.
MOVE W,PIDARG ;YES, SEE IF RESTART ERROR
ANDI W,77B29 ; ..
CAIE W,<.IPCSN>B29 ; ..
JRST [HRROI A,[ASCIZ /
?FTSCTL: UNKNOWN ERROR FROM INFO
/]
PSOUT
RET]
CALL TELINF ;TELL INFO WHO WE ARE AGAIN
RET
NOTINF:
MOVE A,PIDBLK ;A LOGOUT MESSAGE?
CAIE A,.IPCLO
JRST CKPIDN
HRRZ A,PIDBLK+1 ;GET JOB NUMBER
CAMN A,PNDJOB ;IS IT THE PENDING JOB?
SETOM PNDJOB ;YES, REMEMBER IT IS GONE
CKPIDN: RET
TELINF: MOVEI A,4 ;INFORM INFO WHO WE ARE
MOVEI B,PIDARG
SETZM PIDARG+1
SETZM PIDARG+3
MOVE W,MYPID ;MY PID IS STILL GOOD
MOVEM W,PIDARG+2 ;JUST TELL INFO ABOUT IT
MOVE W,[ENDPKT-DEFPKT,,DEFPKT]
MOVEM W,PIDARG+4
MSEND ;SEND IT TO INFO
JRST [MOVEI A,^D500
DISMS
JRST TELINF]
RET
PIDINT: SETOM PIDCHK ;FLAG TO LOOK AT IT
JRST INTWKQ ;SEE IF WANT TO WAKE UP
LSNINT: SETOM LSNCHK ;FLAG TO LOOK AT IT
INTWKQ: MOVEM A,PSI2A ;SAVE AC
HRRZ A,RETPC2
CAIE A,WAITPC
CAIN A,WAITPC+1
JRST LSNIN1
MOVE A,PSI2A
DEBRK
lgoin1:
LSNIN1: MOVEI A,WAITPC+1
HRLI A,(1B5) ;WITH USER MODE BIT
MOVEM A,RETPC2
MOVE A,PSI2A
DEBRK
lgoint: setom lgochk ;flag to look for logouts
movem a,psi2a ;save an ac
hrrz a,retpc2 ;see where the process was.
caie a,waitpc ;sleeping?
cain a,waitpc+1 ; ..
jrst lgoin1 ;yes. wake it up.
move a,psi2a ;no. dismiss
debrk
CRJXXX: HRROI 1,[ASCIZ /
?FTSCTL: CAN'T CREATE JOB FOR FTP SERVICE
/]
PSOUT
JRST WREGO
LSNXXX: HRROI 1,[ASCIZ /
?FTSCTL: CAN'T CREATE LISTENER SOCKET
/]
PSOUT
WREGO: MOVEI A,^D120000
DISMS
JRST REGO
PDLL==40
CRJBLK: 0 ;NAME STRING FOR LOGIN
0 ;PASSWORD
0 ;ACCOUNT
440700,,RUNFIL ;FILE TO GET
0 ;SFORKV OFFSET
0,,377777 ;TERMINAL TO START ON
0 ;TIME LIMIT
ACBLK ;ACS TO STUFF INTO FORK
0 ;FLAGS FOR EXEC
0 ;PRIMARY JFNS
0 ;NO RUNTIME LIMIT
0 ;CAP MASK
MYPID: 0 ;PID FOR IPCF ON LOGOUT OF JOB
BLOCK 6 ;SPACE FOR NEW AND FUTRE ARGS
;END OF BLOCK
ICPSKT: 3 ;THE STANDARD FTP LISTENER
RUNFIL: ASCIZ /SYSTEM:FTPSER.EXE/
LEVTAB: RETPC1
RETPC2
RETPC3
CHNTAB: 0
2,,LSNINT
0
2,,PIDINT ;WHEN IPCF TRAFFIC COMES
REPEAT ^D32,<0>
DEFPKT: ;PACKET TO DEFINE FTSCTL
4
0
ASCIZ /[SYSTEM]FTSCTL/ ;MY NAME
ENDPKT:
CRLFM: BYTE (7) 15,12,0
ABSTXT: BYTE (7) <"V">&37,"#",".",0
PDP: IOWD PDLL,PDL
SOKETS: BLOCK 1 ;SOCKET BASE OF CREATED JOB
GTJSTR: BLOCK 20 ;PLACE TO BUILD STRING FOR GTJFN
ACBLK: BLOCK 20 ;AC'S STUFFED IN SUBJOB
PDL: BLOCK PDLL
FHSTN: BLOCK 1
FORNS: BLOCK 1
LSNJFN: BLOCK 1
RJFN: BLOCK 1
SJFN: BLOCK 1
TTYNUM: BLOCK 1
RETPC1: BLOCK 1
RETPC2: BLOCK 1
RETPC3: BLOCK 1
PSI2A: BLOCK 1
LSNCHK: BLOCK 1
LGOCHK: BLOCK 1
PRIVF: 0
NCPBLK: BLOCK 20
PIDCHK: BLOCK 1
PNDJOB: BLOCK 1
PIDARG: BLOCK 20
PIDBLK=650000 ;USE PAGE 650 FOR PID TRAFFIC
END FTSCTL