| 1 | XWBVLL ;OIFO-Oakland/REM - M2M Broker Listener  ;06/08/2005  10:48
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**28,41,34**;Mar 28, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  QUIT
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;p41 - fixed infinite loop bug in SYSERR.
 | 
|---|
| 7 |  ;    - new Cache/VMS tcpip entry point, called from XWBSERVER_START.COM file.
 | 
|---|
| 8 |  ;p34 - added "BrokerM2M" in message type - SYSERR.
 | 
|---|
| 9 |  ;    - removed the quotes (") after 'M:' - SYSERRS.
 | 
|---|
| 10 |  ;    - new entry point to job off the listener for Cashe- STRT^XWBVLL(PORT).
 | 
|---|
| 11 |  ;    - clear locks when error occurs - SYSERR.
 | 
|---|
| 12 |  ;    - halt for read/write errors - SYSERR
 | 
|---|
| 13 |  ; 
 | 
|---|
| 14 | START(SOCKET) ;Entry point for Cache/NT
 | 
|---|
| 15 |  ;May be called directly to start the listener.
 | 
|---|
| 16 |  ;SOCKET -is the port# to start the listener on.
 | 
|---|
| 17 |  I ^%ZOSF("OS")'["OpenM" Q  ;Quits if not a Cache OS.
 | 
|---|
| 18 |  D LISTEN^%ZISTCPS(SOCKET,"SPAWN^XWBVLL")
 | 
|---|
| 19 |  Q
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 | UCX ;DMS/VMS UCX entry point, called from XWBSERVER_START.COM file,
 | 
|---|
| 22 |  ;listener,  % = <input variable>
 | 
|---|
| 23 |  ;IF $G(%)="" DO ^%ZTER QUIT
 | 
|---|
| 24 |  SET (IO,IO(0))="SYS$NET"
 | 
|---|
| 25 |  ; **VMS specific code, need to share device**
 | 
|---|
| 26 |  OPEN IO:(TCPDEV):60 ELSE  SET ^TMP("XWB DSM CONNECT FAILURE",$H)="" QUIT
 | 
|---|
| 27 |  USE IO
 | 
|---|
| 28 |  DO SPAWN
 | 
|---|
| 29 |  QUIT
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 | STRT(PORT) ;*p34-This entry is called from option "XWB M2M CACHE LISTENER" and jobs off the listener for Cashe/NT.  Will call START.
 | 
|---|
| 32 |  ;PORT -is the port# to start the listener on.
 | 
|---|
| 33 |  J START^XWBVLL(PORT)::5 ;Used in place of TaskMan
 | 
|---|
| 34 |  Q
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 | CACHEVMS ;Cache/VMS tcpip entry point, called from XWBSERVER_START.COM fLle *p41*
 | 
|---|
| 37 |  SET (IO,IO(0))="SYS$NET"
 | 
|---|
| 38 |  ; **CACHE/VMS specific code**
 | 
|---|
| 39 |  OPEN IO::60 ELSE  SET ^TMP("XWB DSM CONNECT FAILURE",$H)="" QUIT
 | 
|---|
| 40 |  X "U IO:(::""-M"")" ;Packet mode like DSM
 | 
|---|
| 41 |  DO SPAWN
 | 
|---|
| 42 |  QUIT
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 | SPAWN ; -- spawned process
 | 
|---|
| 45 |  NEW XWBSTOP
 | 
|---|
| 46 |  SET XWBSTOP=0
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ; -- initialize tcp processing variables
 | 
|---|
| 49 |  DO INIT^XWBRL
 | 
|---|
| 50 |  ;
 | 
|---|
| 51 |  ; -- set error trap
 | 
|---|
| 52 |  NEW $ESTACK,$ETRAP S $ETRAP="D ^%ZTER HALT"
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 |  ; -- change job name if possible
 | 
|---|
| 55 |  ;DO SETNM^%ZOSV("XWBSERVER: Server") ;**M2M - comment out for now
 | 
|---|
| 56 |  DO SAVDEV^%ZISUTL("XWBM2M SERVER") ;**M2M save off server IO
 | 
|---|
| 57 |  S XWBDEBUG=$$GET^XPAR("SYS","XWBDEBUG",,"Q")
 | 
|---|
| 58 |  I XWBDEBUG D LOG^XWBRPC("Server Start @ "_$$NOW^XLFDT)
 | 
|---|
| 59 |  ; -- loop until told to stop
 | 
|---|
| 60 |  FOR  DO NXTCALL QUIT:XWBSTOP
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 |  ; -- final/clean tcp processing variables
 | 
|---|
| 63 |  D RMDEV^%ZISUTL("XWBM2M SERVER") ;**M2M remove server IO
 | 
|---|
| 64 |  Q
 | 
|---|
| 65 |  ;
 | 
|---|
| 66 | NXTCALL ; -- do next call
 | 
|---|
| 67 |  NEW U,DTIME,DT,X,XWBROOT,XWBREAD,XWBTO,XWBFIRST,XWBOK,XWBRL,BUG
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  ; -- set error trap
 | 
|---|
| 70 |  NEW $ESTACK,$ETRAP S $ETRAP="D SYSERR^XWBVLL"
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 |  ; -- setup environment variables
 | 
|---|
| 73 |  SET U="^",DTIME=900,DT=$$DT^XLFDT()
 | 
|---|
| 74 |  SET XWBREAD=20,XWBTO=36000,XWBFIRST=1
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; -- setup intake global - root is request data
 | 
|---|
| 77 |  SET XWBROOT=$NA(^TMP("XWBVLL",$J))
 | 
|---|
| 78 |  KILL @XWBROOT
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ; -- set parameters for RawLink
 | 
|---|
| 81 |  SET XWBRL("TIME OUT")=36000
 | 
|---|
| 82 |  SET XWBRL("READ CHARACTERS")=20
 | 
|---|
| 83 |  SET XWBRL("FIRST READ")=1
 | 
|---|
| 84 |  SET XWBRL("STORE")=XWBROOT
 | 
|---|
| 85 |  SET XWBRL("STOP FLAG")=XWBSTOP
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  ; -- read from socket
 | 
|---|
| 88 |  SET XWBOK=$$READ^XWBRL(XWBROOT,.XWBREAD,.XWBTO,.XWBFIRST,.XWBSTOP)
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ;**TESTING **REM
 | 
|---|
| 91 |  ;For debugging - hard set ^TMP(..."DEBUG") and ^TMP(..."CNT") to 1
 | 
|---|
| 92 |  I $G(^TMP("XWBM2M","DEBUG")) D
 | 
|---|
| 93 |  . S XWBCNT=(^TMP("XWBM2M","CNT"))+1
 | 
|---|
| 94 |  . M ^TMP("XWBM2MSV","REQUEST",XWBCNT)=^TMP("XWBVLL",$J)
 | 
|---|
| 95 |  . S ^TMP("XWBM2M","CNT")=XWBCNT
 | 
|---|
| 96 |  . Q
 | 
|---|
| 97 |  ;
 | 
|---|
| 98 |  ;**TESING **RWF
 | 
|---|
| 99 |  I $G(XWBDEBUG) D
 | 
|---|
| 100 |  . N CNT
 | 
|---|
| 101 |  . S CNT=$G(^TMP("XWBM2ML",$J))+1,^($J)=CNT
 | 
|---|
| 102 |  . M ^TMP("XWBM2ML",$J,CNT)=^TMP("XWBVLL",$J)
 | 
|---|
| 103 |  . Q
 | 
|---|
| 104 |  ;
 | 
|---|
| 105 |  IF 'XWBOK GOTO NXTCALLQ
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  ; -- call request manager           
 | 
|---|
| 108 |  SET XWBOK=$$EN^XWBRM(XWBROOT)
 | 
|---|
| 109 |  ; 
 | 
|---|
| 110 | NXTCALLQ ; -- exit
 | 
|---|
| 111 |  ;
 | 
|---|
| 112 |  QUIT
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 |  ; ---------------------------------------------------------------------
 | 
|---|
| 115 |  ;                                System Error Handler
 | 
|---|
| 116 |  ; ---------------------------------------------------------------------
 | 
|---|
| 117 | SYSERR ; -- send system error message
 | 
|---|
| 118 |  ;p41-don't new $Etrap, it was causing infinite loop.
 | 
|---|
| 119 |  ;p34-added "BrokerM2M" in message type in SYSERR.
 | 
|---|
| 120 |  ;   -halt for read/write errors
 | 
|---|
| 121 |  NEW XWBDAT,XWBMSG ;,$ETRAP ;*p41
 | 
|---|
| 122 |  S $ETRAP="D ^%ZTER HALT" ;If we get an error in the error handler just Halt
 | 
|---|
| 123 |  SET XWBMSG=$$EC^%ZOSV ;Get the error code
 | 
|---|
| 124 |  D ^%ZTER ;Save off the error
 | 
|---|
| 125 |  SET XWBDAT("MESSAGE TYPE")="Gov.VA.Med.BrokerM2M.Errors" ;*34
 | 
|---|
| 126 |  SET XWBDAT("ERRORS",1,"CODE")=1
 | 
|---|
| 127 |  SET XWBDAT("ERRORS",1,"ERROR TYPE")="system"
 | 
|---|
| 128 |  SET XWBDAT("ERRORS",1,"CDATA")=1
 | 
|---|
| 129 |  SET XWBDAT("ERRORS",1,"MESSAGE",1)=$P($TEXT(SYSERRS+1),";;",2)_XWBMSG
 | 
|---|
| 130 |  ;*p34-will halt for read/write errors
 | 
|---|
| 131 |  I XWBMSG["<READ>" HALT
 | 
|---|
| 132 |  DO ERROR^XWBUTL(.XWBDAT)
 | 
|---|
| 133 |  D UNWIND^%ZTER ;Return to NXTCALL loop
 | 
|---|
| 134 |  L  ;Clear locks *p34
 | 
|---|
| 135 |  Q
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 | SYSERRS ; -- application errors
 | 
|---|
| 138 |  ;*p34-removed the quotes (") after 'M:'
 | 
|---|
| 139 |  ;;A system error occurred in M:
 | 
|---|