*DECK NVFTPUV
USETEXT TEXTNVF
USETEXT TEXTSS
USETEXT TXTANVF
USETEXT TXSMNVF
USETEXT TXTAPSS
PROC NVFTPUV((PT));
# TITLE NVFTPUV - PROCESS UNSUCCESSFUL VALIDATION #
BEGIN # NVFTPUV #
#
** NVFTPUV - PROCESS UNSUCCESSFUL VALIDATION.
*
* E. THAVIKULWAT 81/10/23
* C. BRION 83/10/10
*
* THIS PROCEDURE'S MAIN FUNCTION IS TO ISSUE APPROPRIATE ERROR
* MESSAGE AND DETERMINE WHETHER TERMINAL SHOULD BE PROMPTED AGAIN
* UPON A UNSUCCESSFUL USER OR APPLICATION VALIDATION. IT IS CALLED
* INTO EXECUTION BY THE FOLLOWING PROCEDURES:
* *NVFTETI* *NVFTVAA* *NVFTVVD*
*
* PROC NVFTPUV((PT))
*
* ENTRY:
* PT = POINTER TO PTAC ENTRY
*
* EXIT:
* APPROPRIATE ERROR MESSAGE ISSUED TO THE TERMINAL.
*
* NOTES:
* FOR UNSUCCESSFUL USER VALIDATION, NO FURTHER PROMPTS ARE
* ISSUED IF ANY OF THE FOLLOWING IS TRUE:
* 1) FAMILY AND USER ARE BOTH MANDATORY
* 2) SECURITY COUNT EXHAUSTED
* 3) USER NOT VALIDATED FOR ANY APPLICATION
* 4) USER RETRY LIMIT EXCEEDED
*
* FOR UNSUCCESSFUL APPLICATION VALIDATION, NO FURTHER APPLICATION
* PROMPT IS ISSUED IF ANY OF THE FOLLOWING IS TRUE:
* 1) APPLICATION IS MANDATORY OR IMPLIED MANDATORY
* 2) APPLICATION RETRY LIMIT EXCEEDED
*
* IF APPLICATION FAILED OR NETTED OFF WITH CONNECTIONS
* OUTSTANDING, THE APPLICATION RETRY LIMIT IS INCREASED TO 25.
*
* METHOD:
* INCREMENT APPROPRIATE RETRY COUNT BY 1. DETERMINE IF PROMPT
* SHOULD BE REISSUED. IF NOT, SEND ERROR MESSAGE TO TERMINAL AND
* CALL *NVFTETC* TO END TERMINAL CONNECTION. OTHERWISE, SEND
* ERROR MESSAGE TO TERMINAL AND CALL *NVFTILP* TO REISSUE PROMPT.
#
#
**** PROC NVFTPUV - XREF LIST.
#
XREF
BEGIN
PROC NVFTETC; # END TERMINAL CONNECTION #
PROC NVFTILP; # ISSUE LOGIN PROMPT #
PROC NVFTIAM; # ISSUE ACCOUNTING MESSAGES #
PROC NVFUMQE; # TRANSFER TEXT TO QUEUE #
PROC NVFTRLC; # REFUSE LOAN CONNECTION #
END
#
****
#
DEF MAFTRY$ #25#; # MAX NUM OF APPL RETRIES IF APPL FAILED #
*CALL TMSGNVF
*CALL TERMCLS
ITEM ADDR I; # ADDRESSING INFORMATION FOR ABH #
ITEM I I; # LOOP VARIABLE #
ITEM LNGTH I; # LENGTH OF MESSAGE #
ITEM MXAPTRY I; # VARIABLE FOR MAX NUM OF APPL RETRIES #
ITEM PSUB I; # SUBSCRIPT FOR GOTO SWITCH #
ITEM PT I; # SUBSCRIPT FOR ARRAY PTAC #
ITEM SMOUT B; # SM TYPE RESPONSE FOR LOAN REQUEST #
#
* THE FOLLOWING BASED ARRAY IS FOR GENERAL PURPOSE USAGE
#
BASED ARRAY BPGEN[00:00] S(1);
BEGIN
ITEM BPG$WORD U(00,00,60); # FULL WORD REFERENCE #
ITEM BPG$NAME U(00,00,42); # REF NAME PORTION OF WORD #
END
SWITCH PRMTSWT
LLUNAPP, # LABEL FOR UNSUCCESSFUL APPLICATION #
LLUNUSR, # LABEL FOR UNSUCCESSFUL PERSONAL ID #
LLUNUSR, # LABEL FOR UNSUCCESSFUL PASSWORD #
LLUNUSR, # LABEL FOR UNSUCCESSFUL USER/PASSWORD #
LLUNUSR; # LABEL FOR UNSUCCESSFUL FAMILY/USER/PW #
ADDR = PTA$ACN[PT]; # APPLICATION CONNECTION NUMBER #
PSUB = PTA$PROMPT[PT] - 1; # OFFSET TO BEGIN WITH 0 #
GOTO PRMTSWT[PSUB]; # BRANCH TO APPROPRIATE LABEL #
LLUNUSR: # UNSUCCESSFUL USER VALIDATION PROCESSING #
NVFTIAM(PT, ABER$); # ISSUE "ABER" ACCOUNTING MSG #
PTA$USERCT[PT] = PTA$USERCT[PT] + 1; # INCREMENT USER RETRY CNT #
IF PTA$LRC[PT] EQ RCRC"LSA"
THEN
BEGIN
#
* LOAN REQUEST TYPE OF CONNECTION. RETURN TO PRIMARY APPLICATION
* WITH CR/RCN/A SM.
#
SMOUT = TRUE;
PTA$LRC[PT] = RCRC"UVS";
NVFTRLC(PT,SMOUT,PTA$LRC[PT]);
RETURN;
END
#
* IF USER VALIDATION WAS UNSUCCESSFUL DUE TO ERROR IN RESPONSE TO A
* PROMPT (I.E., NAME TOO LONG), THE CPM VALIDATE REQUEST (56B)
* INDICATES AN INVALID LOGIN CONDITION, OR THE PERSONAL IDENTIFIER
* ENTERED IS INVALID, THEN FURTHER CHECKING IS NEEDED TO
* DETERMINE WHETHER TERMINAL SHOULD BE PROMPTED AGAIN. IF USER
* VALIDATION WAS UNSUCCESSFUL DUE TO SECURITY COUNT EXHAUSTED OR NO
* APPLICATION DEFINED FOR THIS USER, NO FURTHER PROMPTS ARE ISSUED
* AND THE CONNECTION IS TERMINATED.
#
IF (PTA$INVLF[PT]) OR (PTA$INVPID[PT])
THEN # ERROR IN RSP TO PROMPT OR INVALID LOGIN #
BEGIN
IF (PTA$FAMIND[PT] EQ MNDATRY$ AND PTA$USRIND[PT] EQ MNDATRY$)
OR (PTA$USERCT[PT] GQ LLVAL)
THEN # NO MORE PROMPT CAN BE ISSUED #
BEGIN # SET BASED ARRAY TO ERROR MSG #
IF (PTA$USERCT[PT] GQ LLVAL)
THEN # EXCEEDED LOGIN RETRY LIMIT #
BEGIN
P<BPGEN> = LOC(URLBUF[0]); # USER RETRY LIMIT MESSAGE #
LNGTH = LMSG20$; # LENGTH OF MESSAGE #
END
ELSE # ILLEGAL MANDATORY FAM AND USR #
BEGIN
P<BPGEN> = LOC(LNPBUF[0]); # LOGIN NOT POSSIBLE MESSAGE #
LNGTH = LMSG50$; # LENGTH OF MESAGE #
END
END
ELSE # REISSUE FAMILY/USER PROMPT #
BEGIN
P<BPGEN> = LOC(ILMBUF[0]); # IMPROPER LOGIN MESSAGE #
LNGTH = LMSG30$; # LENGTH OF MESSAGE #
NVFUMQE(P<CTQ>,BPGEN[0],APPTTX$,ADDR,LNGTH); # MESSAGE TO Q #
#
* IF THE LOGIN WAS UNSUCCESSFUL DUE TO AN INVALID PERSONAL ID
* DECREMENT THE FAMILY COUNT.
#
IF PTA$INVPID[PT]
THEN
BEGIN
P<CRQBUF> = LOC(MSGBUF[0]) + ((NMSGBUF$ + 1) / 2);
CRQ$FCWORD[0] = 0; # CLEAR CPM REQUEST BUFFER #
CRQ$FWORD[0] = 0;
CRQ$FC[0] = CPM73B$; # DECREMENT FAMILY COUNT #
CRQ$ACN[0] = 0;
CRQ$FNAM[0] = PTA$FNAM[PT];
LNGTH = CRQDSIZ$ * 10;
NVFUMQE(P<CPMRQ>,CRQBUF[0],APPTTX$,0,LNGTH);
END
#
* SET PROMPT STATE TO AWAIT FAMILY PROMPT AND CLEAR APPROPIATE
* FIELDS OF PTAC ENTRY.
#
PTA$PROMPT[PT] = AWTFAM$; # SET TO AWAIT FAMILY PROMPT #
P<BPGEN> = LOC(PTA$FWORD[PT]); # 1ST WORD OF VALIDATION DATA#
FOR I = 0 STEP 1 UNTIL 9
DO
BEGIN
BPG$WORD[I] = 0; # CLEAR VALIDATION DATA FIELDS #
END
P<BPGEN> = LOC(PTA$VLTFAM[PT]); # 1ST WORD OF VLTEERED INFO #
FOR I = 0 STEP 1 UNTIL 3
DO
BEGIN
BPG$NAME[I] = 0; # CLEAR VOLUNTEERED NAME FIELDS #
END
P<BPGEN> = LOC(PTA$PID[PT]); # CLEAR PERSONAL ID FIELD #
BPG$WORD[0] = 0;
BPG$WORD[1] = 0;
PTA$VLTF[PT] = 0; # CLEAR ALL VOLUNTEERED FLAGS #
PTA$INVAF[PT] = FALSE; # CLEAR INVALID APPL FLAG #
PTA$INVPID[PT] = FALSE; # CLEAR INVALID PERSONAL ID FLAG#
PTA$PWEXPF[PT] = FALSE; # CLEAR PW EXPIRE MESSAGE #
NVFTILP(PT); # ISSUE FAMILY/USER PROMPT #
RETURN; # EXIT #
END
END
ELSE # SECURITY COUNT EXHAUSTED OR NO APPL #
BEGIN # SET BASED ARRAY TO ERROR MSG #
LNGTH = LMSG60$; # LENGTH OF MESSAGE #
P<BPGEN> = LOC(UANPBUF[0]); # ILLEGAL USER ACCESS MESSAGE #
PTA$CACA[PT] = TRUE; # DON'T SEARCH *RML* TABLE #
END
#
* NO FURTHER PROMPTS ARE TO BE ISSUED. SEND ERROR MESSAGE THAT
* WAS PREVIOUSLY SET UP TO TERMINAL. SET BASED ARRAY TO "LOGIN
* TERMINATED" MESSAGE AND PROCEED TO COMMON CODE TO END TERMINAL
* CONNECTION.
#
NVFUMQE(P<CTQ>,BPGEN[0],APPTTX$,ADDR,LNGTH); # MESSAGE TO QUEUE #
P<BPGEN> = LOC(LTMBUF[0]);
GOTO ENDSWT;
LLUNAPP: # UNSUCCESSFUL APPL VALIDATION PROCESSING #
PTA$APPLCT[PT] = PTA$APPLCT[PT] + 1; # INCREMENT APPL RETRY CNT #
#
* IF APPLICATION VALIDATION WAS UNSUCCESSFUL DUE TO APPLICATION
* FAILED CONDITION, THE APPLICATION RETRY LIMIT IS INCREASED TO
* 25.
#
MXAPTRY = LLVAL; # NORMAL APPL RETRY LIMIT #
IF (PTA$AFF[PT])
THEN # APPLICATION FAILED #
BEGIN
MXAPTRY = MAFTRY$; # APPL FAILED RETRY LIMIT #
END
IF PTA$LRC[PT] EQ RCRC"LSA"
THEN
BEGIN
#
* LOAN REQUEST TYPE OF CONNECTION. RETURN TO PRIMARY APPLICATION
* WITH CR/RCN/A SM.
#
SMOUT = TRUE;
PTA$LRC[PT] = RCRC"UVS";
NVFTRLC(PT,SMOUT,PTA$LRC[PT]);
RETURN;
END
#
* DETERMINE WHETHER TERMINAL USER SHOULD BE PROMPTED AGAIN FOR
* APPLICATION NAME.
#
IF (PTA$APPIND[PT] EQ MNDATRY$) OR (PTA$VDSF[PT])
OR (PTA$APPLCT[PT] GQ MXAPTRY)
THEN # NO MORE PROMPT CAN BE ISSUED #
BEGIN # SET BASED ARRAY TO ERROR MSG #
IF (PTA$APPLCT[PT] GQ MXAPTRY)
THEN # EXCEEDED APPL RETRY LIMIT #
BEGIN
P<BPGEN> = LOC(ARLBUF[0]); # APPL RETRY LIMIT MESSAGE #
LNGTH = LMSG30$; # LENGTH OF MESSAGE #
END
ELSE # ILLEGAL MANDATORY/IMPLIED MANDATORY APP #
BEGIN
P<BPGEN> = LOC(UANPBUF[0]); # USER ACCESS NOT POSSIBLE MSG #
LNGTH = LMSG60$; # LENGTH OF MESSAGE #
END
#
* NO FURTHER PROMPTS ARE TO BE ISSUED. CHECK TERMINAL CLASS TO
* SEE IF NVF SHOULD SEND A CTR/CHAR.
#
GOTO TERMCLS [PTA$TC[PT]];
SENDCTRCHAR:
#
* SEND CTR/CHAR TO FORCE TERMINAL TO BE IN NON-TRANSPARENT INPUT
* MODE.
#
PFCSFC[1] = CTRCHAR;
CTRSTR[1] = 0; # CLEAR REST OF WORD 0 #
B<0,16>CTRSTR[1] = NOXPAR$; # ADD FN/FV PAIR FOR NON-XPARENT#
NVFUMQE(P<CTQ>,APSM[1],APPPR$,ADDR,LCTRLO$); # TRANSFER TO Q #
NOCTRCHAR:
#
* SEND ERROR MESSAGE THAT WAS PREVIOUSLY SET UP TO THE TERMINAL.
* SET BASED ARRAY TO "LOGGED OUT" MESSAGE AND PROCEED TO COMMON
* CODE TO END TERMINAL CONNECTION.
#
NVFUMQE(P<CTQ>,BPGEN[0],APPTTX$,ADDR,LNGTH); # MESSAGE TO Q #
P<BPGEN> = LOC(LOMBUF[0]); # LOGGED OUT MESSAGE #
GOTO ENDSWT;
END
ELSE # REISSUE APPLICATION PROMPT #
BEGIN
P<BPGEN> = LOC(IAMBUF[0]); # ILLEGAL APPLICATION MESSAGE #
LNGTH = LMSG40$; # LENGTH OF MESSAGE #
NVFUMQE(P<CTQ>,BPGEN[0],APPTTX$,ADDR,LNGTH); # MESSAGE TO Q #
#
* CLEAR APPROPRIATE FIELDS OF PTAC ENTRY AND CALL *NVFTILP* TO
* REISSUE APPLICATION PROMPT.
#
PTA$AWORD[PT] = 0; # CLEAR SWITCH APPLICATION WORD #
PTA$VAF[PT] = FALSE; # CLEAR VOLUNTEERED APPL FLAG #
PTA$VAWORD[PT] = 0; # CLEAR VOLUNTEERED APPL WORD #
NVFTILP(PT); # ISSUE APPLICATION PROMPT #
RETURN; # EXIT #
END
ENDSWT: # COMMON END PROCESSING #
#
* NO FURTHER PROMPTS ARE TO BE ISSUED. SEND MESSAGE THAT WAS SET
* UP PREVIOUSLY TO THE TERMINAL AND CALL *NVFTETC* TO END TERMINAL
* CONNECTION.
#
LNGTH = LMSG20$; # COMMON LENGTH OF TRM MESSAGE #
NVFUMQE(P<CTQ>,BPGEN[0],APPTTX$,ADDR,LNGTH); # MESSAGE TO QUEUE #
NVFTETC(PT); # END TERMINAL CONNECTION #
END # END NVFTPUV #
TERM