| 1 | HLCSTCP3 ;SFIRMFO/RSD - BI-DIRECTIONAL TCP ; 09/13/2006  15:36 | 
|---|
| 2 | ;;1.6;HEALTH LEVEL SEVEN;**76,77,133,122**;OCT 13, 1995;Build 14 | 
|---|
| 3 | ;Per VHA Directive 2004-038, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | OPENA ; | 
|---|
| 6 | ; called from $$OPEN^HLCSTCP2 and this sub-routine OPENA | 
|---|
| 7 | ; | 
|---|
| 8 | I $G(HLMSG),$D(^HLMA(HLMSG,"P")) S HLPORTA=+$P(^("P"),U,6) | 
|---|
| 9 | S POP=1 | 
|---|
| 10 | ; | 
|---|
| 11 | ; patch HL*1.6*122 start | 
|---|
| 12 | ; variable HLDRETR=re-transmit attemps (#870,200.02) | 
|---|
| 13 | ; variable HLTCPLNK("TIMEOUT")=timeout for 3rd parameter of CALL^%ZISTCP() | 
|---|
| 14 | ; defined in HLCSTCP routine | 
|---|
| 15 | ; | 
|---|
| 16 | I '$G(HLDRETR("COUNT")) S HLDRETR("COUNT")=1 | 
|---|
| 17 | I '$G(HLTCPLNK("TIMEOUT")) S HLTCPLNK("TIMEOUT")=5 | 
|---|
| 18 | S HLDRETR("COUNT-2")=HLDRETR("COUNT")+HLDRETR | 
|---|
| 19 | ; patch 133 | 
|---|
| 20 | ; I $G(HLDIRECT("OPEN TIMEOUT")) D | 
|---|
| 21 | ; .S HLI=1 | 
|---|
| 22 | ; .D CALL^%ZISTCP(HLTCPADD,HLTCPORT,HLDIRECT("OPEN TIMEOUT")) | 
|---|
| 23 | ; E  D | 
|---|
| 24 | ; .F HLI=1:1:HLDRETR D CALL^%ZISTCP(HLTCPADD,HLTCPORT) Q:'POP | 
|---|
| 25 | I $G(HLDIRECT("OPEN TIMEOUT")) D | 
|---|
| 26 | . D MON^HLCSTCP("Open") | 
|---|
| 27 | . D CALL^%ZISTCP(HLTCPADD,HLTCPORT,HLDIRECT("OPEN TIMEOUT")) | 
|---|
| 28 | . ; give site one more chance to override the application setup | 
|---|
| 29 | . I $G(POP),(HLTCPLNK("TIMEOUT")>HLDIRECT("OPEN TIMEOUT")) D | 
|---|
| 30 | .. D CALL^%ZISTCP(HLTCPADD,HLTCPORT,HLTCPLNK("TIMEOUT")) | 
|---|
| 31 | E  D | 
|---|
| 32 | . N COUNT | 
|---|
| 33 | . ; try to connect HLDRETR times | 
|---|
| 34 | . F HLDRETR("COUNT")=HLDRETR("COUNT"):1:HLDRETR("COUNT-2") D  Q:('POP)!($$STOP^HLCSTCP) | 
|---|
| 35 | .. D MON^HLCSTCP("Open") | 
|---|
| 36 | .. ; D CALL^%ZISTCP(HLTCPADD,HLTCPORT) | 
|---|
| 37 | .. D CALL^%ZISTCP(HLTCPADD,HLTCPORT,HLTCPLNK("TIMEOUT")) | 
|---|
| 38 | .. ;open error | 
|---|
| 39 | .. I POP D | 
|---|
| 40 | ... D CC^HLCSTCP2("Openfail") | 
|---|
| 41 | ... H $S(HLDRETR("COUNT")=1:0,HLDRETR("COUNT")<10:1,1:8) | 
|---|
| 42 | ... I '$D(^XTMP("HL7-Openfail",$J)) D | 
|---|
| 43 | .... S ^XTMP("HL7-Openfail",0)=$$FMADD^XLFDT($$NOW^XLFDT,3)_"^"_$$NOW^XLFDT | 
|---|
| 44 | .... S ^XTMP("HL7-Openfail",$J,"COUNT","FIRST")=HLDRETR("COUNT")_"^"_$$NOW^XLFDT | 
|---|
| 45 | ... S COUNT=$P($G(^XTMP("HL7-Openfail",$J,"COUNT","LAST")),"^")+1 | 
|---|
| 46 | ... S ^XTMP("HL7-Openfail",$J,"COUNT","LAST")=COUNT_"^"_$$NOW^XLFDT | 
|---|
| 47 | ; | 
|---|
| 48 | ;set # of opens back in msg | 
|---|
| 49 | ; I $G(HLMSG),$D(^HLMA(HLMSG,"P")) S $P(^("P"),U,6)=HLPORTA+HLI | 
|---|
| 50 | I $G(HLMSG),$D(^HLMA(HLMSG,"P")) S $P(^("P"),U,6)=HLDRETR("COUNT") | 
|---|
| 51 | ; patch HL*1.6*122 end | 
|---|
| 52 | ; | 
|---|
| 53 | ;device open | 
|---|
| 54 | I 'POP S HLPORT=IO D  Q $S($G(HLERROR)]"":0,1:1) | 
|---|
| 55 | . N $ETRAP,$ESTACK S $ETRAP="D ERROR^HLCSTCP2" ;HL*1.6*77 | 
|---|
| 56 | . ;if address came from DNS, set back into LL | 
|---|
| 57 | . I $D(HLIP) S $P(^HLCS(870,HLDP,400),U)=HLTCPADD | 
|---|
| 58 | . ; write and read to check if still open | 
|---|
| 59 | . Q:HLOS'["OpenM"  X "U IO:(::""-M"")" ; must be Cache/NT + use packet mode | 
|---|
| 60 | . Q:$P(^HLCS(870,HLDP,400),U,7)'="Y"  ; must want to SAY HELO | 
|---|
| 61 | . U IO W "HELO "_$$KSP^XUPARAM("WHERE"),! R X:1 | 
|---|
| 62 | ;openfail-try DNS lookup | 
|---|
| 63 | ; | 
|---|
| 64 | ; patch HL*1.6*122 start | 
|---|
| 65 | ;I '$D(HLDOM) S HLDOM=+$P(^HLCS(870,HLDP,0),U,7),HLDOM=$P($G(^DIC(4.2,HLDOM,0)),U) D:HLDOM]"" DNS | 
|---|
| 66 | I '$D(HLDOM) D | 
|---|
| 67 | . S HLDOM=+$P(^HLCS(870,HLDP,0),U,7),HLDOM=$P($G(^DIC(4.2,HLDOM,0)),U) | 
|---|
| 68 | . S HLDOM("DNS")=$P($G(^HLCS(870,+$G(HLDP),0)),"^",8) | 
|---|
| 69 | . D:HLDOM]""!($L(HLDOM("DNS"),".")>2) DNS | 
|---|
| 70 | ; | 
|---|
| 71 | Q:$$STOP^HLCSTCP 0 | 
|---|
| 72 | ;HLIP=ip add. from DNS call, get first one and try open again | 
|---|
| 73 | I $D(HLIP) S HLTCPADD=$P(HLIP,","),HLIP=$P(HLIP,",",2,99) G:HLTCPADD OPENA | 
|---|
| 74 | ; open error | 
|---|
| 75 | ;cleanup and close | 
|---|
| 76 | ; patch 133 | 
|---|
| 77 | I $G(HLDIRECT("OPEN TIMEOUT")) D | 
|---|
| 78 | . D MON^HLCSTCP("Openfail") | 
|---|
| 79 | . I $D(HLPORT) D CLOSE^%ZISTCP K HLPORT | 
|---|
| 80 | E  D | 
|---|
| 81 | . D CC^HLCSTCP2("Openfail") | 
|---|
| 82 | Q 0 | 
|---|
| 83 | ; patch HL*1.6*122 end | 
|---|
| 84 | ; | 
|---|
| 85 | ; | 
|---|
| 86 | ;following code was removed, site's complained of to many alerts | 
|---|
| 87 | ;couldn't open, send 1 alert | 
|---|
| 88 | ;I '$G(HLPORTA) D | 
|---|
| 89 | ;. ;send alert | 
|---|
| 90 | ;. N XQA,XQAMSG,XQAOPT,XQAROU,XQAID,Z | 
|---|
| 91 | ;. ;get mailgroup from file 869.3 | 
|---|
| 92 | ;. S Z=$P($$PARAM^HLCS2,U,8),HLPORTA="" Q:Z="" | 
|---|
| 93 | ;. S XQA("G."_Z)="",XQAMSG=$$HTE^XLFDT($H,2)_" Logical Link "_$P(^HLCS(870,HLDP,0),U)_" exceeded Open Retries." | 
|---|
| 94 | ;. D SETUP^XQALERT | 
|---|
| 95 | ;open error | 
|---|
| 96 | ;D CC("Openfail") H 3 | 
|---|
| 97 | ;Q 0 | 
|---|
| 98 | ; | 
|---|
| 99 | ; | 
|---|
| 100 | DNS ;VA domains must have "med" inserted. | 
|---|
| 101 | ;All domains must use port 5000 and are prepended with "HL7" | 
|---|
| 102 | ;non-VA DNS lookups will succeed if site uses port 5000 and | 
|---|
| 103 | ;configure their local DNS with "HL7.yourdomain.com" and entries | 
|---|
| 104 | ;are created in the logical link file and domain file. | 
|---|
| 105 | D MON^HLCSTCP("DNS Lkup") | 
|---|
| 106 | I HLDOM["VA.GOV"&(HLDOM'[".MED.") S HLDOM=$P(HLDOM,".VA.GOV")_".MED.VA.GOV" | 
|---|
| 107 | I HLTCPORT=5000 S HLDOM="HL7."_HLDOM | 
|---|
| 108 | I HLTCPORT=5500 S HLDOM="MPI."_HLDOM | 
|---|
| 109 | ; | 
|---|
| 110 | ; patch HL*1.6*122 start | 
|---|
| 111 | I $L($G(HLDOM("DNS")),".")>2 D | 
|---|
| 112 | . S HLDOM=HLDOM("DNS") | 
|---|
| 113 | ; patch HL*1.6*122 end | 
|---|
| 114 | ; | 
|---|
| 115 | S HLIP=$$ADDRESS^XLFNSLK(HLDOM) | 
|---|
| 116 | K:HLIP="" HLIP | 
|---|
| 117 | Q | 
|---|
| 118 | ; | 
|---|