*DECK QTLINK USETEXT AIPDEF USETEXT QTRMBUF USETEXT QTRMCOM USETEXT QTRMNIT PROC QTLINK; *IF,DEF,IMS # *1DC QTLINK * * 1. PROC NAME AUTHOR DATE * QTLINK S. WATANABE 80/01/21 * * 2. FUNCTIONAL DESCRIPTION. * PROVIDES APPLICATION-TO-APPLICATION CONNECTION PROCESSING * TO QTRM. * * 3. METHOD USED. * IF APPLICATION NOT NETTED ON, * CALL NP$ERR TO ISSUE DAYFILE MESSAGE AND ABORT APP. * IF SUPPORT A-TO-A FLAG IS NOT SET, * CALL NP$ERR TO ISSUE DAYFILE MESSAGE AND ABORT APP. * IF APPLICATION-TO-APPLICATION REQUEST NOT OUTSTANDING, * BUILD CON/ACRQ SUP MSG. * IF ADDRESS OF OUTCALL DATA NOT SPECIFIED, * CALL NETPUT TO SEND CON/ACRQ SUP MSG. * ELSE (APPLICATION HAS OUTCALL DATA TO INCLUDE IN CON/ACRQ), * IF SIZE OF OUTCALL DATA NOT SPECIFIED, * REJECT QTLINK CALL WITH APPROPRIATE RETURN CODE. * ELSE (SIZE OF DATA WAS SPECIFIED), * IF SPECIFIED SIZE IS TOO LARGE, * REJECT QTLINK CALL WITH APPROPRIATE RETURN CODE. * ELSE (GOOD SIZE SPECIFIED FOR DATA TO PASS TO NEXT APP), * CREATE FRAGMENT ARRAY FOR SUP MSG. * CALL NETPUTF TO SEND CON/ACRQ SUP MSG. * * 4. ENTRY CONDITIONS. * SUPPORT-A-TO-A FIELD MUST BE SET BEFORE CALLING QTOPEN. * NETON MUST HAVE BEEN ACCOMPLISHED BY CALLING QTOPEN * PREVIOUS TO CALLING QTLINK. * REQUESTED APPLICATION NAME MUST BE PLACED IN NIT$REQ$APP * AND REQUESTED HOSTID (OR 0 IF SAME HOST) IN NIT$HOSTAA * IN NIT GLOBAL AREA BEFORE CALLING QTLINK. * * 5. NORMAL EXIT CONDITIONS. * NIT$RC NORMAL COMPLETION RETURN CODE * * 6. ABNORMAL EXIT CONDITIONS. * NIT$RC QTLINK REJECT RETURN CODE * NIT$S$RC REASON FOR QTLINK REJECT * * 7. COMDECKS CALLED OR SYMPL TEXTS USED. * AIPDEF NP$CRT QTRMBUF QTRMCOM QTRMNIT * * 8. ROUTINES CALLED. * NP$ERR ISSUE ERROR MESSAGE AND ABORT APP * NETPUT SEND NETWORK MESSAGE TO NIP * NETPUTF SEND FRAGMENTED NETWORK MESSAGE TO NIP. * * 9. DAYFILE MESSAGES * NETWORK APPLICATION ABORTED, RC = 73. * QTLINK: REQUEST INVALID BEFORE QTOPEN. * * NETWORK APPLICATION ABORTED, RC = 95. * QTLINK: NO SUPPORT-A-TO-A. * * # *ENDIF # CONTROL DEFINITIONS # CONTROL PRESET; CONTROL PACK; CONTROL DISJOINT; CONTROL INERT; CONTROL FASTLOOP; *CALL NP$CRT # ROUTINES CALLED # XREF BEGIN PROC NP$ERR; # ISSUE ERROR MESSAGE AND ABORT NIP # PROC NETPUT; # SEND NETWORK MESSAGE TO NIP # PROC NETPUTF; # SEND FRAGMENTED NETWORK MESSAGE TO NIP # END # LOCAL VARIABLES # CONTROL EJECT; # BEGIN QTLINK PROCESSING # BEGIN IF NOT NETON$STATUS THEN # APP HAS NOT CALLED QTOPEN # NP$ERR("73"); IF NOT (SUPTRAA[0] OR SUPTERA[0]) THEN # APP DOES NOT SUPPORT A-TO-A CONNECTIONS # NP$ERR("95"); P = NIT$ADDR; NIT$RC[0] = 0; NIT$CON[0] = 0; IF NOT REQAA THEN # NO A-TO-A CON REQ OUTSTANDING # BEGIN ABHWORD[0] = 0; SPMSG0[0] = 0; SPMSG1[0] = 0; ABHABT[0] = APPCMD; ABHABN[0] = 1; #ABN TO BE RETURNED IN CON/REQ/R# ABHACT[0] = CT60TRANS; ABHTLC[0] = LCONAC; PFCSFC[0] = CONACR; # PFC/SFC OF CON/ACRQ SUP MSG # CONANM[0] = NIT$REQ$APP[0]; # NAME OF APP TO BE CONNECTED TO# CONHID[0] = NIT$HOSTAA[0]; # HOST ID OF HOST OF REQUEST APP# CONALID[0] = NIT$LID[0]; # LID OF HOST OF REQUESTED APP # IF (NIT$PARMADR[0] EQ 0) THEN # NO OUTCALL PARAMETERS # BEGIN REQAA = TRUE; # SET A-A REQ OUTSTANDING FLAG # NETPUT(HEADER,SUP$MES); # SEND CON/ACRQ TO NIP # END ELSE # OUTCALL DATA TO SEND # BEGIN IF NIT$CTLC[0] EQ 0 THEN # NO SIZE GIVEN FOR OUTCALL BUF # BEGIN NIT$S$RC[0] = S"NOSIZE"; # STORE REASON FOR BAD CALL # NIT$RC[0] = S"QTLINKREJ"; # STORE QTLINK REJECT RETURN COD# END ELSE # SIZE GIVEN FOR OUTCALL BUFFER # BEGIN IF NIT$CTLC[0] GR 52 THEN # TOO MUCH DATA BEING PASSED # BEGIN NIT$S$RC[0] = S"BADSIZE"; # STORE REASON FOR BAD CALL # NIT$RC[0] = S"QTLINKREJ"; # STORE QTLINK REJECT RC # END ELSE # SIZE IS WITHIN RANGE # BEGIN REQAA = TRUE; # SET A-A REQ OUTSTANDING FLAG # ABHTLC[0] = LCONAC + NIT$CTLC[0]; # SIZE OF CON/ACRQ S M# FRAGSZ0[0] = LCONAC; # SIZE OF 1ST FRAGMENT # FRAGAD0[0] = LOC(SUP$MES); # ADDR OF 1ST FRAGMENT # FRAGSZ0[1] = NIT$CTLC[0]; # SIZE OF 2ND FRAGMENT # FRAGAD0[1] = NIT$PARMADR[0]; # ADDR OF 2ND FRAGMENT # NOFRAG = 2; # NUMBER OF FRAGMENTS IN S M # NETPUTF(HEADER,NOFRAG,FRAG); # SEND CON/QCRQ SUP MSG # END END END END ELSE BEGIN NIT$RC[0] = S"QTLINKREJ"; # STORE QTLINK REJECT RETURN COD# NIT$S$RC[0] = S"AACONOUT"; # STORE REASON CODE FOR BAD CALL# END RETURN; END # QTLINK # TERM