*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<OTQ>, 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<PEQ>, 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<OTQ>, WCBUF[1], ABHBUF[1], MSGBUF[0]);
END # NOP CON/END/R PROTOCOL RESP #
END # CON/END/R PROTOCOL RESPONSE #
END # CSCCPA #
TERM