| 1 | XWBRM ;OIFO-Oakland/REM - M2M Broker Server Request Mgr  ;4/6/06  10:21
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**28,45**;Mar 28, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  QUIT
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ; ---------------------------------------------------------------------
 | 
|---|
| 7 |  ;                             Server Request Manager (SRM)
 | 
|---|
| 8 |  ; ---------------------------------------------------------------------
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 | EN(XWBROOT) ; -- main entry point for SRM
 | 
|---|
| 11 |  NEW XWBOK,XWBOPT,XWBDATA,XWBMODE
 | 
|---|
| 12 |  N XWBM2M ;Flag for M2M requests **M2M
 | 
|---|
| 13 |  SET XWBOK=0,XWBM2M=0
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 |  ; -- parse the xml
 | 
|---|
| 16 |  SET XWBOPT=""
 | 
|---|
| 17 |  DO EN^XWBRMX(XWBROOT,.XWBOPT,.XWBDATA)
 | 
|---|
| 18 |  S XWBMODE=$G(XWBDATA("MODE"))
 | 
|---|
| 19 |  ;M ^REM($J)=XWBDATA ;**TEST ONLY
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  I $G(XWBDATA("URI"))="XUS GET VISITOR" D EN^XWBRPC(.XWBDATA) S XWBOK=1 S:'$D(DUZ) XWBSTOP=1 Q 1
 | 
|---|
| 22 |  ;Break off to RCPBroker **M2M
 | 
|---|
| 23 |  IF $G(XWBDATA("MODE"))="RPCBroker" D RPC^XWBM2MS(.XWBDATA) SET XWBSTOP=0
 | 
|---|
| 24 |  ; -- single call processing
 | 
|---|
| 25 |  IF $G(XWBDATA("MODE"),"single call")="single call" SET XWBSTOP=1
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ; -- check if app defined
 | 
|---|
| 28 |  IF $G(XWBDATA("APP"))="" DO RMERR(1) SET XWBOK=0 GOTO ENQ
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  ; -- process close request
 | 
|---|
| 31 |  IF $G(XWBDATA("APP"))="CLOSE" DO  SET XWBOK=0 GOTO ENQ
 | 
|---|
| 32 |  . D:$G(DUZ) LOGOUT^XUSRB ;**M2M -Logout user and cleanup
 | 
|---|
| 33 |  . DO RESPONSE^XWBVL()
 | 
|---|
| 34 |  . SET XWBSTOP=1
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  ; -- do security checks
 | 
|---|
| 37 |  IF $G(XWBDATA("MODE"))'="RPCBroker",'$$SECCHK() SET XWBOK=0 GOTO ENQ
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ; -- call app to write to socket
 | 
|---|
| 40 |  IF $G(XWBDATA("APP"))="RPC" DO EN^XWBRPC(.XWBDATA) SET XWBOK=1
 | 
|---|
| 41 |  ;
 | 
|---|
| 42 | ENQ ;
 | 
|---|
| 43 |  QUIT XWBOK
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ; ---------------------------------------------------------------------
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 | SECCHK() ; -- do security checks  (no real checks at this time)
 | 
|---|
| 48 |  NEW XWBCODES
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  ; -- is token valid
 | 
|---|
| 51 |  IF '$$CHKTOKEN($G(XWBDATA("SECTOKEN"))) SET XWBCODES(1)="",XWBCODES=$G(XWBCODES)+1
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  ; -- is DUZ valid
 | 
|---|
| 54 |  IF '$$CHKDUZ($G(XWBDATA("DUZ"))) SET XWBCODES(2)="",XWBCODES=$G(XWBCODES)+1
 | 
|---|
| 55 |  ;
 | 
|---|
| 56 |  ; -- if security errors then send error response
 | 
|---|
| 57 |  IF $G(XWBCODES) D SECERR(.XWBCODES)
 | 
|---|
| 58 |  ;
 | 
|---|
| 59 |  QUIT '+$G(XWBCODES)
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 | CHKTOKEN(XWBTOKEN) ; -- do check against token for validity
 | 
