Changeset 636 for FOIAVistA/tag/r/HEALTH_LEVEL_SEVEN-HL/HLCSTCP.m
- Timestamp:
- Dec 4, 2009, 8:26:01 PM (14 years ago)
- Location:
- FOIAVistA/tag/r
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
FOIAVistA/tag/r/HEALTH_LEVEL_SEVEN-HL/HLCSTCP.m
r628 r636 1 HLCSTCP ;SFIRMFO/TNV-ALB/JFP,PKE - (TCP/IP) MLLP ;09/1 9/2007 10:212 ;;1.6;HEALTH LEVEL SEVEN;**19,43,49,57,58,64,84,109,133 ,122**;Oct 13, 1995;Build 141 HLCSTCP ;SFIRMFO/TNV-ALB/JFP,PKE - (TCP/IP) MLLP ;09/13/2006 2 ;;1.6;HEALTH LEVEL SEVEN;**19,43,49,57,58,64,84,109,133**;Oct 13, 1995;Build 13 3 3 ;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 4 ; 5 5 ; This is an implementation of the HL7 Minimal Lower Layer Protocol 6 ; taskman entry/startup option, HLDP defined in menu entry.7 ; 6 ; 7 ;taskman entry/startup option, HLDP defined in menu entry, 8 8 Q:'$D(HLDP) 9 ; patch HL*1.6*122 start 10 L +^HLCS("HLTCPLINK",HLDP):5 I '$T D Q 11 . D MON^HLCSTCP("TskLcked") 12 N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET 13 N HLZRULE 9 N HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL 14 10 ;HLCSOUT= 1-error 15 11 I '$$INIT D EXITS("Init Error") Q 16 S HLDP("$J")=$J17 S HLDP("$J",0,"LENGTH")=$L(HLDP("$J"))18 12 ; Start the client 19 13 I $G(HLTCPCS)="C" D Q 20 . S HLDP("$J",0,"START")=HLDP("$J",0,"LENGTH")-8+$L(HLTCPORT)+$L(HLDP)21 . I HLDP("$J",0,"START")<1 S HLDP("$J",0,"START")=122 . S HLDP("$J",0)=$E(HLDP("$J"),HLDP("$J",0,"START"),HLDP("$J",0,"LENGTH"))23 14 . ; identify process for ^%SY 24 . ; D SETNM^%ZOSV($E("HLClnt:"_HLDP,1,15)) 25 . D SETNM^%ZOSV($E("HLc:"_HLTCPORT_"-"_HLDP_"-"_HLDP("$J",0),1,15)) 26 . K HLDP("$J",0) 15 . D SETNM^%ZOSV($E("HLClnt:"_HLDP,1,15)) 27 16 . D ST1 28 17 . F D ^HLCSTCP2 Q:$$STOP!$G(HLCSOUT) 29 . ; I $G(HLCSOUT)=1 D MON("Error") H 1 Q 30 . I $G(HLCSOUT)=1 D Q 31 .. D MON("Error") H 1 32 .. L -^HLCS("HLTCPLINK",HLDP) 18 . I $G(HLCSOUT)=1 D MON("Error") H 1 Q 33 19 . I $G(HLCSOUT)=2 D EXITS("Inactive") Q 34 20 . D EXITS("Shutdown") 35 21 ; 36 S HLDP("$J",0,"START")=HLDP("$J",0,"LENGTH")-9+$L(HLTCPORT)37 I HLDP("$J",0,"START")<1 S HLDP("$J",0,"START")=138 S HLDP("$J",0)=$E(HLDP("$J"),HLDP("$J",0,"START"),HLDP("$J",0,"LENGTH"))39 22 ; identify process for ^%SY 40 ; D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15)) 41 D SETNM^%ZOSV($E("HLs:"_HLTCPORT_"-"_HLDP("$J",0),1,15)) 42 K HLDP("$J",0) 43 ; to stop the listener via updated Kernel API, need to pass the 44 ; listener logical link (HLDP) 45 S HLZRULE="S HLDP="_HLDP_" S ZISQUIT=$$STOP^HLCSTCP" 23 D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15)) 24 ;HLCSFAIL=1 port failed to open 25 S HLCSFAIL=1 46 26 ;single threaded listener 47 27 I $G(HLTCPCS)="S" D Q 48 . D ST1,MON("Listen"),LISTEN^%ZISTCP(HLTCPORT,"SERVER^HLCSTCP("""_HLDP_""")",HLZRULE) 49 . I $$STOP D EXITS("Shutdown") Q 50 . D EXITS("Openfail") 51 ; 52 ;multi-threaded listener (for OpenM/NT) 53 I ($G(HLTCPCS)'="M")!(^%ZOSF("OS")'["OpenM") D Q 54 . L -^HLCS("HLTCPLINK",HLDP) 55 I $$OS^%ZOSV["VMS" L -^HLCS("HLTCPLINK",HLDP) Q 56 D ST1,MON("Listen"),LISTEN^%ZISTCPS(HLTCPORT,"SERVERS^HLCSTCP("""_HLDP_""")",HLZRULE) 57 ; update status of listener 58 I $$STOP D EXITS("Shutdown") Q 59 D EXITS("Openfail") 60 ; HL*1.6*122 end 28 . D ST1,MON("Listen"),LISTEN^%ZISTCP(HLTCPORT,"SERVER^HLCSTCP("""_HLDP_""")") 29 . ;couldn't open listener port 30 . I HLCSFAIL D EXITS("Openfail") Q 31 ; 32 ;multi-threaded listener (OpenM) 33 I $G(HLTCPCS)="M",^%ZOSF("OS")["OpenM" D Q 34 . D ST1,MON("Listen"),LISTEN^%ZISTCPS(HLTCPORT,"SERVERS^HLCSTCP("""_HLDP_""")") 61 35 Q 62 36 ; 63 37 SERVER(HLDP) ; single server using Taskman 38 S HLCSFAIL=0 64 39 I '$$INIT D EXITS("Init error") Q 65 40 D ^HLCSTCP1 … … 80 55 G LISTEN 81 56 ; 57 CACHEVMS(%) ;Cache'/VMS tcpip/ucx entry point, called from HLSEVEN.COM file, 58 ;listener, % = HLDP 59 I $G(%)="" D ^%ZTER Q 60 S IO="SYS$NET",HLDP=% 61 S IO(0)="_NLA0:" O IO(0) ;Setup null device 62 ; **Cache'/VMS specific code** 63 O IO::5 E D MON("Openfail") Q 64 X "U IO:(::""-M"")" ;Packet mode like DSM 65 D LISTEN C IO Q 66 ; 67 EN ;vms ucx entry point, called from HLSEVEN.COM file, 68 ;listener, % = device^HLDP 69 I $G(%)="" D ^%ZTER Q 70 S IO="SYS$NET",U="^",HLDP=$P(%,U,2) 71 S IO(0)="_NLA0:" O IO(0) ;Setup null device 72 ; **VMS specific code, need to share device** 73 O IO:(TCPDEV):60 E D MON("Openfail") Q 82 74 LISTEN ; 83 N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET 75 N HLLSTN,HLCSOUT,HLDBACK,HLDBSIZE,HLDREAD,HLDRETR,HLRETRA,HLDWAIT,HLOS,HLTCPADD,HLTCPCS,HLTCPLNK,HLTCPORT,HLTCPRET,HLCSFAIL 84 76 I '$$INIT D ^%ZTER Q 85 ; patch HL*1.6*122 start86 S HLDP("$J")=$J87 S HLDP("$J",0,"LENGTH")=$L(HLDP("$J"))88 S HLDP("$J",0,"START")=HLDP("$J",0,"LENGTH")-9+$L(HLTCPORT)89 I HLDP("$J",0,"START")<1 S HLDP("$J",0,"START")=190 S HLDP("$J",0)=$E(HLDP("$J"),HLDP("$J",0,"START"),HLDP("$J",0,"LENGTH"))91 77 ; identify process for ^%SY 92 ; D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15)) 93 D SETNM^%ZOSV($E("HLs:"_HLTCPORT_"-"_HLDP("$J",0),1,15)) 94 K HLDP("$J",0) 95 ; patch HL*1.6*122 end 78 D SETNM^%ZOSV($E("HLSrv:"_HLDP,1,15)) 96 79 ;HLLSTN used to identify a listener to tag MON 97 80 S HLLSTN=1 … … 110 93 S HLOS=$P($G(^%ZOSF("OS")),"^") 111 94 N DA,DIQUIET,DR,TMP,X,Y 112 S IOF=$$FLUSHCHR^%ZISTCP ; HL*1.6*122 set device flush character113 95 S DIQUIET=1 114 96 D DT^DICRW 115 97 I 'HLDP S HLDP=$O(^HLCS(870,"B",HLDP,0)) I 'HLDP Q 0 116 98 S DA=HLDP 117 ; patch HL*1.6*122 for field 400.09 118 S DR="200.02;200.021;200.022;200.03;200.04;200.05;200.09;400.01;400.02;400.03;400.04;400.05;400.09" 99 S DR="200.02;200.021;200.022;200.03;200.04;200.05;200.09;400.01;400.02;400.03;400.04;400.05" 119 100 D GETS^DIQ(870,DA,DR,"IN","TMP","TMP") 120 101 ; … … 144 125 S HLTCPRET=$G(TMP(870,DA_",",400.05,"I")) 145 126 ; 146 ; patch HL*1.6*122 for field 400.09147 ; -- tcp/ip openfail timeout148 S HLTCPLNK("TIMEOUT")=$G(TMP(870,DA_",",400.09,"I"))149 ;150 127 ; -- set defaults in case something's not set 151 128 S:HLDREAD=0 HLDREAD=10 152 129 S:HLDBACK=0 HLDBACK=60 153 ; patch HL*1.6*122 154 ; S:HLDBSIZE=0 HLDBSIZE=245 155 S:HLDBSIZE<245 HLDBSIZE=245 130 S:HLDBSIZE=0 HLDBSIZE=245 156 131 S:HLDRETR=0 HLDRETR=5 157 132 S:HLTCPRET="" X=$P($$PARAM^HLCS2,U,12),HLTCPRET=$S(X:X,1:15) 158 ;159 ; patch HL*1.6*122 for field 400.09160 S:HLTCPLNK("TIMEOUT")=0 HLTCPLNK("TIMEOUT")=5161 133 ; 162 134 Q 1 … … 166 138 ;14=Shutdown LLP, 3=LLP Online, 18=Gross Errors 167 139 N HLJ,X 168 ; HL*1.6*122 remove unnecessary locks 169 ;F L +^HLCS(870,HLDP,0):2 Q:$T 140 F L +^HLCS(870,HLDP,0):2 Q:$T 170 141 S X="HLJ(870,"""_HLDP_","")" 171 142 S @X@(4)="Init",(@X@(10),@X@(18))="@",@X@(14)=0 … … 175 146 S:$G(ZTSK) @X@(11)=ZTSK 176 147 D FILE^HLDIE("","HLJ","","ST1","HLCSTCP") ;HL*1.6*109 177 ;L -^HLCS(870,HLDP,0)148 L -^HLCS(870,HLDP,0) 178 149 Q 179 150 ; … … 181 152 ;don't display for multiple server 182 153 Q:$G(HLLSTN) 183 ; HL*1.6*122 remove unnecessary locks 184 ;F L +^HLCS(870,HLDP,0):2 Q:$T 154 F L +^HLCS(870,HLDP,0):2 Q:$T 185 155 S $P(^HLCS(870,HLDP,0),U,5)=Y 186 ;L -^HLCS(870,HLDP,0)156 L -^HLCS(870,HLDP,0) 187 157 Q:'$D(HLTRACE) 188 158 N X U IO(0) 189 159 W !,"IN State: ",Y 190 160 I '$$STOP D 191 . ; patch HL*1.6*122 192 . ; R !,"Type Q to Quit: ",X#1:1 193 . R !,"Type Q to Quit: ",X:1 194 . ; I $L(X),"Qq"[X S $P(^HLCS(870,HLDP,0),U,15)=1 195 . I $L(X),"Qq"[$E(X) S $P(^HLCS(870,HLDP,0),U,15)=1 196 . ; patch HL*1.6*122 end 161 . R !,"Type Q to Quit: ",X#1:1 162 . I $L(X),"Qq"[X S $P(^HLCS(870,HLDP,0),U,15)=1 197 163 U IO 198 164 Q 199 165 UPDT(Y) ;update job count for multiple servers,X=1 increment 200 166 N HLJ,X 201 ; 202 ; HL*1.6*122 start 203 ; F L +^HLCS(870,HLDP,0):2 Q:$T 204 Q:'$G(HLDP) 205 Q:'$D(^HLCS(870,"E","M",HLDP)) 206 F L +^HLCS(870,HLDP,0):10 Q:$T H 1 207 ; S X=+$P(^HLCS(870,HLDP,0),U,5),$P(^(0),U,5)=$S(Y:X+1,1:X-1)_" server" 208 S X=+$P(^HLCS(870,HLDP,0),U,5) 209 I X<0 S X=0 210 S $P(^HLCS(870,HLDP,0),U,5)=$S(Y:(X+1),X<1:0,1:X-1)_" server" 167 F L +^HLCS(870,HLDP,0):2 Q:$T 168 S X=+$P(^HLCS(870,HLDP,0),U,5),$P(^(0),U,5)=$S(Y:X+1,1:X-1)_" server" 211 169 ;if incrementing, set the Device Type field to Multi-Server 212 ; I X S HLJ(870,HLDP_",",3)="MS" D FILE^HLDIE("","HLJ","","UPDT","HLCSTCP") 213 I $P(^HLCS(870,HLDP,0),"^",4)']"" S $P(^HLCS(870,HLDP,0),"^",4)="MS" 214 ; HL*1.6*122 end 215 ; 170 I X S HLJ(870,HLDP_",",3)="MS" D FILE^HLDIE("","HLJ","","UPDT","HLCSTCP") ;HL*1.6*109 216 171 L -^HLCS(870,HLDP,0) 217 172 Q … … 230 185 N P,X 231 186 S P=$S(Y<3:"IN",1:"OUT")_" QUEUE "_$S(Y#2:"BACK",1:"FRONT")_" POINTER" 232 ; patch HL*1.6*122 start 233 ; F L +^HLCS(870,DP,P):2 Q:$T 234 ; S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1) 235 I '$L($G(OS)) N OS S OS=$G(^%ZOSF("OS")) 236 I OS'["DSM",OS'["OpenM" D 237 . F L +^HLCS(870,DP,P):10 Q:$T H 1 238 . S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1) 239 . L -^HLCS(870,DP,P) 240 E D 241 . S X=$I(^HLCS(870,DP,P),$S($G(Z):-1,1:1)) 242 ; L -^HLCS(870,DP,P) 243 ; patch HL*1.6*122 end 187 F L +^HLCS(870,DP,P):2 Q:$T 188 S X=+$G(^HLCS(870,DP,P)),^(P)=X+$S($G(Z):-1,1:1) 189 L -^HLCS(870,DP,P) 244 190 Q 245 191 SDFLD ; set Shutdown? field to yes 246 192 Q:'$G(HLDP) 247 ; HL*1.6*122 remove unnecessary lock and call to FM 248 S $P(^HLCS(870,HLDP,0),U,15)=1 249 ;N HLJ,X 250 ;F L +^HLCS(870,HLDP,0):2 Q:$T 193 N HLJ,X 194 F L +^HLCS(870,HLDP,0):2 Q:$T 251 195 ;14=Shutdown LLP? 252 ;S HLJ(870,HLDP_",",14)=1 253 ;D FILE^HLDIE("","HLJ","","SDFLD","HLCSTCP") ;HL*1.6*109 254 ;L -^HLCS(870,HLDP,0) 255 Q 256 ; 257 EXITS(Y) ; shutdown and clean up the listener process for either 258 ; single-threaded or multi-threaded 196 S HLJ(870,HLDP_",",14)=1 197 D FILE^HLDIE("","HLJ","","SDFLD","HLCSTCP") ;HL*1.6*109 198 L -^HLCS(870,HLDP,0) 199 Q 200 ; 201 EXITS(Y) ; Single service shutdown and cleans up 259 202 N HLJ,X 260 203 F L +^HLCS(870,HLDP,0):2 Q:$T … … 266 209 L -^HLCS(870,HLDP,0) 267 210 I $D(ZTQUEUED) S ZTREQ="@" 268 ; HL*1.6*122269 L -^HLCS("HLTCPLINK",HLDP)270 211 Q 271 212 ; 272 213 EXITM ;Multiple service shutdown and clean up 273 ; shutdown and clean up a connection spawned by the listener274 ; process for a multi-threaded listener275 214 D UPDT(0) 276 215 I $D(ZTQUEUED) S ZTREQ="@"
Note:
See TracChangeset
for help on using the changeset viewer.