*DECK HCSTTP USETEXT NIPDEF USETEXT ACB USETEXT ACNB USETEXT ACNT USETEXT AHEADER USETEXT APPSTAT USETEXT AT USETEXT DRHDR USETEXT DUMPFLG USETEXT MSGIDX USETEXT NCNB USETEXT OVERLAY USETEXT PARAMP USETEXT PARAMS USETEXT PT USETEXT PWL USETEXT STPRESP USETEXT SUPMSG PROC HCSTTP((ACBAD),(ACN),(TRIGGER),(SMPTR)); STARTIMS; # *1DC HCSTTP * * 1. PROC NAME AUTHOR DATE * HCSTTP C. BITTNER 81/05/15 * * 2. FUNCTIONAL DESCRIPTION * HOST CONNECTION STATE TABLE PROCESSOR * * 3. METHOD USED * VALIDATE TRIGGER. SET CURRENT STATE (IF THERE IS NO ACNB * THEN SET THE CURRENT STATE TO STATX). CALL XSTTP (STATE * TABLE PROCESSOR) PASSING THE STATE TABLE ORDINAL, CURRENT * CONNECTION STATE AND TRIGGER. IF A LEGAL TRIGGER IS * RETURNED, THEN DO THE FOLLOWING (IF VALUE NOT SET * TO NOCHG): * A) ACTION - EXECUTE HOST CONNECTION STATE TABLE ACTION * (ISSUE SM, ETC) * B) NEWSTATE - UPDATE NEW HOST CONNECTION STATE * C) TRIGC - TRIGGER NETWORK CONNECTION STATE TABLE * D) TRIGB - TRIGGER NETWORK BLOCK PROTOCOL (IVT) STATE TABLE. * * IF AN ILLEGAL TRIGGER IS RETURNED THEN DO THE FOLLOWING: * IF THE TRIGGER IS INTERNAL TO NIP THEN ABORT NIP. * IF ILLEGAL EXTERNAL TRIGGER ISSUE ERR/LGL TO * APPLICATION. * * * * 4. ENTRY PARAMETERS * ACBAD - ACB ADDRESS * ACN - APPLICATION CONNECTION NUMBER * TRIGGER - HOST CONNECTION STATE TABLE TRIGGER NUMBER * SMPTR - ADDRESS OF SM BUFFER * * 5. EXIT PARAMETERS * NONE * * 6. SYMPL TEXTS USED * NIPDEF ACB * ACNB ACNT * APPSTAT AHEADER * AT MSGIDX * NCNB PARAMP * PT * PARAMS OVERLAY * STPRESP * * 7. ROUTINES CALLED * HBSTTP - HOST BLOCK PROTOCOL STATE TABLE PROCESSOR * LOCLLCB - LOCATE LLCB * NCSTTP - NETWORK CONNECTION STATE TABLE PROCESSOR * XSTTP - STATE TABLE PROCESSOR * ABORT - ABORT NIP * OSCHAPP - SWAPIN APPLICATION * OVLCALL - LOAD AND EXECUTE OVERLAY * CRACNB - INTERNAL PROCEDURE TO CREATE ACNB * STRTCON OVL TRIGGER CONNECTION CREATION ROUTINES * HCRCBU OVL SEND CR/CB/U * HCONCBU OVL SEND CON/CB/U * HTCHAR OVL SEND TCH/TCHAR * UPACNB4 OVL UPDATE ACNB ON RECEIPT OF CR/RCN/N * HCACRQA OVL SEND CON/ACRQ/A * STRTSW OVL TRIGGER CONNECTION SWITCHING ROUTINES * HCRRCNR OVL SEND CR/RCN/R * HCRTRMN OVL SEND CR/TRM/N * HCRIAPR OVL SEND CR/IAP/R * HSFCINA OVL SEND FC/INACT SUP MSG TO APP * HSWACNB OVL SWITCH ACNB FROM OLD APP TO NEW APP * SENDACC OVL TRIGGER CONNECTION ACCEPTED PROCESSORS * RELACB OVL RELEASE ACB * HCONEND OVL SEND CON/END/N * STPHERR OVL ISSUE STATE TABLE ERROR MESSAGE * HLGLERR OVL SEND ERR/LGL * XERRMSG OVL OUTPUT ERROR MESSAGE * * 8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION * "INVALID TRIGGER NUMBER - HCSTTP" * "NIP INTERNAL ERROR - HCSTTP1" * "NIP INTERNAL ERROR - HCSTTP2" * * THIS PROCEDURE IS CALLED BY HAPFAIL,HBSTTP,HPNOFF, * HPPUT AND NCSTTP. * # STOPIMS; # INPUT PARAMETERS # ITEM ACBAD; # ACB ADDRESS # ITEM ACN; # APPLICATION CONNECTION NUMBER # ITEM TRIGGER; # STATE TABLE TRIGGER NUMBER # ITEM SMPTR; # ADDRESS OF SM BUFFER # ITEM TEMP; # TEMP VARIABLE # # EXTERNAL VARIABLES # XREF BEGIN PROC HBSTTP; # HOST BLOCK PROTOCOL STATE TABLE PROC # PROC BLINK; PROC ABORT; # ABORT NIP # PROC LOCLLCB; # LOCATE LLCB # PROC NCSTTP; # NETWORK CONNECTION STATE TABLE PROC # PROC OMSG; # ISSUE DAYFILE MESSAGE # PROC OSCHAPP; # SWAPIN APPLICATION # PROC OVLCALL; # LOAD AND EXECUTE OVERLAY # PROC XSTTP; # STATE TABLE PROCESSOR # PROC XTRACE; # RECORD PROCEDURE CALL # PROC MGETS ; END # INTERNAL VARIABLES # SWITCH HCACTION HC0,HC1,HC2,HC3,HC4,HC5,HC6,HC7,HC8,HC9, HC10,HC11,HC12,HC13,HC14,HC15,HC16,HC17, HC18,,HC20,HC21,HC22,HC23,HC24,HC25 ,HC26 ,HC27 ,HC28 ; ITEM ACNTINDX; # ACNT INDEX # ITEM CRAC ; # CONNECTION NUMBER IN CR/SWH/R # ITEM AN; # APPLICATION NUMBER # ITEM NCN; # NETWORK CONNECTION NUMBER # ITEM CURST; # CURRENT STATE # ITEM LLCBAD; # LLCB ADDRESS # ITEM RESP; # RESPONSE RETURNED FROM STATE TABLE PROC # ITEM INDEX I ; ITEM OLDAN; # APPLICATION NUMBER # ITEM CURACNT U ; # CURRENT ACNT # ITEM BUFFERADR I ; # ADDRESS OF NEEDED BUFFER # #**********************************************************************# BEGIN BEGIN CONTROL IFEQ DEBUG,1; XTRACE("HCSTT") ; CONTROL FI; LLCBAD = 0 ; PARAMS5 = FALSE ; PARAMS7 = 0 ; # VALIDATE TRIGGER NUMBER # IF TRIGGER LQ HCMTR AND TRIGGER GQ 0 THEN BEGIN # VALID TRIGGER NUMBER # P = ACBAD; # BASE ACB # P = ACBACNT[0]; # BASE ACNT # IF ACN NQ 0 THEN BEGIN ACNTINDX = ACN + ACNTHSIZE - ACNTMINACN[0]; P = ACNTACNB[ACNTINDX]; P = ACNBNCNB[0]; # ADDRESS OF NCNB # END ELSE P = 0; IF P EQ 0 THEN CURST = STATX; # CURRENT STATE # ELSE CURST = ACNTCS[ACNTINDX]; XSTTP(HCORD,CURST,TRIGGER,RESP); P = LOC(RESP); # RESPONSE WORD # IF LEGTRIG[0] THEN BEGIN # LEGAL TRIGGER # IF ACTION[0] NQ NOCHG THEN GOTO HCACTION[ACTION[0]]; # EXECUTE PROPER ACTION # ELSE GOTO HCA; HC0: # CACNBTI (ACTION NO. 0) CREATE ACNB AND SEND CR/ITE/R TO NVF # PARAMP1 = SMPTR + BLKHSIZE + ABHSIZE; # FWA OF ICN/TE/R # CRACNBP ; # CALL INTERNAL PROC TO BUILD ACNB # PARAMS1 = SMPTR; # ADDRESS OF ICN/TE/R # PARAMS2 = ACN; # APPLICATION CONNECTION NUMBER # PARAMP5 = STRTCX"CRITE$" ; OVLNAME = STRTCONP; # SEND CR/ITE/R TO NVF # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC1: # RECEIVED ICN/AP/R FROM NETWORK # PARAMP1 = SMPTR + BLKHSIZE + ABHSIZE; # FWA OF ICN/AP/R # CRACNBP ; # BUILD THE ACNB # # AND SEND CR/RAP/R TO NVF USING THE ICN/AP/R BUFFER # PARAMS1 = SMPTR ; PARAMS2 = ACN ; PARAMS3 = P ; PARAMP5 = STRTCX"CRRAP$" ; OVLNAME = STRTCONP ; # OVERLAY TO SEND CR/RAP/R # OVLCALL ; GOTO HCA ; HC2: # DLACNB (ACTION NO. 2) SEND CON/CB/U TO APPLIACTION # PARAMS1 = RCB"LND"; # REASON CODE 1 - NETWORK TERMINATED CON # PARAMS2 = P; # ACNB ADDRESS # OVLNAME = HCONCBUP; # OVERLAY NAME # PARAMS3 = 0 ; OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC3: # SEND TCH/TCHAR TO APPLICATION # IF ACNBNCNB[0] NQ 0 THEN # NCNB EXISTS # BEGIN # SEND TCH/TCHAR TO APPLICATION # PARAMS1 = P; # ACNB ADDRESS # OVLNAME = HTCHARP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # END # UPDATE ACNB ON RECEIPT OF CR/RCN/N # PARAMS1 = P; # ADDR OF APPLICATION CONNECTION BLOCK # PARAMS2 = SMPTR; # ADDR OF CR/RCN/N SM BUFFER # OVLNAME = UPACNB4P; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC4: # CRRCNCB ( ACTION NO. 4 ) COMBINED ACTION OF ACTION 5 AND ACTION 9. SWITCH ACNB TO NVF SEND CR/RCN/R AND CR/CB/U TO NVF # HC5: # SACNB2 (ACTION NO. 5) SWITCH ACNB AND SEND CR/RCN/R TO NVF # # CON/REQ/A CASE SWITCH ACNB FROM APPL TO NVF # PARAMS1 = ACBAD; # ADDRESS OF OLD ACB # PARAMS2 = ACN; # ADDRESS OF OLD CONNECTION NUMBER # PARAMS3 = ATACBA[NVFAN]; # ADDRESS OF NEW ACB # PARAMS4 = 0; # NO NEW CONNECTION NUMBER # PARAMS8 = FALSE; # SET NOT LOANED CONNECTION SWITCH # OVLNAME = HSWACNBP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # # BASE ACNT TO NVF-S NEW CONNECTION JUST SWITCHED TO # OLDAN = ACBAN[0]; # APPLIC. NO. OF APPL REFUSING CONNECTION # P = PARAMS1; # ADDRESS OF NEW ACNB # PARAMS2 = 0 ; # PRESET APPL. NAME TO ZERO # IF ACNBPRID[0] NQ 0 THEN BEGIN # FROM SECONDARY APPL. # IF NOT ACNBPRAF[0] # PRIM NOT FAILED YET # THEN BEGIN # PRIMARY APPL. HAS NOT GONE # P = ATACBA[ACNBPRAN[0]] ; # ACB OF PRIMARY # TEMP = P; # SAVE ACNT TEMPLATE # P = ACBACNT[0]; # PRIMARY APPL ACNT # ACNTINDX = ACNBPRACN[0] + ACNTHSIZE - ACNTMINACN[0]; # GET INDEX TO ACNT # ACNTSECAN[ACNTINDX] = NVFAN; # ACNB IS NOW WITH NVF # ACNTSECACN[ACNTINDX] = ACNBACN[0]; # ACN IN NVF ACNB # P = TEMP; # RESTORE ACNT # PARAMS2 = ACBANAME[0] ; # PRIMARY APPL. NAME # PARAMS3 = ACNBRC[0] + CRSWHTAB;# SET REASON CODE TO RC+20B # END # PRIM HAS NOT GONE # ELSE BEGIN PARAMS3 = RCRC"PAF" ; # PRIM HAS GONE, SET RC TO 11B # ACNBPRID[0] = 0 ; # # END END # FROM SECODARY APPL. # ELSE BEGIN # NOT LOANED CONN. # PARAMS3 = ACNBRC[0] ; # SET REASON IN CR/RCN TO APL RC# END # NOT LOANED CONN. # # ISSUE CR/CRN/R TO NVF # P = ATACBA[NVFAN]; P = ACBACNT[0]; ACNTINDX = ACNBACN[0] + ACNTHSIZE - ACNTMINACN[0]; # ISSUE RECONNECT (CR/RCN/R) TO NVF # PARAMS4 = OLDAN; # AN OF APPL REFUSING CONNECTION # OVLNAME = HCRRCNRP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # CHECK IF THIS IS THE LAST CONNECTION OF AN EX-PRU APPLICATION. IF SO , RELEASE THE ACB OF IT # P = ATACBA[OLDAN] ; IF ACBWOFF[0] AND ACBNPRU[0] EQ 0 THEN BEGIN PARAMS1 = ACBAN[0] ; OVLNAME = RELACBP ; OVLCALL ; END IF ACTION[0] EQ SACNB2 THEN GOTO HCA; # ACTION ACNB2 SEND CR/RCN ONLY # # CONTINUE WITH ACTION CRRCNCB (4), SEND CR/CB/U # HC9: # CRCBU (ACTION NO. 9) SEND CR/CB/U TO NVF # PARAMS2 = P; # ACNB ADDRESS # OVLNAME = HCRCBUP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # SEND CON/CB TO PRIMARY APPLICATION IF THERE IS ONE # PARAMS1 = RCB"LND"; # REASON CODE 1 - NETWORK TERMINATED CON # OVLNAME = HCONCBUP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC6: # CHTCCA (ACTION NO. 6) SEND TCH/TCHAR TO APPLICATION # IF ACNBNCNB[0] NQ 0 THEN # NCNB EXISTS # BEGIN # SEND TCH/TCHAR TO APPLICATION # PARAMS1 = P; # ACNB ADDRESS # OVLNAME = HTCHARP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; END ELSE # NO NCNB EXISTS # GOTO HC77; HC7: GOTO HCA; HC8: # UACNB1 (ACTION NO. 8) UPDATE ACNB # PARAMS1 = P; # ADDR OF APPL CONNECTION BLOCK # PARAMS2 = SMPTR; # ADDR OF SM BUFFER # PARAMS9 = COMPCX"UACNB$" ; OVLNAME = COMPCONP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC10: # UACNB2 (ACTION NO. 10) UPDATE ACNB WITH INFORMATION FROM CON/REQ/N SEND CR/ACC/U TO NVF SEND TCH/TCHAR TO APPLICATION # PARAMS1 = P; # ADDR OF APPL CONNECTION BLOCK # PARAMS2 = SMPTR; # ADDR OF CON/REQ/N SM BUFFER # PARAMS9 = SENDX"UACNB3$" ; OVLNAME = SENDACCP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # SEND CR/ACC/U TO NVF # PARAMS1 = P; PARAMS9 = SENDX"CRACC$" ; OVLNAME = SENDACCP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # SEND TCH/TCHAR TO APPLICATION # PARAMS1 = P; IF ACNBNCNB[0] NQ 0 THEN # NCNB EXISTS # BEGIN # SEND TCH/TCHAR TO APPLICATION # PARAMS1 = P; # ACNB ADDRESS # OVLNAME = HTCHARP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # END GOTO HCA; HC11: # RECEIVED CR/IAP/N FROM NVF - VLLCB - VALIDATE LOGICAL LINK (FOR A-A CONNECTIONS) - IF EXIST CHOOSE A PROPER CONNECTION NUMBER TO USE WITH IT # PARAMP1 = SMPTR ; # CR/IAP/N FROM NVF # PARAMP2 = P ; # CONNECTION BLOCK INFO # # # OVLNAME = HVLLCBP ; OVLCALL ; # CALL OVERLAY AND EXECUTE # # # IF PARAMP3 EQ 0 # NO LOGICAL LINK. WE SENT ANOTHER CR/IAP # THEN RETURN; ELSE BEGIN LLCBAD = PARAMP3 ; # LOGICAL LINK FOR THAT A-A CONNECTION # NCN = PARAMP4 ; # CONNECTION NUMBER ON THIS LOGICAL LINK # ACNBADD = P ; P = SMPTR + BLKHSIZE + ABHSIZE ; P = P; CRBYTE = CRIOCTN[0]; # SAVE BYTE COUNT IN POINTER TABLE # ICNCN[0] = NCN; # MADE NCN AVAILABLE TO BLDNCNB # ACNBABL[0] = CRIAABL[0] ; ACNBVCBO[0] = CRVCB[0] ; ACNBICT [0] = CRICT[0] ; ACNBALN[0] = CRALN[0]; # APPLICATION LIST NUMBER # IF CRASNOD[0] EQ 0 AND CRADNOD[0] EQ 0 THEN ACNBDT[0] = DT$INTA ; ELSE ACNBDT[0] = DT$INTE ; END # # GOTO HCA ; HC12: # RECEIVED CR/IAP/A FROM NVF SEND CON/ACRQ/A TO APPL WITH RC FROM CR/IAP/A # P = SMPTR + BLKHSIZE + ABHSIZE ; IF CRRIAP[0] NQ RCIA"APF" THEN # APPLICATION HAS NOT FAILED # BEGIN P = ATACBA[ACNBIAN[0]]; # ADR OF ACB TO QUEUE CON/ACRQ/A# IF ACBERCNT[0] LS MAXLGERR THEN # OKAY TO GENERATE CON/ACRQ/A # BEGIN PARAMS1 = CRRIAP[0]; # REASON CODE FROM CR/IAP/A # PARAMS2 = P; # ADDRESS OF ACNB FOR CONNECTION# OVLNAME = HCACRQAP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LAOD AND EXECUTE OVERLAY # END ELSE # REACHED MAX NO OF ERR SUP MSG # BEGIN IF ACBERCNT[0] EQ MAXLGERR THEN # REACHED MAX NO OF ERR SUP MSG # BEGIN PARAMS1 = RLG"IAL"; # ERR/LGL RC FOR TOO MANY ERRORS# OVLNAME = HLGLERRP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END END END GOTO HCA ; HC13: # SACNB1 (ACTION NO.13) SWITCH ACNB - SEND CR/SWH/N AND CON/REQ/R # # CR/SWH/R CASE # P = SMPTR + BLKHSIZE + ABHSIZE; # FWA OF CR/SWH/R TEXT # CRAC = CRSWAN[0] ; P = ATACBA[CRAC] ; # ACB OF APPL TO BE SWITCHED TO # # SEND CR/SWH/N TO NVF # PARAMS1 = SMPTR; # SM BUFFER - CR/SWH/R # PARAMS2 = P ; PARAMS9 = STRTSX"CRSWH$" ; OVLNAME = STRTSWP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # IF P NQ 0 AND NOT ATNVFN[CRAC] AND NOT ATNVFF[CRAC] THEN BEGIN # APPL TO SWITCH TO IS NETTED ON # # SWITCH ACNB FROM NVF TO NEW APPL # PARAMS4 = 0; # INITIALIZE FOR NOT RETURNING LOAND CN# IF ACNBPRID[0] NQ 0 THEN BEGIN # IT IS LOANED CONN. # IF CRSWLST[0] GQ CRSWHSPR THEN BEGIN # RETURN TO PRIMARY APPL. # IF ACNBPRAF[0] THEN BEGIN # REAL PRIMARY HAS NETTED OFF BUT # PARAMS2 = 0 ; # ANOTHER APPLICATION HAS NETTED ON # PARAMS3 = RCRC"PAF" ; # WITH THE SAME AN # ACNBPRID[0] = 0 ; # CLEAR BECAUSE NO LONGER A LOAN CON# GOTO SENDCRN ; # RECONNECTION CONN. TO NVF WITH RC # END # 11B # ELSE BEGIN # REAL PRIMARY HAS NOT FAILED OR # PARAMS4 = ACNBPRACN[0]; # NETTED OFF. USE THE SAME ACN # # ZERO OUT THE SECONDARY ID IN ACNT ENTRY OF CONN # # CONNECTED TO PRIMARY APPLICATION. # P = ATACBA[ACNBPRAN[0]] ; # ACB OF PRIMARY # P = ACBACNT[0] ; INDEX = ACNBPRACN[0] + ACNTHSIZE - ACNTMINACN[0] ; ACNTSECID[INDEX] = 0 ; P = ATACBA[CRAC] ; # RESET ACB ADDRESS # ACNBPRID[0] = 0 ; # CLEAR BECAUSE IT NO LONGER A LOANE# END # CONNECTION # END END # IT IS A LOANED CONN # PARAMS1 = ACBAD; # ADDRESS OF OLD ACB # PARAMS2 = ACN; # ADDRESS OF OLD CONNECTION NUMBER # PARAMS3 = P; # ADDRESS OF NEW ACB # PARAMS8 = FALSE; # SET NOT LOANED CONNECTION SWITCH # OVLNAME = HSWACNBP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # IF PARAMS1 EQ 0 # NO NEW ACNB WAS ASSIGNED # THEN BEGIN # CAN NOT ASSIGN NEW CONN. # PARAMS2 = 0 ; # PRESET TO ZERO # IF ACNBPRID[0] NQ 0 THEN BEGIN # SWITCH FROM SECONDARY APPL. # IF NOT ACNBPRAF[0] THEN BEGIN # PRIMARY APPL. NOT GONE YET # P = ATACBA[ACNBPRAN[0]] ; # ACB OF PRIMARY # # ZERO OUT THE SECONDARY ID IN ACNT ENTRY OF CONN # # CONNECTED TO PRIMARY APPLICATION. # CURACNT = P ; P = ACBACNT[0] ; INDEX = ACNBPRACN[0] + ACNTHSIZE - ACNTMINACN[0] ; ACNTSECID[INDEX] = 0 ; P = CURACNT; # RESET ACNT ADDRESS # PARAMS2 = ACBANAME[0] ; # SET APPL NAME IN CR TO PRIM # PARAMS3 = RCRC"SRC" ; # REASON CODE IN CR/RCN = 25B # END # PRIMARY HAS NOT GONE # ELSE BEGIN PARAMS3 = RCRC"PAF" ; # PRIM IS GONE, REASON CODE IS 9# ACNBPRID[0] = 0 ; # # END END # SWITCH FROM SECOND APPL. # ELSE PARAMS3 = RCRC"ARC" ; GOTO SENDCRN ; # SEND CR/CRN/R TO NVF # END # CONN. CAN NOT BE ASSIGNED # ELSE BEGIN # NEW CONN. ASSIGNED # P = PARAMS1; # ADDRESS OF NEW ACNB # IF CRSWLST[0] EQ CRSWHSOK THEN BEGIN # SWITCHING FROM PRIM TO SECOND # IF NOT ACNBPRAF[0] # PRIMARY NOT FAILED # THEN BEGIN OLDAN = ACBAN[0] ; # AN OF SECONDARY # P = ATACBA[ACNBPRAN[0]] ; # ACB OF PRIMARY # P = ACBACNT[0] ; # UPDATE SECID FIELD IN ACNT # ACNTINDX = ACNBPRACN[0] + ACNTHSIZE - ACNTMINACN[0] ;# OF# ACNTSECAN[ACNTINDX] = OLDAN ; # PRIMARY APPLICATION # ACNTSECACN[ACNTINDX] = ACNBACN[0] ; END P = ATACBA[CRAC] ; # SET TEMPLATE BACK TO SECODARY # END # SEND CON/REQ/R TO APPLCATION # PARAMS1 = SMPTR; # ADDR OF CR/SWH/R BUFFER # PARAMS2 = P; # ACNB OF NEW CONN (NVF-S ACNB) # PARAMS9 = STRTSX"CONREQ$" ; OVLNAME = STRTSWP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # BASE ACNT TO NEW APPLICATION-S ACNT # P = ACBACNT[0]; ACNTINDX = ACNBACN[0] + ACNTHSIZE - ACNTMINACN[0]; END END ELSE BEGIN # APPL SWITCHING TO FAILED OR NETTED OFF # # SEND RECONNECT (CR/RCN/R) TO NVF # PARAMS2 = 0 ; # PRESET TO ZERO # IF ACNBPRID[0] NQ 0 THEN BEGIN # FROM SECONDARY APPL # IF NOT ACNBPRAF[0] THEN BEGIN # PRIMARY NOT GONE YET # P = ATACBA[ACNBPRAN[0]] ; # ACB OF PRIMARY # # ZERO OUT THE SECONDARY ID IN ACNT ENTRY OF CONN # # CONNECTED TO PRIMARY APPLICATION. # CURACNT = P ; P = ACBACNT[0] ; INDEX = ACNBPRACN[0] + ACNTHSIZE - ACNTMINACN[0] ; ACNTSECID[INDEX] = 0 ; P = CURACNT ; # RESET ACNT ADDRESS # PARAMS2 = ACBANAME[0] ; # PRIM APPL. NAME # PARAMS3 = RCRC"SNA" ; # REASON ON CR/CRN/R = 26B # END ELSE BEGIN PARAMS3 = RCRC"PAF" ; # RC = 11B # ACNBPRID[0] = 0 ; # # END END ELSE PARAMS3 = RCRC"ANF" ; SENDCRN: PARAMS1 = P ; PARAMS4 = CRSWAN[0]; # AN OF APPL WHICH FAILED OR NETTED OFF # OVLNAME = HCRRCNRP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # CHANGE STATE TO 6 # NEWSTATE[0] = HCRCNVF; # RECONNECT TO NVF INITIATED # END GOTO HCA; HC14: # DLACNB5 (ACTION NO. 14) RECEIPT OF CR/TRM/R FROM NVF SEND CR/TRM/N AND CON/CB/U # # SEND CR/TRM/N TO NVF # PARAMS1 = SMPTR; P = SMPTR + AIPHSIZE + ABHSIZE; # FWA OF CR/TRM/R # RCBRK = CRRTRM[0]; # SAVE REASON CODE FOR BRK # OVLNAME = HCRTRMNP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # SEND CON/CB/U TO APPLICATION # PARAMS1 = RCBRK; # REASON CODE FROM CR/TRM/R # PARAMS2 = P; # ACNB ADDRESS OF CONN TO TERMINATE # OVLNAME = HCONCBUP; # OVERLAY NAME # PARAMS3 = 0 ; OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC15: # CRTRMN1 (ACTION NO. 15) RECEIPT OF CR/TRM/R FROM NVF SEND CR/TRM/N TO NVF (SEND CON/ACRQ/A TO APPL) # P = SMPTR + AIPHSIZE + ABHSIZE; RCBRK = CRRTRM[0]; # REASON FOR BRK # PARAMS1 = SMPTR; OVLNAME = HCRTRMNP; OVLCALL; # LOAD AND EXECUTE OVERLAY # # SEND CON/ACRQ/A TO APPL # IF ACNBBS[0] EQ (ACNBSIZE+ACNBAPEN) # A-A CONNECTION ACNB # THEN BEGIN P = ATACBA[ACNBIAN[0]] ; IF P NQ 0 THEN BEGIN # ACB STILL THERE # IF ACBERCNT[0] LS MAXLGERR THEN # OKAY TO GENERATE CON/ACRQ/A # BEGIN PARAMS1 = RCBRK; # REASON CODE FOR TERMINATION # PARAMS2 = P; # ADDRESS OF ACNB FOR CONNECTION# OVLNAME = HCACRQAP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LAOD AND EXECUTE OVERLAY # END ELSE # REACHED MAX NO OF ERR SUP MSG # BEGIN IF ACBERCNT[0] EQ MAXLGERR THEN # REACHED MAX NO OF ERR SUP MSG # BEGIN PARAMS1 = RLG"IAL"; # ERR/LGL RC FOR TOO MANY ERRORS# OVLNAME = HLGLERRP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # END END END # ACB STILL THERE # END GOTO HCA; HC16: # CRTRMN2 (ACTION NO. 16) RECEIPT OF CR/TRM/R FROM NVF SEND CR/TRM/N TO NVF # P = SMPTR + AIPHSIZE + ABHSIZE; RCBRK = CRRTRM[0]; # REASON FOR BRK # PARAMS1 = SMPTR; OVLNAME = HCRTRMNP; OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC17: # RECEIVED CON/ACRQ/SM FROM APPLICATION # PARAMP1 = 0 ; # NO MESSAGE YET FROM NETWORK SIDE # CRACNBP ; # CALL INTERNAL PROC TO BUILD ACNB # P = SMPTR + BLKHSIZE; # BASE APPLICATION HEADER # ACNBABN[0] = ABHABN[0]; # APPLICATION BLOCK NUMBER # # AND SEND CR/IAP/R TO NVF # PARAMS1 = 0 ; # INDICATE FIRST CALL # PARAMS2 = ACN ; P = SMPTR+AIPHSIZE+ABHSIZE; ACNBANM[0] = CONANM[0] ; # STORE REQUESTED APPLICATION NAME # ACNBHID[0] = CONHID [0] ; # STORE HOST ID # ACNBIAN[0] = ACBAN[0] ; ACNBLID[0] = CONULID[0] ; PARAMS3 = ACNBIAN[0] ; PARAMS4 = P ; # SO THAT OVERLAY CAN RETRIEVE VALUES # PARAMS7 = P; # PASS CONACRQ HEADER ADDRESS # OVLNAME = HCRIAPRP; # SEND CR/IAP/R TO NVF # OVLCALL ; GOTO HCA; HC18: # UACNB3 (ACTION NO. 18) UPDATE ACNB AND SEND CR/ACC/U TO NVF # PARAMS1 = P; # ADDR OF APPL CONNECTION BLOCK # PARAMS2 = SMPTR; # ADDR OF CON/REQ/N SM BUFFER # PARAMS3 = 0; PARAMS9 = SENDX"UACNB3$" ; OVLNAME = SENDACCP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # SEND CR/ACC/U # PARAMS1 = P; PARAMS9 = SENDX"CRACC$"; OVLNAME = SENDACCP; # OVERLAY NAME # OVLCALL; IF PARAMS3 NQ 0 THEN BEGIN # BAD INPUT CHAR TYPE-BREAK CONNECTIONS AND RECONNECT TO NVF # TRIGB[0] = NOCHG; PARAMS1 = PARAMS3; # REASON CODE FOR CON/CB # PARAMS2 = P; # ACNB OF CONN TO BREAK # OVLNAME = HCONCBUP; # OVERLAY NAME # PARAMS3 = 0 ; OVLCALL; # LOAD AND EXECUTE OVERLAY # END GOTO HCA; HC20: # SFCINAC ( ACTION NO. 20 ) SEND FC/INACT/SM TO APPLICATION # PARAMS1 = P; # ADDRESS OF ACB # PARAMS2 = ACNBACN[0]; # APPLICATION CONNECTION NUMBER # OVLNAME = HSFCINAP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC21: # SACNB3 (ACTION NO. 21) SWITCH ACNB - SEND CR/RCN/R AND CON/END/N # # CON/END/R CASE SWITCH ACNB FROM APPL TO NVF # P = SMPTR + BLKHSIZE + ABHSIZE; # FWA OF CON/END/R # # FLAG TO RELACNB NOT TO FREE THE # # ACNT ENTRY ASSO. WITH THIS ACNB # PARAMS1 = ACBAD; # ADDRESS OF OLD ACB # PARAMS2 = ACN; # ADDRESS OF OLD CONNECTION NUMBER # PARAMS3 = ATACBA[NVFAN]; # ADDRESS OF NEW ACB # PARAMS4 = 0; # NOT RETURNING LOANED CON TO PRI APP # PARAMS8 = CONLOAN[0]; # LOAN CONNECTION FLAG # OVLNAME = HSWACNBP; # NAME OF OVERLAY TO LOAD # OVLCALL; # LOAD AND EXECUTE OVERLAY # # BASE ACNT TO NVF-S NEW CONNECTION JUST SWITCHED TO # OLDAN = ACBAN[0]; # APPLIC. NO. OF APPL ENDING CONNECTION # P = PARAMS1; # ADDRESS OF NEW ACNB # PARAMS7 = SMPTR ; PARAMS5 = FALSE ; # CLEAR LOAN BIT FOR CON/END/N # PARAMS8 = FALSE ; # ASSUMING LENDING IS O.K. # IF ACNBPRID[0] NQ 0 THEN BEGIN # SEC. APPL. SEND CON/END/R ON LOANED CON# IF CONLOAN[0] THEN BEGIN # LENDING IS NOT O.K. # RC[0] = 1 ; # SET REASON CODE IN CON/END/N FOR # PARAMS8 = TRUE ; END # NO FORWARDING INDICATION, CONNECTION NOW # # SWITCHED BACK TO PRIMARY APPLICATION # IF CONANM[0] EQ "ABORT" THEN BEGIN # SEC. APPL. ABORTED CON # PARAMS1 = RCB"LCA" ; # REASON OF ABORTTING ON # PARAMS2 = P ; # CON/CB/R TO PRIMARY APPL.# OVLNAME = HCONCBUP ; OVLCALL ; PARAMS1 = P; # PASS ACNB ADDR TO SEC OVERLAY # PARAMS3 = RCRC"SAC" ; # RC = 12B REASON CODE OF CR/RCN/R # PARAMS2 = 0 ; # NO APPL. NAME IN CR/RCN # END # SEC. APPL. ABORTED CON # ELSE BEGIN # SEC APPL. PASSES CON TO # # ANOTHER APPL. # IF NOT ACNBPRAF[0] THEN BEGIN # PRI. APPL. NOT ABORTED # # RECON TO PRIMARY APPL. # PARAMS3 = RCRC"STC" ; # RC = 24B REASON CODE OF CR/CRN # P = ATACBA[ACNBPRAN[0]] ; # ACB OF PRIM. APPL. # PARAMS2 = ACBANAME[0] ; # NAME OF PRIMARY APPL. # END ELSE BEGIN # PRIM APPL. HAS ABORTED # PARAMS3 = RCRC"PAF" ; # RC = 11B REASON CODE ON CR/CRN # PARAMS2 = 0 ; # NO APPL. NAME # ACNBPRID[0] = 0 ; END END # SEC. APPL. PASSED CON # END # SEC. APPL. SENDS CON/END ON LOANED CON # ELSE BEGIN # CON/END/R FROM PRIM. APPL. # PARAMS2 = CONUANM[0] ; # NEXT APPLICATION NAME # IF CONLOAN[0] THEN BEGIN # LOAN BIT IS ON # P = ACNBNCNB[0] ; IF P NQ 0 AND ( NCNBDT[0] EQ DT$INTA # INTRA-HOST CONNECTN # OR NCNBDT[0] EQ DT$INTE ) # INTER-HOST # THEN BEGIN # DO NOT LOAN THIS CONNECTION, TERMI# RC[0] = 02 ; # NATE CONN. AND SEND CON/END/N WITH# # REASON CODE 2 # PARAMS3 = RCRC"ATC" ; # NORMAL TERMINATION REASON CODE # PARAMS2 = 0 ; # CLEAR NEXT APPLICATION NAME # PARAMS8 = TRUE ; # LENDING NOT O.K., FOR CON/END/N # END ELSE BEGIN # PRIM. APPL. TRYING TO LOAN CON TO SEC. APL# ACNBPRAN[0] = OLDAN ; # SAVE OLD APPL. NUM. # ACNBPRACN[0] = ACN ; # SAVE OLD ACN IN SEC ACN# ACNTWD[ACNTINDX] = 0 ; # CLEAR UP THE ENTRY # ACNTSECAN[ACNTINDX] = NVFAN ; # NVF 'S AN # ACNTSECACN[ACNTINDX] = ACNBACN[0];# ACN OF THIS CON IN NVF # PARAMS3 = RCRC"LSA" ; # RC = 10B REASON CODE TO NVF FOR # PARAMS5 = TRUE ; # SET LOAN BIT INDICATOR FOR # # CON/END/N PROCESSOR # # LOANED CONNECTION # END END # LOAN BIT IS ON # ELSE PARAMS3 = RCRC"ATC" ; # NORMAL RECONNECT # END # CON/END/R FROM PRIM. APPL. # P = ATACBA[NVFAN] ; # SET BASE TO NVF 'S # P = ACBACNT[0] ; ACNTINDX = ACNBACN[0] + ACNTHSIZE - ACNTMINACN[0] ; # SEND CR/RCN/R TO NVF # PARAMS4 = OLDAN; # AN OF APPL ENDING CONNECTION # OVLNAME = HCRRCNRP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # SEND CON/END/N TO APPLICATION # PARAMS1 = SMPTR; # SM BUFFER (CON/END/R) # PARAMS2 = OLDAN; # AN OF APPL ENDING CONNECTION # OVLNAME = HCONENDP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC27: # UCRCBU ( ACTION 27 ) SENDING CR/BU/U TO NVF ONLY # HC22: # GOCRCNE ( ACTION NUMBER 22 ) SEND CR/CB/U TO NVF AND CON/END/N TO APPLICATION (BY ACTION 26) # PARAMS2 = P ; OVLNAME = HCRCBUP ; OVLCALL ; IF ACTION[0] EQ UCRCBU THEN GOTO HCA ; # SENDING CR/CB/U ONLY # # CONTINUE ACTION 26 TO SEND CON/END/N # HC26: # NCONEND (ACTION NO. 22) SEND CON/END/N TO APPLICATION # PARAMS1 = SMPTR; # SM BUFFER (CON/END/R) # PARAMS2 = ACBAN[0]; PARAMS5 = FALSE ; # NO LOANED FLAG ON # OVLNAME = HCONENDP; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # # NO LONGER PART OF NWL # GOTO HCA; HC23: # UPACNB4 (ACTION NO. 23) UPDATE ACNB ON RECEIPT OF CR/RCN/N # PARAMS1 = P; # ADDR OF APPLICATION CONNECTION BLOCK # PARAMS2 = SMPTR; # ADDR OF CR/RCN/N SM BUFFER # OVLNAME = UPACNB4P; # OVERLAY NAME # OVLCALL; # LOAD AND EXECUTE OVERLAY # GOTO HCA; HC24: # ACTION 24 - SEND CR/IAP/R TO NVF WITH RC FROM ICN/AP/A # P = SMPTR + ABHSIZE + BLKHSIZE; # GET THE ICN/AP/A # PARAMS1 = ICNRAP[0] ; # GET THE REASON CODE # PARAMS2 = ACN ; PARAMS3 = 0 ; # THIS IS NOT THE FIRST CALL # PARAMS4 = P ; PARAMS7 = 0; # NO OLD AHEADER NEEDED # OVLNAME = HCRIAPRP ; # SEND CR/IAP/R TO NVF # OVLCALL ; GOTO HCA ; HC25: # ACTION 25 : CHANGE PWL HEADER TO APPL. BLOCK HEADER THEN LINK TO APPROPPRIATE ACB. # MGETS(BLKHSIZE+ABHSIZE+LXFTN,BUFFERADR,TRUE);# GET BUFFER TO HOLD# # IFT OR OFT/OFF/N# P = SMPTR ; P = BUFFERADR + BLKHSIZE ; ABHWORD[0] = 0 ; ABHABT[0] = APPCMD ; ABHACT[0] = CT60TRANS ; ABHTLC[0] = LXFTN ; P = BUFFERADR + BLKHSIZE + ABHSIZE ; SPACN[0] = ACN ; # SEND AS ASYN SM # IF PWLRC[0] EQ OFTRC THEN PFCSFC[0] = OFTOFFN ; IF PWLRC[0] EQ IFTRC THEN PFCSFC[0] = IFTOFFN ; BLINK(BUFFERADR,P) ; OSCHAPP(P); # SWAP IN APPLICATION # GOTO HCA; HC28: IF ACNBPRID[0] NQ 0 THEN BEGIN # CR/RCN/A RECEIVED ON LOANED CN# PARAMS1 = P ; IF NOT ACNBPRAF[0] THEN BEGIN # PRIM APPL. HAS NOT GONE # P = ATACBA[ACNBPRAN[0]] ; # ACB IF PRIMARY APPL. # PARAMS4 = ACBAN[0] ; # APPLICATION TO RECONN TO # CURACNT = P ; P = ACBACNT[0] ; INDEX = ACNBPRACN[0] + ACNTHSIZE - ACNTMINACN[0] ; ACNTSECID[INDEX] = 0 ; P = CURACNT ; # RESET ACNT ADDRESS # P = SMPTR + BLKHSIZE + ABHSIZE ; # CR/RCN/A MESSAGE # PARAMS2 = ACBANAME[0] ; # SO, SWITCH CON BACK TO PRI APP# PARAMS3 = CRRRCN[0] ; # BY SENDING CR/RCN/R TO NVF # # WITH REASON FROM CR/RCN/A # END # PRIM HAS NOT GONE # ELSE BEGIN # PRIM APPL. HAS NETOFFED/FAILED# PARAMS2 = 0 ; # NULL APPLICATION'S NAME # PARAMS3 = RCRC"PAF" ;# RC = 11B REASON CODE OF CR/RCN/R IS 11B# PARAMS4 = ACBAN[0] ; ACNBPRID[0] = 0 ; # # END OVLNAME = HCRRCNRP ; # SEND CR/RCN/R TO NVF # OVLCALL ; END # CR/RCN/A RECEIVED ON LOANED CN# ELSE ABORT(DFMSG30,0) ; # ABORT NIP, BECAUSE OF NVF ERR # HCA: IF NEWSTATE[0] NQ STATX THEN BEGIN ACNTCOS[ACNTINDX] = CURST; # OLD CONNECTION STATE # ACNTCTR[ACNTINDX] = TRIGGER; # OLD CONNECTION TRIGGER # IF NEWSTATE[0] NQ NOCHG THEN ACNTCS[ACNTINDX] = NEWSTATE[0]; # UPDATE NEW STATE # END IF TRIGC[0] NQ NOCHG THEN # TRIGGER CONNECTION STATE TABLE # BEGIN IF LLCBAD EQ 0 THEN BEGIN # THIS IS NOT AN A-A CASE WITH LL PRE-ALLOCATED# P = ACNBNCNB[0]; NCN = NCNBCN[0] ; # NETWORK CONNECTION NUMBER # CONTROL IFEQ DEBUG,1; IF P EQ 0 THEN # VALID CHECK FOR T-A ONLY # BEGIN D27M2[0] = "HCSTTP1"; ABORT(DFMSG27,0); END CONTROL FI; LOCLLCB(NCNBHN[0],NCNBTN[0],LLCBAD); CONTROL IFEQ DEBUG,1; IF LLCBAD EQ 0 THEN BEGIN D27M2[0] = "HCSTTP2"; ABORT(DFMSG27,0); END CONTROL FI; END NCSTTP(LLCBAD,NCN,TRIGC[0],SMPTR); # CALL NETWORK-SIDE # END IF TRIGB[0] NQ NOCHG THEN HBSTTP(P,TRIGB[0],0); END ELSE BEGIN # ILLEGAL TRIGGER # IF TRIGGER LS HCMINXT OR TRIGGER GR HCMAXXT THEN BEGIN # TRIGGER INTERNAL TO NIP # PARAMS1 = ACBAN[0]; # APPLICATION NUMBER # PARAMS2 = ACN; # APPLICATION CONNECTION NUMBER # PARAMS3 = TRIGGER; # ILLEGAL TRIGGER NUMBER # PARAMS4 = CURST; # CURRENT CONNECTION STATE # PARAMS6 = "HCSTTP"; # NAME OF STATE TABLE PROCESSOR # OVLNAME = STPHERRP; # ISSUE STP ERROR MESSAGE # OVLCALL; # LOAD AND EXECUTE OVERLAY # ABORT(0,0); # ABORT NIP # END ELSE BEGIN # ILLEGAL EXTERNAL TRIGGER FROM APP # # ISSUE ERR/LGL TO APPLICATION # PARAMS1 = RLG"ISM"; # RC=7 ILLOGICAL SM # OVLNAME = HLGLERRP; # SEND ERR/LGL TO APP # OVLCALL; # LOAD AND EXECUTE OVERLAY # END END END ELSE BEGIN PARAMS1 = DFMSG26; PARAMS6 = "HC"; OVLNAME = XERRMSGP; OVLCALL; END HC77: # EXIT # RETURN; END PROC CRACNBP ; # CREATE ACNB # BEGIN IF PARAMP1 EQ 0 THEN BEGIN # WE HAVE TO CREATE AN ACNB TO NVF # PARAMP2 = ATACBA[NVFAN] ; END ELSE PARAMP2 = P ; PARAMP5 = STRTCX"BACNB$" ; OVLNAME = STRTCONP; # BUILD ACNB # OVLCALL; # LOAD AND EXECUTE OVERLAY # P = PARAMP3; # BASE ACNB # P = PARAMP4; # BASE ACNT # ACN = ACNBACN[0]; # APPLICATION CONNECTION NUMBER ASSIGNED # ACNTINDX = ACN + ACNTHSIZE - ACNTMINACN[0]; RETURN ; END END TERM