1 | XOBVLL ;; mjk/alb - VistALink Listen and Spawn Code ; 07/27/2002 13:00
|
---|
2 | ;;1.5;VistALink;;Sep 09, 2005
|
---|
3 | ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026]
|
---|
4 | ;
|
---|
5 | QUIT
|
---|
6 | ;
|
---|
7 | ; ***deprecated*** tag ; Use START^XOBVTCP instead
|
---|
8 | START(SOCKET) ; -- start listener
|
---|
9 | DO START^XOBVTCP(SOCKET)
|
---|
10 | QUIT
|
---|
11 | ;
|
---|
12 | ; ***deprecated*** tag ; Use UCX^XOBVTCP instead
|
---|
13 | UCX ; -- VMS TCPIP (UCX) multi-thread entry point
|
---|
14 | ; -- Called from VistALink .com files
|
---|
15 | GOTO UCX^XOBVTCP
|
---|
16 | ;
|
---|
17 | SPAWN ; -- spawned process
|
---|
18 | NEW X,XOBSTOP,XOBPORT,XOBHDLR,XOBLASTR
|
---|
19 | ;
|
---|
20 | SET XOBSTOP=0
|
---|
21 | SET XOBPORT=IO
|
---|
22 | SET U="^"
|
---|
23 | ;
|
---|
24 | ; -- initialize timestamp for last time request made (used for debugging)
|
---|
25 | SET XOBLASTR=0
|
---|
26 | ;
|
---|
27 | ; -- set error trap
|
---|
28 | ;Set up the error trap
|
---|
29 | SET $ETRAP="DO ^%ZTER HALT"
|
---|
30 | ;
|
---|
31 | ; -- attempt to share the license; must have TCP port open first
|
---|
32 | USE XOBPORT IF $TEXT(SHARELIC^%ZOSV)'="" DO SHARELIC^%ZOSV(1)
|
---|
33 | ;
|
---|
34 | ; -- start RUM for VistALink Handler
|
---|
35 | DO LOGRSRC^%ZOSV("$VISTALINK HANDLER$",2,1)
|
---|
36 | ;
|
---|
37 | ; -- cache/initialize startup request handlers
|
---|
38 | SET X=$$CACHE^XOBVRH(.XOBHDLR)
|
---|
39 | IF 'X DO RMERR^XOBVRM(184001,$PIECE(X,U,2)) QUIT
|
---|
40 | ;
|
---|
41 | ; -- initialize tcp processing variables
|
---|
42 | DO INIT^XOBVSKT
|
---|
43 | ;
|
---|
44 | ; -- change job name if possible
|
---|
45 | DO SETNM^%ZOSV("VLink_"_$$CNV^XLFUTL($J,16))
|
---|
46 | ;
|
---|
47 | ; -- loop until told to stop
|
---|
48 | FOR DO NXTCALL QUIT:XOBSTOP
|
---|
49 | ;
|
---|
50 | ; -- final/clean tcp processing variables
|
---|
51 | DO FINAL^XOBVSKT
|
---|
52 | ;
|
---|
53 | ; -- stop RUM for VistALink Handler
|
---|
54 | DO LOGRSRC^%ZOSV("$VISTALINK HANDLER$",2,2)
|
---|
55 | ;
|
---|
56 | QUIT
|
---|
57 | ;
|
---|
58 | NXTCALL ; -- do next call
|
---|
59 | NEW X,XOBROOT,XOBREAD,XOBTO,XOBFIRST,XOBOK,XOBRL,XOBDATA
|
---|
60 | ;
|
---|
61 | ; -- set up error trap
|
---|
62 | NEW $ESTACK SET $ETRAP="DO SYSERR^XOBVLL"
|
---|
63 | ;
|
---|
64 | ; -- setup environment variables
|
---|
65 | NEW DIQUIET SET DIQUIET=1
|
---|
66 | SET U="^",DTIME=$GET(DTIME,900),DT=$$DT^XLFDT()
|
---|
67 | ;
|
---|
68 | ; -- initialize 'current' request handler to empty string
|
---|
69 | SET XOBHDLR=""
|
---|
70 | ;
|
---|
71 | ; -- # of chars to get on first read / read 11 for Broker initial read
|
---|
72 | SET XOBREAD=11
|
---|
73 | ;
|
---|
74 | ; -- get J2SE heartbet rate for timeout plus network latency factor
|
---|
75 | SET XOBTO=$$GETRATE^XOBVLIB()+$$GETDELTA^XOBVLIB()
|
---|
76 | ;
|
---|
77 | ; -- get J2EE timeout value for app serv environment
|
---|
78 | IF $GET(XOBSYS("ENV"))="j2ee" SET XOBTO=$$GETASTO^XOBVLIB()
|
---|
79 | ;
|
---|
80 | ; -- set first read flag
|
---|
81 | SET XOBFIRST=1
|
---|
82 | ;
|
---|
83 | ; -- setup intake global
|
---|
84 | SET XOBROOT=$NAME(^TMP("XOBVLL",$JOB))
|
---|
85 | KILL @XOBROOT
|
---|
86 | ;
|
---|
87 | ; -- read from socket port
|
---|
88 | USE XOBPORT
|
---|
89 | SET XOBOK=$$READ^XOBVSKT(XOBROOT,.XOBREAD,.XOBTO,.XOBFIRST,.XOBSTOP,.XOBDATA,.XOBHDLR)
|
---|
90 | ;
|
---|
91 | ; -- timed out ; cleanup user and exit
|
---|
92 | IF 'XOBOK!(XOBSTOP) DO GOTO NXTCALLQ
|
---|
93 | . IF $GET(DUZ) DO CLEAN^XOBSCAV1
|
---|
94 | . SET XOBSTOP=1
|
---|
95 | ;
|
---|
96 | ; -- need null device
|
---|
97 | IF '$DATA(XOBNULL) DO ERROR(181002,$$EZBLD^DIALOG(181002),XOBPORT) SET XOBSTOP=1 GOTO NXTCALLQ
|
---|
98 | ;
|
---|
99 | ; -- call request manager
|
---|
100 | SET XOBOK=$$EN^XOBVRM(XOBROOT,.XOBDATA,.XOBHDLR)
|
---|
101 | ; -- timestamp last time request made
|
---|
102 | SET XOBLASTR=$$NOW^XLFDT()
|
---|
103 | ; -- cleanup intake global
|
---|
104 | KILL @XOBROOT
|
---|
105 | ;
|
---|
106 | NXTCALLQ ; -- exit
|
---|
107 | QUIT
|
---|
108 | ;
|
---|
109 | ; ----------------------------------------------------------------------------------
|
---|
110 | ; System Error Handler
|
---|
111 | ; ----------------------------------------------------------------------------------
|
---|
112 | SYSERR ; -- send system error message
|
---|
113 | ; -- If we get an error in the error handler just Halt
|
---|
114 | SET $ETRAP="D ^%ZTER HALT"
|
---|
115 | ;
|
---|
116 | DO ERROR(181001,$$EZBLD^DIALOG(181001,$$EC^%ZOSV),XOBPORT) ; -- Get the error code
|
---|
117 | QUIT
|
---|
118 | ;
|
---|
119 | ERROR(XOBEC,XOBMSG,XOBPORT) ; -- send error message
|
---|
120 | NEW XOBDAT
|
---|
121 | ;
|
---|
122 | ; -- If we get an error in the error handler just Halt
|
---|
123 | SET $ETRAP="D ^%ZTER HALT"
|
---|
124 | ;
|
---|
125 | ; -- set up error info
|
---|
126 | SET XOBDAT("MESSAGE TYPE")=3
|
---|
127 | SET XOBDAT("ERRORS",1,"CODE")=XOBEC
|
---|
128 | SET XOBDAT("ERRORS",1,"ERROR TYPE")="system"
|
---|
129 | SET XOBDAT("ERRORS",1,"FAULT STRING")="System Error"
|
---|
130 | SET XOBDAT("ERRORS",1,"CDATA")=1
|
---|
131 | SET XOBDAT("ERRORS",1,"MESSAGE",1)=XOBMSG
|
---|
132 | ;
|
---|
133 | ; -- if serious error, save error info, logout, and halt
|
---|
134 | IF XOBMSG["<READ>"!(XOBMSG["<WRITE>")!(XOBMSG["<SYSTEM>")!(XOBMSG["READERR")!(XOBMSG["WRITERR")!(XOBMSG["SYSERR") DO HALT
|
---|
135 | . DO ^%ZTER
|
---|
136 | . IF $GET(DUZ) DO CLEAN^XOBSCAV1
|
---|
137 | ;
|
---|
138 | ; -- send error back to client
|
---|
139 | USE XOBPORT
|
---|
140 | DO ERROR^XOBVLIB(.XOBDAT)
|
---|
141 | ;
|
---|
142 | ; -- just quit if no slots are available or logins are disabled
|
---|
143 | IF (XOBEC=181003)!(XOBEC=181004) QUIT
|
---|
144 | ;
|
---|
145 | ; -- need to make sure any locks are released since code aborted ungracefully
|
---|
146 | LOCK
|
---|
147 | ;
|
---|
148 | ; -- Save off the error
|
---|
149 | DO ^%ZTER
|
---|
150 | ;
|
---|
151 | ; -- go back to listening
|
---|
152 | SET $ETRAP="Q:($ESTACK&'$QUIT) Q:$ESTACK -9 S $ECODE="""" DO KILL^XOBVLL G NXTCALLQ^XOBVLL",$ECODE=",U99,"
|
---|
153 | QUIT
|
---|
154 | ;
|
---|
155 | KILL ; -- new VistALink variables and then do big KILL
|
---|
156 | NEW XOBPORT,XOBSTOP,XOBNULL,XOBOS,XOBSYS,XOBHDLR,XOBOK
|
---|
157 | DO KILL^XUSCLEAN
|
---|
158 | QUIT
|
---|
159 | ;
|
---|