- XWBRM ;OIFO-Oakland/REM - M2M Broker Server Request Mgr ;4/6/06 10:21
- ;;1.1;RPC BROKER;**28,45,62**;Mar 28, 1997;Build 13
- ;Per VHA Directive 6402, this routine should not be modified
- ;
- QUIT
- ;
- ; ---------------------------------------------------------------------
- ; Server Request Manager (SRM)
- ; ---------------------------------------------------------------------
- ;
- EN(XWBROOT) ; -- main entry point for SRM
- NEW XWBOK,XWBOPT,XWBDATA,XWBMODE
- N XWBM2M ;Flag for M2M requests **M2M
- SET XWBOK=0,XWBM2M=0
- ;
- ; -- parse the xml
- SET XWBOPT=""
- DO EN^XWBRMX(XWBROOT,.XWBOPT,.XWBDATA)
- S XWBMODE=$G(XWBDATA("MODE"))
- ;access/verify RPC must be within first 2 calls P62
- I $G(XWBAVC) D Q:XWBAVC>1 '(XWBAVC=3)
- . Q:$G(XWBDATA("URI"))="XUS SIGNON SETUP"
- . I $G(XWBDATA("URI"))="XUS AV CODE" D EN^XWBRPC(.XWBDATA) S XWBAVC=2 Q
- . S XWBCODES(2)="",XWBCODES=$G(XWBCODES)+1,XWBAVC=3
- . D SECERR(.XWBCODES)
- . Q
- ;removed in P62
- ;I $G(XWBDATA("URI"))="XUS GET VISITOR" D EN^XWBRPC(.XWBDATA) S XWBOK=1 S:'$D(DUZ) XWBSTOP=1 Q 1
- ;Break off to RCPBroker **M2M
- IF $G(XWBDATA("MODE"))="RPCBroker" D RPC^XWBM2MS(.XWBDATA) SET XWBSTOP=0
- ; -- single call processing
- IF $G(XWBDATA("MODE"),"single call")="single call" SET XWBSTOP=1
- ;
- ; -- check if app defined
- IF $G(XWBDATA("APP"))="" DO RMERR(1) SET XWBOK=0 GOTO ENQ
- ;
- ; -- process close request
- IF $G(XWBDATA("APP"))="CLOSE" DO SET XWBOK=0 GOTO ENQ
- . D:$G(DUZ) LOGOUT^XUSRB ;**M2M -Logout user and cleanup
- . DO RESPONSE^XWBVL()
- . SET XWBSTOP=1
- ;
- ; -- do security checks
- IF $G(XWBDATA("MODE"))'="RPCBroker",'$$SECCHK() SET XWBOK=0 GOTO ENQ
- ;
- ; -- call app to write to socket
- IF $G(XWBDATA("APP"))="RPC" DO EN^XWBRPC(.XWBDATA) SET XWBOK=1
- ;
- ENQ ;
- QUIT XWBOK
- ;
- ; ---------------------------------------------------------------------
- ;
- SECCHK() ; -- do security checks (no real checks at this time)
- NEW XWBCODES
- ;
- ; -- is token valid
- IF '$$CHKTOKEN($G(XWBDATA("SECTOKEN"))) SET XWBCODES(1)="",XWBCODES=$G(XWBCODES)+1
- ;
- ; -- is DUZ valid
- IF '$$CHKDUZ($G(XWBDATA("DUZ"))) SET XWBCODES(2)="",XWBCODES=$G(XWBCODES)+1
- ;
- ; -- if security errors then send error response
- IF $G(XWBCODES) D SECERR(.XWBCODES)
- ;
- QUIT '+$G(XWBCODES)
- ;
- CHKTOKEN(XWBTOKEN) ; -- do check against token for validity
- ; -- // TODO: Need to check into how we might use XUS1B and related code in Kernel Sign-On (ESSO)
- NEW XWBINVAL
- SET XWBINVAL="#UNKNOWN#"
- IF $G(XWBTOKEN,XWBINVAL)=XWBINVAL QUIT 0
- QUIT 1
- ;
- CHKDUZ(XWBDUZ) ; -- do check against DUZ for validity
- ; -- // TODO: Need to check into how we might use XUS1B and related code in Kernel Sign-On (ESSO)
- NEW XWBINVAL
- SET XWBINVAL="#UNKNOWN#"
- IF $G(XWBDUZ,XWBINVAL)=XWBINVAL QUIT 0
- IF '$D(^VA(200,+XWBDUZ,0)) QUIT 0
- QUIT 1
- ;
- ; ---------------------------------------------------------------------
- ; Request Manager and Security Error Handlers
- ; ---------------------------------------------------------------------
- RMERR(XWBCODE) ; -- send request error message
- NEW XWBDAT,XWBMSG
- SET XWBMSG=$P($TEXT(RMERRS+XWBCODE),";;",2)
- SET XWBDAT("MESSAGE TYPE")="Gov.VA.Med.Foundations.Errors"
- SET XWBDAT("ERRORS",1,"CODE")=1
- SET XWBDAT("ERRORS",1,"ERROR TYPE")="request manager"
- SET XWBDAT("ERRORS",1,"CDATA")=1
- SET XWBDAT("ERRORS",1,"MESSAGE",1)="An Request Manager error occurred: "_XWBMSG
- DO ERROR^XWBUTL(.XWBDAT)
- QUIT
- ;
- RMERRS ; -- application errors
- ;;No valid application specified
- ;;
- ;
- SECERR(XWBCODES) ; -- send security error message and log
- NEW XWBDAT,XWBCNT,XWBCODE
- SET XWBCNT=0
- SET XWBDAT("MESSAGE TYPE")="Gov.VA.Med.Foundations.Security.Errors"
- SET XWBCODE=0 FOR SET XWBCODE=$O(XWBCODES(XWBCODE)) Q:'XWBCODE DO
- . SET XWBCNT=XWBCNT+1
- . SET XWBDAT("ERRORS",XWBCNT,"CODE")=XWBCODE
- . SET XWBDAT("ERRORS",XWBCNT,"ERROR TYPE")="security"
- . SET XWBDAT("ERRORS",XWBCNT,"MESSAGE",1)=$P($TEXT(SECERRS+XWBCODE),";;",2)
- . SET XWBDAT("ERRORS",XWBCNT,"CDATA")=0
- . D XTMP
- DO ERROR^XWBUTL(.XWBDAT)
- QUIT
- ;
- SECERRS ; -- security errors
- ;;Security token is either invalid or was not passed.
- ;;DUZ is either invalid or was not passed.
- ;;
- ;
- XTMP ;
- ;reset expiration date to T+7 on security log
- S:'$G(^XTMP("XWBSEC"_DT,0)) ^(0)=$$FMADD^XLFDT(DT,7)_U_DT_U_0
- S X=$P(^XTMP("XWBSEC"_DT,0),U,3)+1,$P(^(0),U,3)=X,^(X)=XWBCODE_U_$J_U_$G(IO("IP"))
- Q
- XWBRM ;OIFO-Oakland/REM - M2M Broker Server Request Mgr ;4/6/06 10:21
- +1 ;;1.1;RPC BROKER;**28,45,62**;Mar 28, 1997;Build 13
- +2 ;Per VHA Directive 6402, this routine should not be modified
- +3 ;
- +4 QUIT
- +5 ;
- +6 ; ---------------------------------------------------------------------
- +7 ; Server Request Manager (SRM)
- +8 ; ---------------------------------------------------------------------
- +9 ;
- EN(XWBROOT) ; -- main entry point for SRM
- +1 NEW XWBOK,XWBOPT,XWBDATA,XWBMODE
- +2 ;Flag for M2M requests **M2M
- NEW XWBM2M
- +3 SET XWBOK=0
- SET XWBM2M=0
- +4 ;
- +5 ; -- parse the xml
- +6 SET XWBOPT=""
- +7 DO EN^XWBRMX(XWBROOT,.XWBOPT,.XWBDATA)
- +8 SET XWBMODE=$GET(XWBDATA("MODE"))
- +9 ;access/verify RPC must be within first 2 calls P62
- +10 IF $GET(XWBAVC)
- Begin DoDot:1
- +11 IF $GET(XWBDATA("URI"))="XUS SIGNON SETUP"
- QUIT
- +12 IF $GET(XWBDATA("URI"))="XUS AV CODE"
- DO EN^XWBRPC(.XWBDATA)
- SET XWBAVC=2
- QUIT
- +13 SET XWBCODES(2)=""
- SET XWBCODES=$GET(XWBCODES)+1
- SET XWBAVC=3
- +14 DO SECERR(.XWBCODES)
- +15 QUIT
- End DoDot:1
- IF XWBAVC>1
- QUIT '(XWBAVC=3)
- +16 ;removed in P62
- +17 ;I $G(XWBDATA("URI"))="XUS GET VISITOR" D EN^XWBRPC(.XWBDATA) S XWBOK=1 S:'$D(DUZ) XWBSTOP=1 Q 1
- +18 ;Break off to RCPBroker **M2M
- +19 IF $GET(XWBDATA("MODE"))="RPCBroker"
- DO RPC^XWBM2MS(.XWBDATA)
- SET XWBSTOP=0
- +20 ; -- single call processing
- +21 IF $GET(XWBDATA("MODE"),"single call")="single call"
- SET XWBSTOP=1
- +22 ;
- +23 ; -- check if app defined
- +24 IF $GET(XWBDATA("APP"))=""
- DO RMERR(1)
- SET XWBOK=0
- GOTO ENQ
- +25 ;
- +26 ; -- process close request
- +27 IF $GET(XWBDATA("APP"))="CLOSE"
- Begin DoDot:1
- +28 ;**M2M -Logout user and cleanup
- IF $GET(DUZ)
- DO LOGOUT^XUSRB
- +29 DO RESPONSE^XWBVL()
- +30 SET XWBSTOP=1
- End DoDot:1
- SET XWBOK=0
- GOTO ENQ
- +31 ;
- +32 ; -- do security checks
- +33 IF $GET(XWBDATA("MODE"))'="RPCBroker"
- IF '$$SECCHK()
- SET XWBOK=0
- GOTO ENQ
- +34 ;
- +35 ; -- call app to write to socket
- +36 IF $GET(XWBDATA("APP"))="RPC"
- DO EN^XWBRPC(.XWBDATA)
- SET XWBOK=1
- +37 ;
- ENQ ;
- +1 QUIT XWBOK
- +2 ;
- +3 ; ---------------------------------------------------------------------
- +4 ;
- SECCHK() ; -- do security checks (no real checks at this time)
- +1 NEW XWBCODES
- +2 ;
- +3 ; -- is token valid
- +4 IF '$$CHKTOKEN($GET(XWBDATA("SECTOKEN")))
- SET XWBCODES(1)=""
- SET XWBCODES=$GET(XWBCODES)+1
- +5 ;
- +6 ; -- is DUZ valid
- +7 IF '$$CHKDUZ($GET(XWBDATA("DUZ")))
- SET XWBCODES(2)=""
- SET XWBCODES=$GET(XWBCODES)+1
- +8 ;
- +9 ; -- if security errors then send error response
- +10 IF $GET(XWBCODES)
- DO SECERR(.XWBCODES)
- +11 ;
- +12 QUIT '+$GET(XWBCODES)
- +13 ;
- CHKTOKEN(XWBTOKEN) ; -- do check against token for validity
- +1 ; -- // TODO: Need to check into how we might use XUS1B and related code in Kernel Sign-On (ESSO)
- +2 NEW XWBINVAL
- +3 SET XWBINVAL="#UNKNOWN#"
- +4 IF $GET(XWBTOKEN,XWBINVAL)=XWBINVAL
- QUIT 0
- +5 QUIT 1
- +6 ;
- CHKDUZ(XWBDUZ) ; -- do check against DUZ for validity
- +1 ; -- // TODO: Need to check into how we might use XUS1B and related code in Kernel Sign-On (ESSO)
- +2 NEW XWBINVAL
- +3 SET XWBINVAL="#UNKNOWN#"
- +4 IF $GET(XWBDUZ,XWBINVAL)=XWBINVAL
- QUIT 0
- +5 IF '$DATA(^VA(200,+XWBDUZ,0))
- QUIT 0
- +6 QUIT 1
- +7 ;
- +8 ; ---------------------------------------------------------------------
- +9 ; Request Manager and Security Error Handlers
- +10 ; ---------------------------------------------------------------------
- RMERR(XWBCODE) ; -- send request error message
- +1 NEW XWBDAT,XWBMSG
- +2 SET XWBMSG=$PIECE($TEXT(RMERRS+XWBCODE),";;",2)
- +3 SET XWBDAT("MESSAGE TYPE")="Gov.VA.Med.Foundations.Errors"
- +4 SET XWBDAT("ERRORS",1,"CODE")=1
- +5 SET XWBDAT("ERRORS",1,"ERROR TYPE")="request manager"
- +6 SET XWBDAT("ERRORS",1,"CDATA")=1
- +7 SET XWBDAT("ERRORS",1,"MESSAGE",1)="An Request Manager error occurred: "_XWBMSG
- +8 DO ERROR^XWBUTL(.XWBDAT)
- +9 QUIT
- +10 ;
- RMERRS ; -- application errors
- +1 ;;No valid application specified
- +2 ;;
- +3 ;
- SECERR(XWBCODES) ; -- send security error message and log
- +1 NEW XWBDAT,XWBCNT,XWBCODE
- +2 SET XWBCNT=0
- +3 SET XWBDAT("MESSAGE TYPE")="Gov.VA.Med.Foundations.Security.Errors"
- +4 SET XWBCODE=0
- FOR
- SET XWBCODE=$ORDER(XWBCODES(XWBCODE))
- IF 'XWBCODE
- QUIT
- Begin DoDot:1
- +5 SET XWBCNT=XWBCNT+1
- +6 SET XWBDAT("ERRORS",XWBCNT,"CODE")=XWBCODE
- +7 SET XWBDAT("ERRORS",XWBCNT,"ERROR TYPE")="security"
- +8 SET XWBDAT("ERRORS",XWBCNT,"MESSAGE",1)=$PIECE($TEXT(SECERRS+XWBCODE),";;",2)
- +9 SET XWBDAT("ERRORS",XWBCNT,"CDATA")=0
- +10 DO XTMP
- End DoDot:1
- +11 DO ERROR^XWBUTL(.XWBDAT)
- +12 QUIT
- +13 ;
- SECERRS ; -- security errors
- +1 ;;Security token is either invalid or was not passed.
- +2 ;;DUZ is either invalid or was not passed.
- +3 ;;
- +4 ;
- XTMP ;
- +1 ;reset expiration date to T+7 on security log
- +2 IF '$GET(^XTMP("XWBSEC"_DT,0))
- SET ^(0)=$$FMADD^XLFDT(DT,7)_U_DT_U_0
- +3 SET X=$PIECE(^XTMP("XWBSEC"_DT,0),U,3)+1
- SET $PIECE(^(0),U,3)=X
- SET ^(X)=XWBCODE_U_$JOB_U_$GET(IO("IP"))
- +4 QUIT