[623] | 1 | HLCSTCP4 ;SFIRMFO/RSD - BI-DIRECTIONAL TCP ;11/03/2006 13:31
|
---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**109,122**;Oct 13,1995;Build 4
|
---|
| 3 | ;Per VHA Directive 2004-038, this routine should not be modified.
|
---|
| 4 | ;
|
---|
| 5 | Q
|
---|
| 6 | ; RDERR & ERROR moved from HLCSTCP2 on 12/2/2003 - LJA
|
---|
| 7 | ;
|
---|
| 8 | RDERR ; Error during read process, decrement counter
|
---|
| 9 | D LLCNT^HLCSTCP(HLDP,4,1)
|
---|
| 10 | ERROR ; Error trap
|
---|
| 11 | ; OPEN ERROR-retry.
|
---|
| 12 | ; WRITE ERROR (SERVER DISCONNECT)-close channel, retry
|
---|
| 13 | ;
|
---|
| 14 | ;**109**
|
---|
| 15 | ;I $G(HLMSG) L -^HLMA(HLMSG)
|
---|
| 16 | ;
|
---|
| 17 | S $ETRAP="D UNWIND^%ZTER"
|
---|
| 18 | ; patch HL*1.6*122
|
---|
| 19 | S HLTCPERR("$P")=$P
|
---|
| 20 | S HLTCPERR("ERR-$ZE")=$$EC^%ZOSV
|
---|
| 21 | ; I $$EC^%ZOSV["OPENERR"!($$EC^%ZOSV["NOTOPEN")!($$EC^%ZOSV["DEVNOTOPN") D CC^HLCSTCP2("Op-err") S:$G(HLPRIO)="I" HLERROR="15^Open Related Error" D UNWIND^%ZTER Q
|
---|
| 22 | I $$EC^%ZOSV["OPENERR"!($$EC^%ZOSV["NOTOPEN")!($$EC^%ZOSV["DEVNOTOPN") D Q
|
---|
| 23 | . D CC^HLCSTCP2("Op-err")
|
---|
| 24 | . S:$G(HLPRIO)="I" HLERROR="15^Open Related Error"
|
---|
| 25 | . D UNWIND^%ZTER
|
---|
| 26 | I $$EC^%ZOSV["WRITE" D Q ;HL*1.6*77 modifications start here
|
---|
| 27 | . D CC^HLCSTCP2("Wr-err")
|
---|
| 28 | . S:$G(HLPRIO)="I" HLERROR="108^Write Error"
|
---|
| 29 | . D UNWIND^%ZTER ;HL*1.6*77 modifications end here
|
---|
| 30 | ; I $$EC^%ZOSV["READ" D CC^HLCSTCP2("Rd-err") S:$G(HLPRIO)="I" HLERROR="108^Read Error" D UNWIND^%ZTER Q
|
---|
| 31 | I $$EC^%ZOSV["READ" D Q
|
---|
| 32 | . D CC^HLCSTCP2("Rd-err")
|
---|
| 33 | . S:$G(HLPRIO)="I" HLERROR="108^Read Error"
|
---|
| 34 | . D UNWIND^%ZTER
|
---|
| 35 | S HLCSOUT=1 D ^%ZTER,CC^HLCSTCP2("Error"),SDFLD^HLCSTCP
|
---|
| 36 | S:$G(HLPRIO)="I" HLERROR="9^Error"
|
---|
| 37 | D UNWIND^%ZTER
|
---|
| 38 | Q
|
---|
| 39 | ;
|
---|
| 40 | PROXY ; set DUZ for application proxy user
|
---|
| 41 | S HLDUZ=+$$APFIND^XUSAP("HLSEVEN,APPLICATION PROXY")
|
---|
| 42 | S DUZ=HLDUZ
|
---|
| 43 | D DUZ^XUP(DUZ)
|
---|
| 44 | Q
|
---|
| 45 | ;
|
---|
| 46 | HLDUZ ; compare DUZ and set DUZ to application proxy user
|
---|
| 47 | I '$G(HLDUZ) D PROXY
|
---|
| 48 | I $G(DUZ)'=HLDUZ D
|
---|
| 49 | . S DUZ=HLDUZ
|
---|
| 50 | . D DUZ^XUP(DUZ)
|
---|
| 51 | Q
|
---|
| 52 | ;
|
---|
| 53 | CLEANVAR ; clean variables for server, called from HLCSTCP1
|
---|
| 54 | ;
|
---|
| 55 | ; clean variables except Kernel related variables
|
---|
| 56 | ; protect variables defined in HLCSTCP
|
---|
| 57 | N HLDP
|
---|
| 58 | N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS
|
---|
| 59 | N HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL,HLZRULE
|
---|
| 60 | ;
|
---|
| 61 | ; protect variables defined in LISTEN^HLCSTCP
|
---|
| 62 | ; N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT
|
---|
| 63 | ; N HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL
|
---|
| 64 | N HLLSTN
|
---|
| 65 | ;
|
---|
| 66 | ; protect variables defined in CACHEVMS^HLCSTCP and EN^HLCSTCP
|
---|
| 67 | N %
|
---|
| 68 | ; protect variables defined in this routine HLCSTCP1
|
---|
| 69 | N $ETRAP,$ESTACK
|
---|
| 70 | N HLMIEN,HLASTMSG
|
---|
| 71 | N HLTMBUF
|
---|
| 72 | N HLDUZ,DUZ
|
---|
| 73 | ; Kernel variables for single listener
|
---|
| 74 | N ZISOS,ZRULE
|
---|
| 75 | ;
|
---|
| 76 | D KILL^XUSCLEAN
|
---|
| 77 | Q
|
---|
| 78 | MIEN ; sets HLIND1=ien in 773^ien in 772 for message
|
---|
| 79 | N HLMID,X
|
---|
| 80 | I HLIND1 D
|
---|
| 81 | . S:'$G(^HLMA(+HLIND1,0)) HLIND1=0
|
---|
| 82 | . S:'$G(^HL(772,+$P(HLIND1,U,2),0)) HLIND1=0
|
---|
| 83 | ;msg. id is 10th of MSH & 11th for BSH or FSH
|
---|
| 84 | S X=10+($E(HLMSG(1,0),1,3)'="MSH"),HLMID=$$PMSH(.HLMSG,X)
|
---|
| 85 | ;if HLIND1 is set, kill old message, use HLIND1 for new
|
---|
| 86 | ;message, it means we never got end block for 1st msg.
|
---|
| 87 | I HLIND1 D Q
|
---|
| 88 | . ;get pointer to 772, kill header
|
---|
| 89 | . K ^HLMA(+HLIND1,"MSH")
|
---|
| 90 | . I $D(^HL(772,+$P(HLIND1,U,2),"IN")) K ^("IN")
|
---|
| 91 | . S X=$$MAID^HLTF(+HLIND1,HLMID)
|
---|
| 92 | . D SAVE^HLCSTCP1(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")")
|
---|
| 93 | . S:$P(HLIND1,U,3) $P(HLIND1,U,3)=""
|
---|
| 94 | D TCP^HLTF(.HLMID,.X,.HLDT)
|
---|
| 95 | S HLBUFF("IEN773")=X
|
---|
| 96 | I 'X D Q
|
---|
| 97 | . ;error - record and reset array
|
---|
| 98 | . ;killing HLLSTN will allow MON^HLCSTCP to work with multi-server
|
---|
| 99 | . D CLEAN^HLCSTCP1 K HLLSTN
|
---|
| 100 | . ;error 100=LLP Could not Enqueue the Message, reset array
|
---|
| 101 | . D MONITOR^HLCSDR2(100,19,HLDP),MON^HLCSTCP("ERROR") H 30
|
---|
| 102 | ;HLIND1=ien in 773^ien in 772
|
---|
| 103 | S HLIND1=X_U_+$G(^HLMA(X,0))
|
---|
| 104 | S HLBUFF("HLIND1")=HLIND1
|
---|
| 105 | ;save MSH into 773
|
---|
| 106 | D SAVE^HLCSTCP1(.HLMSG,"^HLMA("_+HLIND1_",""MSH"")")
|
---|
| 107 | Q
|
---|
| 108 | ;
|
---|
| 109 | PMSH(MSH,P) ;get piece P from MSH array (passed by ref.)
|
---|
| 110 | N FS,I,L,L1,L2,X,Y
|
---|
| 111 | S FS=$E(MSH(1,0),4),(L2,Y)=0,X=""
|
---|
| 112 | F I=1:1 S L1=$L($G(MSH(I,0)),FS),L=L1+Y-1 D Q:$L(X)!'$D(MSH(I,0))
|
---|
| 113 | . S:L1=1 L=L+1
|
---|
| 114 | . S:P'>L X=$P($G(MSH(I-1,0)),FS,P-L2)_$P($G(MSH(I,0)),FS,(P-Y))
|
---|
| 115 | . S L2=Y,Y=L
|
---|
| 116 | Q X
|
---|
| 117 | ;
|
---|