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