*DECK CSCCPA USETEXT TEXTCS USETEXT TEXTSS USETEXT TXTAPSS PROC CSCCPA; # TITLE CSCCPA - COMPLETE PROTOCOL ACTION. # BEGIN # CSCCPA # # ** CSCCPA - COMPLETE PROTOCOL ACTION. * * D. G. DEPEW. 82/03/16. * D. G. DEPEW. 82/06/03. * * THIS PROCEDURE PERFORMS ALL THE CONNECTION(C) LAYER PROCESSING * REQUIRED FOR ALL CONNECTION/OPERATOR RELATED SUPERVISORY MESSAGES * THAT EMANATE FROM THE INNER(I) LAYER (TERMED PROTOCOL RESPONSES). * * PROC CSCCPA * * ENTRY WCBUF[0] = WORD COUNT WORD FROM ORIGINAL CONNECTION * TRAFFIC QUEUE (*CNQ*) ENTRY. * ABHBUF[0] = APPLICATION BLOCK HEADER FOR THE SM (BASED * ARRAY *ABH* IN *TXTAPSS* POINTS HERE). * MSGBUF[0] = BODY OF THE SM (BASED ARRAY *APSM* IN * *TXTAPSS* POINTS HERE). THE POSSIBLE PFC/SFC * VALUES ARE: HOP/START/N, CON/REQ/N, * CON/END/R. HOWEVER, ONLY THE CON/END/R * ACTUALLY HAS AN SM BODY PORTION AT THIS TIME. * * EXIT ANY OF THE FOLLOWING IN VARIOUS COMBINATIONS ACCORDING TO * THE SM (PROTOCOL RESPONSE) RECEIVED AND THE STATE OF THE * ACN LIST ENTRY FOR THE OPERATOR IN QUESTION: * - THE STATE OF THE ACN LIST ENTRY HAS BEEN UPDATED. * - A CON/REQ/N OR CON/END/R SM HAS BEEN PLACED IN THE * OUTGOING TRAFFIC QUEUE (*OTQ*). * - A HOP/START SM (ESSENTIALLY) HAS BEEN PLACED IN THE * PROTOCOL EVENT QUEUE (*PEQ*). * * NOTES 1. THERE IS NO REAL HOP/START/N SM. THIS IS STRICTLY A * CS INTERNAL CODE. * 2. THE PROCESSING IS DEFINED BY THE CS/HOP AND CS/NOP * STATE DIAGRAMS. # # **** PROC CSCCPA - XREF LIST. # XREF BEGIN PROC CSCPNQ; # PURGE NOP QUEUE # PROC SSTAQE; # ACCEPT QUEUE ENTRY # END # **** # ITEM DUM; # * WE EXECUTE WHAT AMOUNTS TO A CASE CONSTRUCT TO PROCESS THE THREE * TYPES OF PROTOCOL RESPONSES. # IF WCB$SMID[0] EQ SMID"HOPSRTN" THEN # HOP/START PROCESSING BY I-LAYER DONE # BEGIN # * SIMPLY UPDATE THE STATE OF THE HOP PSEUDO ACN IN ACCORDANCE * WITH ITS EXISTING STATE. # IF ACN$HOPST[HOPORD$] EQ S"CREATE" THEN # MOST USUAL CIRCUMSTANCE # ACN$HOPST[HOPORD$] = S"COMMAND"; # HISTORY BUFFER TO FOLLOW # ELSE IF ACN$HOPST[HOPORD$] EQ S"STARTEND" THEN ACN$HOPST[HOPORD$] = S"ENDED"; # WILL END AFTER HIST BUFF # ELSE # MUST BE HOP/BRK AFT HOP/START # ACN$HOPST[HOPORD$] = S"BREAK"; # WILL DISCARD HIST BUFFER # END # HOP/START/N PROTOCOL RESPONSE # ELSE IF WCB$SMID[0] EQ SMID"CONREQN" THEN # CON/REQ/R PROCESSING BY I-LAYER DONE # BEGIN # * SIMPLY FORMAT AND ISSUE THE CON/REQ/N SM. UPDATE THE STATE. # WCB$WORD[1] = LCORQR + 2; # ENTRY SIZE # ABHWORD[1] = LCORQR; # TEXT LENGTH # ABHABT[1] = APPCMD; # BLOCK TYPE # ABHACT[1] = CT60TRANS; # CHARACTER TYPE - ABH COMPLETE # SPMSG0[0] = 0; # LIST NUMBER + OTHERS # PFCSFC[0] = CONREQN; # PFC/SFC # CONBDD[0] = TRUE; # DISCARD INPUT UPON BREAK # CONNXP[0] = TRUE; # DISCARD TRANSPARENT DATA # CONACT[0] = CT6DISPLAY; # INPUT CHARACTER TYPE FOR CN # CONACN[0] = ABHADR[0]; # NOP CN NUMBER - SM COMPLETE # ACN$NOPST[ABHADR[0]] = S"COMMAND"; # WAIT FOR CS BANNER # SSTAQE (P, WCBUF[1], ABHBUF[1], MSGBUF[0]); END # CON/REQ/N PROTOCOL RESPONSE # ELSE # MUST BE CON/END/R (OP GONE FM I-LAYER) # BEGIN # * FIRST TAKE A MAIN BRANCH DEPENDING UPON WHETHER THIS REQUEST IS * FOR THE HOP OR A NOP (THE PROCESSING IS COMPLETELY DIFFERENT). # IF ABHADR[0] EQ HOPORD$ THEN # CON/END REQUEST FOR THE HOP # BEGIN # * THE CON/END/R PROTOCOL RESPONSE FOR THE HOP ALWAYS RESULTS * FROM A HOP/END SM HAVING BEEN PROCESSED. THERE IS NO DEFINED * RESPONSE TO A HOP/END SM. HENCE, FOR THIS CASE THE CON/END/R * PROTOCOL RESPONSE IS A CS INTERNAL SIGNAL FROM THE I-LAYER TO * THE C-LAYER INDICATING ALL CLEANUP FOR THE HOP IS COMPLETE. * IF A SUBSEQUENT HOP/START SM HAS ALREADY BEEN ENCOUNTERED, IT * CAN NOW BE SENT TO THE I-LAYER (AS A PROTOCOL EVENT). UPDATE * THE STATE OF THE HOP PSEUDO ACN. # IF ACN$HOPST[HOPORD$] EQ S"ENDED" THEN # MOST USUAL CIRCUMSTANCE # ACN$HOPST[HOPORD$] = S"INACT"; ELSE # MUST SND HOP/START TO I-LAYER # BEGIN WCB$SMID[0] = SMID"HOPSTRT"; # ALL ELSE IS SET # SSTAQE (P, WCBUF[0], ABH[0], APSM[0]); # TO I-LAYER # IF ACN$HOPST[HOPORD$] EQ S"RESTART" THEN ACN$HOPST[HOPORD$] = S"CREATE"; ELSE ACN$HOPST[HOPORD$] = S"STARTBRK"; END END # HOP CON/END/R PROTOCOL RESP # ELSE # CON/END REQUEST FOR A NOP # BEGIN # * FORMAT AND ISSUE THE CON/END/R SM. PURGE ANY DATA QUEUED FOR * THIS NOP. UPDATE THE STATE. # WCB$WORD[1] = LCONEN + 2; # ENTRY SIZE # ABHWORD[1] = LCONEN; # TEXT LENGTH # ABHABT[1] = APPCMD; # BLOCK TYPE # ABHACT[1] = CT60TRANS; # CHARACTER TYPE - ABH COMPLETE # SPMSG0[0] = 0; PFCSFC[0] = CONEND; # PFC/SFC # IF WCB$WC[0] EQ 2 THEN # I-LAYER DID NOT PROVIDE ANAME # SPMSG1[0] = 0; # INSURE ANAME = 0 # CONACN[0] = ABHADR[0]; # NOP CN NUMBER - SM COMPLETE # ACN$NOPST[ABHADR[0]] = S"ENDED"; CSCPNQ (ABHADR[0], DUM); # DELETE NOP'S OUTPUT # SSTAQE (P, WCBUF[1], ABHBUF[1], MSGBUF[0]); END # NOP CON/END/R PROTOCOL RESP # END # CON/END/R PROTOCOL RESPONSE # END # CSCCPA # TERM