| 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: | 
|---|