*DECK IPIPIDB USETEXT TEXTIPL PROC IPIPIDB; *CALL COPYRITE CDCNET - COPYRIGHT CONTROL DATA. 1992. # TITLE IPIPIDB - PROCESS INPUT DATA BLOCK. # BEGIN # IPIPIDB # # **** IPIPIDB PROCESS INPUT DATA BLOCK. * * THIS PROCEDURE PROCESSES ALL NON-SUPERVISORY MESSAGES RECEIVED BY * SOCKET LIBRARY. THE DATA IS STORED IN A QUEUE ARRAY BASED ON THE * CONNECTION NUMBER. * * PROC IPIPIDB * * ENTRY INPBUF = ARRAY CONTAINING INPUT DATA BLOCK. * P = PTR TO INPUT APPLICATION BLOCK HEADER. * * EXIT QUE$BUF = ARRAY CONTAINS THE INPUT DATA BLOCK. * * METHOD IF THE CONNECTION STATE IS NOT *CONNECTED* OR *IDLE* * THEN TREAT AS A NAM PROTOCOL ERROR. * * IF THE STATE IS NOT *OPEN* OR *BOUND* THE DATA IS * DISCARDED. * * IF THE BLOCK TYPE IS *APPBLK* OR *APMSG* THEN THE * DATA IS MOVED INTO THE CONNECTIONS QUEUE STORAGE AREA. * A LST/OFF SUPERVISORY MESSAGE IS SENT SO NO MORE DATA * WILL BE RECEIVED ON THE CONNECTION UNTIL THE APPLICATION * PROCESSES IT. * * IF THE BLOCK TYPE IS NOT *APPBLK* OR *APMSG*, THEN THE * CONNECTION IS TERMINATED. * # # **** PROC IPIPIDB - XREF LIST # XREF BEGIN PROC IPIAIPA; # ABORT THE IP APPLICATION # PROC IPIDOSM; # DISPATCH OUTPUT SUPERVISORY MESSAGE # END # ** # ITEM DATALNTH I; # RECEIVED DATA LENGTH IN WORDS # ITEM LOOP I; # DATA ARRAY LOOP COUNTER # CONTROL EJECT; # **** START MAIN PROCEDURE # CURACN = ABHADR [0]; # DETERMINE CONNECTION NUMBER # # **** IF CONNECTION STATE IS *CONNECTED* OR *IDLE*, THEN TREAT AS A NAM * PROTOCOL ERROR. # IF (ACN$STATE [CURACN] EQ S"IDLE") OR (ACN$STATE [CURACN] EQ S"CONNECTED") THEN BEGIN IPIAIPA (NDATA$); # NAM PROTOCOL ERROR # RETURN; END; # **** IF CONNECTION OPEN, THEN ACCEPT DATA. ALL OTHER STATES * ARE IGNORED. ONLY *BLK* AND *MSG* TYPE BLOCK ARE ACCEPTED, * ALL OTHERS ARE TREATED AS A CONNECTION PROTOCOL ERROR AND THE * CONNECTION IS TERMINATED. * # IF (ACN$CONNECT [CURACN]) THEN BEGIN IF (ABHABT [0] NQ APPBLK) AND (ABHABT [0] NQ APMSG) THEN BEGIN ACN$ABORT [CURACN] = TRUE; RETURN; END # **** MOVE THE RECEIVED BUFFER INTO THE INPUT QUEUE STORAGE AREA. * # P = ACN$BUFFER [CURACN]; ACN$DATAV [CURACN] = TRUE; ACN$DATALNTH [CURACN] = ABHTLC [0];# RECEIVED BLOCK LENGTH # DATALNTH = ABHTLC [0] * 10 / 75 - 1; # BLOCK LENGTH IN WORDS # ACN$MORE [CURACN] = (ABHABT [0] EQ APPBLK); FOR LOOP = 0 STEP 1 UNTIL (ACN$DATALNTH [CURACN] - 1) DO BEGIN REA$WORD [LOOP] = INP$WORD [LOOP]; END # **** SET FLOW CONTROL ON THIS CONNECTION UNTIL THE DATA HAS BEEN * PROCESSED. * # P = LOC(OUTBUF); SPMSG0 [0] = 0; LSTACN [0] = CURACN; IPIDOSM (LSTOFF, LLST); # ISSUE LST/OFF/R SM # END RETURN; # RETURN TO CALLER # END # IPIPIDB # TERM