|---|
| 62 |  ; -- // TODO: Need to check into how we might use XUS1B and related code in Kernel Sign-On (ESSO)
 | 
|---|
| 63 |  NEW XWBINVAL
 | 
|---|
| 64 |  SET XWBINVAL="#UNKNOWN#"
 | 
|---|
| 65 |  IF $G(XWBTOKEN,XWBINVAL)=XWBINVAL QUIT 0
 | 
|---|
| 66 |  QUIT 1
 | 
|---|
| 67 |  ;
 | 
|---|
| 68 | CHKDUZ(XWBDUZ) ; -- do check against DUZ for validity
 | 
|---|
| 69 |  ; -- // TODO: Need to check into how we might use XUS1B and related code in Kernel Sign-On (ESSO)
 | 
|---|
| 70 |  NEW XWBINVAL
 | 
|---|
| 71 |  SET XWBINVAL="#UNKNOWN#"
 | 
|---|
| 72 |  IF $G(XWBDUZ,XWBINVAL)=XWBINVAL QUIT 0
 | 
|---|
| 73 |  IF '$D(^VA(200,+XWBDUZ,0)) QUIT 0
 | 
|---|
| 74 |  QUIT 1
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  ; ---------------------------------------------------------------------
 | 
|---|
| 77 |  ;                 Request Manager and Security Error Handlers
 | 
|---|
| 78 |  ; ---------------------------------------------------------------------
 | 
|---|
| 79 | RMERR(XWBCODE) ; -- send request error message
 | 
|---|
| 80 |  NEW XWBDAT,XWBMSG
 | 
|---|
| 81 |  SET XWBMSG=$P($TEXT(RMERRS+XWBCODE),";;",2)
 | 
|---|
| 82 |  SET XWBDAT("MESSAGE TYPE")="Gov.VA.Med.Foundations.Errors"
 | 
|---|
| 83 |  SET XWBDAT("ERRORS",1,"CODE")=1
 | 
|---|
| 84 |  SET XWBDAT("ERRORS",1,"ERROR TYPE")="request manager"
 | 
|---|
| 85 |  SET XWBDAT("ERRORS",1,"CDATA")=1
 | 
|---|
| 86 |  SET XWBDAT("ERRORS",1,"MESSAGE",1)="An Request Manager error occurred: "_XWBMSG
 | 
|---|
| 87 |  DO ERROR^XWBUTL(.XWBDAT)
 | 
|---|
| 88 |  QUIT
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 | RMERRS ; -- application errors
 | 
|---|
| 91 |  ;;No valid application specified.
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 | SECERR(XWBCODES) ; -- send security error message
 | 
|---|
| 94 |  NEW XWBDAT,XWBCNT,XWBCODE
 | 
|---|
| 95 |  SET XWBCNT=0
 | 
|---|
| 96 |  SET XWBDAT("MESSAGE TYPE")="Gov.VA.Med.Foundations.Security.Errors"
 | 
|---|
| 97 |  SET XWBCODE=0 FOR  SET XWBCODE=$O(XWBCODES(XWBCODE)) Q:'XWBCODE  DO
 | 
|---|
| 98 |  . SET XWBCNT=XWBCNT+1
 | 
|---|
| 99 |  . SET XWBDAT("ERRORS",XWBCNT,"CODE")=XWBCODE
 | 
|---|
| 100 |  . SET XWBDAT("ERRORS",XWBCNT,"ERROR TYPE")="security"
 | 
|---|
| 101 |  . SET XWBDAT("ERRORS",XWBCNT,"MESSAGE",1)=$P($TEXT(SECERRS+XWBCODE),";;",2)
 | 
|---|
| 102 |  . SET XWBDAT("ERRORS",XWBCNT,"CDATA")=0
 | 
|---|
| 103 |  DO ERROR^XWBUTL(.XWBDAT)
 | 
|---|
| 104 |  QUIT
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | SECERRS ; -- security errors
 | 
|---|
| 107 |  ;;Security token is either invalid or was not passed.
 | 
|---|
| 108 |  ;;DUZ is either invalid or was not passed.
 | 
|---|
| 109 |  ;;
 | 
|---|