*DECK NVFAVVD
USETEXT TEXTNVF
USETEXT TEXTSS
USETEXT TXSMNVF
USETEXT TXTSUSS
USETEXT TXTANVF
USETEXT TXTAPSS
PROC NVFAVVD;
# TITLE NVFAVVD - VERIFY A-A VALIDATION DATA #
BEGIN # NVFAVVD #
#
** NVFAVVD - VERIFY A-A VALIDATION DATA.
*
* C. BRION 82/12/03. 82/12/18. 83/01/14. 83/03/24.
* 83/05/09.
*
* THIS PROCEDURE RECEIVES THE VALIDATION DATA FOR AN A-A
* CONNECTION AT THE RECEIVING HOST. VALIDATION PROCESSING
* IS PERFORMED AND FURTHUR CONNECTION PROCESSING IS THEN
* PERFORMED DEPENDENT UPON THE VALIDATION RESULTS AND THE
* TYPE OF APPLICATION AND THE STATUS OF THE CALLED APPLICATION.
*
* PROC NVFAVVD
*
* ENTRY:
* WORD COUNT WORD OF VALIDATION DATA IN WCBUF.
* ACN OF CONNECTION FOR WHICH VALIDATION DATA INTENDED IN ABHBUF.
* VALIDATION DATA RESIDES IN MSGBUF.
*
* EXIT:
* ONE OF THE FOLLOWING:
*
* SUCCESSFUL VALIDATION:
* CR/RAP/N SM SENT TO OTQ.
* CR/SWH/R SM SENT TO CTQ.
* PAAC ENTRY UPDATED WITH VALIDATION INFO.
* ABAC ACCOUNT MESSAGE ISSUED.
*
* UNSUCCESSFUL VALIDATION:
* CR/RAP/A SM SENT TO CTQ.
* ABAR ACCOUNT MESSAGE ISSUED.
* AST ENTRY FOR CALLED APPLICATION UPDATED.
* DECREMENT FAMILY COUNT CPM CALL ISSUED.
* APPLICATION DEPARTURE PROCESSING PERFORMED.
* VCB ORDINAL AND PAAC ENTRY RELEASED.
#
#
**** PROC NVFAVVD XREF LIST
#
XREF
BEGIN
PROC NVFUMQE; # MAKE QUEUE ENTRY #
PROC NVFUFVO; # FREE VCB ORDINAL #
PROC SSTRTS; # SS-RELEASE TABLE SPACE #
PROC NVFAIAM; # A-A ISSUE ACCOUNT MSG #
PROC NVFSCAD; # COMPLETE APPL DEPARTURE #
PROC MOVE; # SS-MOVE WORDS #
PROC NVFUCRS; # CHECK RQST START STATUS #
PROC SSCATR; # SS - ACCEPT TIMER REQUEST #
PROC MESSAGE;
PROC ABORT;
PROC SSTAQE; # ACCEPT QUEUE ENTRY #
PROC NVFCFCE; # FIND CONNECTION ENTRY #
END
#
****
#
#
* ITEM LIST AND ARRAY DEFINITIONS.
#
ITEM NENTRY I; # LOCAL COUNT VAR #
ITEM PAC I; # PAAC ENTRY INDEX #
ITEM I I; # LOOP VAR #
ITEM MTYP I; # TYPE AND COUNT VAR #
ITEM AORD I; # AST ORDINAL #
ITEM VCB I; # VCB ORDINAL #
ITEM ASENTRY I; # NUMBER AST ENTRIES #
ITEM PAS I; # PRIMARY AST ORDINAL #
ITEM RAS I; # RETURN AST ORDINAL #
ITEM STAT I; # RETURN STATUS #
ITEM ERRCODE I; # CR/RAP/A SM ERROR CODE #
ITEM CTYP I; # CONNECTION TYPE VARIABLE #
ITEM ACNN I; # TEMPORARY CONNECTION NUM #
ITEM AE I; # INDEX TO ACN TABLE #
ITEM NEWACN B; # TRUE IF ACN NOT FOUND #
#
** VDATBUF - VALIDATION DATA UTILITY ARRAY DEF.
#
BASED ARRAY VDATBUF [00:00] S(1);
BEGIN
ITEM VDA$WORD U(00,00,60);
END
#
** T1TEMP - TEMP ARRAY DEFINITION FOR MOVE.
#
BASED ARRAY T1TEMP [00:00] S(1);
BEGIN
ITEM T1T$WORD U(00,00,60);
END
#
** T2TEMP - TEMP ARRAY DEFINITION FOR MOVE.
#
BASED ARRAY T2TEMP [00:00] S(1);
BEGIN
ITEM T2T$WORD U(00,00,60);
END
$BEGIN
#
* RHFMSG - RHF NVF DEBUG MESSAGE ARRAY.
#
ARRAY RHFMSG [00:00] S(4);
BEGIN
ITEM RHF$RTN C(00,00,10) = ["NVFAVVD: "];
ITEM RHF$TEXT C(01,00,30);
ITEM RHF$ZB U(04,00,60) = [0];
END
$END
#
** TMBBUF - TIMER REQUEST BUFFER.
*
* TMBBUF IS THE BUFFER USED TO HOLD A TIMER REQUEST.
#
ARRAY TMBBUF [00:00] S(TMBSIZ$);
BEGIN
ITEM TMB$SMID S:CTQSTAT(00,00,12) = [S"SINA"];
ITEM TMB$WC U(00,48,12) = [TMBSIZ$];
ITEM TMB$ABT U(01,00,06) = [APPCMD];
ITEM TMB$CNUM U(01,18,18);
ITEM TMB$PFCSFC U(02,00,16) = [FCINA];
ITEM TMB$ACN U(02,24,12);
ITEM TMB$DELAY U(03,24,18) = [NETPTIME$];
ITEM TMB$QNUM U(03,42,18);
END
CONTROL EJECT;
#
* LOCATE PAAC ENTRY FOR VALIDATION DATA BASED ON THE ACN OF THE
* VALIDATION DATA.
#
NENTRY = PACLNGTH / PAACSIZ$;
FOR PAC = 0 STEP 1 WHILE ((PA$VCB[PAC] NQ ABHADR[0]) AND
(PAC LS NENTRY))
DO
BEGIN END
$BEGIN
IF PAC EQ NENTRY
THEN
BEGIN
RHF$TEXT[0] = "PAAC ENTRY NOT FOUND";
MESSAGE(RHFMSG,0);
ABORT;
END
$END
#
* DETERMINE THE AST ORDINAL OF THE CALLED APPLICATION.
#
ASENTRY = (ASTLNGTH/ASTSIZ$);
FOR AORD = 0 STEP 1 WHILE
((AORD LS ASENTRY) AND
(AST$PANAM[AORD] NQ PA$RAPNM[PAC]))
DO
BEGIN
END
$BEGIN
IF AORD EQ ASENTRY
THEN
BEGIN
RHF$TEXT[0] = "AST ENTRY NOT FOUND";
MESSAGE(RHFMSG,0);
ABORT;
END
$END
PAS = AORD;
RAS = AORD;
#
* CHECK IF AST ENTRY[AORD] IS PRIMARY OR NOT.
* IF NOT, LOCATE PRIMARY AST ENTRY.
#
IF AST$PANAM[PAS] NQ AST$SANAM[PAS]
THEN
BEGIN
RAS = PAS;
FOR PAS = 0 STEP 1 WHILE
((AST$PANAM[PAS] NQ AST$SANAM[RAS]) AND
(PAS LS ASENTRY))
DO
BEGIN
END
$BEGIN
IF PAS EQ ASENTRY
THEN
BEGIN
RHF$TEXT[0] = "PRI AST NOT FOUND";
MESSAGE(RHFMSG,0);
ABORT;
END
$END
END
#
* COPY VALIDATION DATA INTO THE PAAC ENTRY.
#
P<VDATBUF> = LOC(PA$FWORD[PAC]);
FOR I = 0 STEP 1 UNTIL (WCB$WC[0] - 3)
DO
BEGIN
VDA$WORD[I] = MSG$WORD[I];
END
#
* PRESET THE ERROR CODE FOR ABNORMAL CASES.
#
ERRCODE = RCRA"MMF";
#
* CHECK FOR VALIDATION STATUS (SUCCESS OR NOT).
#
MTYP = 59 - AST$AWBP[PAS];
IF ((B<MTYP,1>PA$AAVW[PAC] EQ 1) AND
(PA$SCINV[PAC] EQ 0) AND ((PA$AAVW[PAC] LAN VAPMASK) NQ 0))
THEN
#
* SUCCESSFUL FAM/USER VALIDATION. CHECK APPLICATION NAME VALIDATION.
* CALLED APPLICATION NAME CANNOT BE ONE OF THE SUPERVISORY
* NETWORK PROGRAMS (NVF,NS,CS).
#
BEGIN
IF PA$RAPNM[PAC] NQ "NVF" AND
PA$RAPNM[PAC] NQ "NS" AND
PA$RAPNM[PAC] NQ "CS"
THEN
BEGIN
#
* NOT A SUPERVISORY APPLICATION. CHECK IF CALLED APPLICATION
* IS REQUEST STARTABLE.
#
STAT = CONNOK$;
IF AST$RS[AORD]
THEN
BEGIN
#
* REQUEST STARTABLE APPLICATION TYPE. CALL NVFUCRS TO DETERMINE
* THE STATUS OF THE CALLED APPLICATION.
* SET THE LOCAL AST ORDINAL TO THE RETURN AST ORDINAL.
* SET THE PAAC ENTRY REQUESTED APPLICATION NAME & NUMBER.
#
CTYP = AACON$;
NVFUCRS(PAS,RAS,STAT,CTYP);
PA$RAPNM[PAC] = AST$PANAM[RAS];
PA$RAPAN[PAC] = AST$AN[RAS];
END
IF STAT EQ NETP$
THEN
BEGIN
#
* WAITING ON CALLED APPLICATION NETON.
* SET PAAC STATE TO NETON PENDING.
* SET UP AND ISSUE TIMER REQUEST FOR CONNECTION.
* RECORD THE TIMER CANCELLATION NUMBER IN THE PAAC ENTRY.
* SET THE SWITCHED APPLICATION NAME OF THE PAAC ENTRY.
#
PA$STATE[PAC] = PAACST"PANETP";
TMB$ACN[0] = PA$NACN[PAC];
TMB$QNUM[0] = LOC(P<AAINPQ>);
SSCATR(TMBBUF[0]);
PA$CNUM[PAC] = TMB$CNUM[PAC];
PA$SWAP[PAC] = AST$PANAM[PAS];
END
ELSE IF STAT EQ NOCONN$ OR
STAT EQ MCLIMIT$
THEN
#
* CONNECTION NOT POSSIBLE. SET CR/RAP/A SM REASON CODE.
#
ERRCODE = RCRA"ANA";
ELSE
BEGIN
#
* CONNECTION OK.
* SET CONNECT TIME IN PAAC ENTRY.
* ISSUE ACCOUNT MESSAGE.
* SET SWITCHED APPLICATION NAME AND NUMBER IN PAAC ENTRY.
* SET STATE OF PAAC ENTRY.
* SET UP AND SEND CR/RAP/N SM.
* SET UP AND SEND CR/SWH/R SM TO CONNECTION TRAFFIC QUEUE.
#
PA$CNTIME[PAC] = CTM$PDT[0];
MTYP = ABAC$;
NVFAIAM(PAC,MTYP);
PA$SWAP[PAC] = PA$RAPNM[PAC];
PA$SWAPAN[PAC] = PA$RAPAN[PAC];
PA$STATE[PAC] = PAACST"PARAP";
SPMSG0[1] = PA$RAPSM0[PAC];
SPMSG1[1] = PA$RAPSM1[PAC];
SPMSG2[1] = PA$RAPSM2[PAC];
CRICT[1] = CT60TRANS;
RB[1] = TRUE;
CRVCB[1] = PA$VCB[PAC];
NVFUMQE(P<CTQ>,APSM[1],APPPR$,0,LCRRAPN);
#
* SEND THE CR/RAP/N SM TO THE OTQ, BYPASSING THE CTQ.
#
WCB$WORD[0] =0;
WCB$WC[0] = LCRRAPN + 2;
ABHWORD[0] = 0;
ABHABT[0] = APPCMD;
ABHADR[0] = 0;
ABHTLC[0] = LCRRAPN;
ABHACT[0] = 1;
SSTAQE (P<OTQ>, WCBUF, ABHBUF, APSM[1]);
#
* CHANGE ACN STATE FROM CREATE TO ACTIVE.
#
ACNN = PA$NACN[PAC];
NVFCFCE (ACNN,AE,NEWACN);
IF NEWACN # COULD NOT FIND ACN ENTRY, SERIOUS PROBLEM #
THEN
BEGIN
$BEGIN
RHF$TEXT[0] = "COULD NOT FIND ACN ENTRY";
MESSAGE(RHFMSG,0);
ABORT;
$END
END
ELSE # AND ENTRY EXIST, UPDATE ITS STATE #
ACN$STATE[AE] = ACNST"ACTIVE";
#
* SEND CR/SWH/R.
#
FOR I = 0 STEP 1 UNTIL (MSBFNVL - 1)
DO
BEGIN
MSG$WORD[I] = 0;
END
PFCSFC[0] = CRSWH;
CRNACN[0] = CRNACN[1];
CRABL[0] = CRRAABL[1];
CRDT[0] = PA$DT[PAC];
CRSNAME[0] = " ";
CRSWHID[0] = PA$URHID[PAC];
CRSWSL[0] = AASECLEV$;
CRSWDBZ[0] = CRADBZ[1];
CRSWUBZ[0] = CRAUBZ[1];
CRSWAN[0] = PA$SWAPAN[PAC];
NVFUMQE(P<CTQ>,APSM[0],APPPR$,0,LCRSWH);
AST$AACN[RAS] = AST$AACN[RAS] + 1;
IF RAS NQ PAS
THEN
BEGIN
AST$AACN[PAS] = AST$AACN[PAS] + 1;
END
END
END
END # IF PA$SCINV #
#
* IF ERRORS DETECTED VIA STATE OF PAAC ENTRY, THEN ISSUE THE
* CR/RAP/A SM, ISSUE THE ABAR ACCOUNT MESSAGE, DECREMENT THE
* NUMBER OF A-A CONNECTIONS FOR THE CALLED APPLICATION, ISSUE
* A DECREMENT FAMILY COUNT CPM FUNCTION REQUEST IF REQUIRED,
* COMPLETE APPLICATION DEPARTURE PROCESSING, FREE UP THE VCB
* ORDINAL AND PAAC ENTRY BEFORE EXIT.
#
IF PA$STATE[PAC] NQ PAACST"PARAP" AND
PA$STATE[PAC] NQ PAACST"PANETP"
THEN
BEGIN
SPMSG0[1] = PA$RAPSM[PAC];
EB[1] = TRUE;
CRRRAP[1] = ERRCODE;
NVFUMQE(P<CTQ>,APSM[1],APPPR$,0,LCRRAPA);
MTYP = ABAR$;
NVFAIAM(PAC,MTYP);
IF PA$UPFCF[PAC]
THEN
BEGIN
P<CRQBUF> = LOC(MSGBUF[0]);
CRQ$FCWORD[0] = 0;
CRQ$FWORD[0] = 0;
CRQ$FC[0] = CPM73B$;
CRQ$ACN[0] = 0;
CRQ$FNAM[0] = PA$FAM[PAC];
MTYP = CRQDSIZ$ * 10;
NVFUMQE(P<CPMRQ>,CRQBUF[0],APPTTX$,0,MTYP);
END
NVFSCAD(PAS);
IF PAS NQ RAS
THEN
NVFSCAD(RAS);
VCB = PA$VCB[PAC];
NVFUFVO(VCB);
PAC = PAC * PAACSIZ$;
SSTRTS(P<PAAC>,PAC,PAACSIZ$);
END
END # NVFAVVD #
TERM
*ENDIF