| 1 | XOBVRPCI ;; ld,mjk/alb - VistaLink Interface Implementation for RPCs; 07/27/2002  13:00
 | 
|---|
| 2 |  ;;1.5;VistALink;;Sep 09, 2005
 | 
|---|
| 3 |  ;;Foundations Toolbox Release v1.5 [Build: 1.5.0.026]
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | CALLBACK(CB) ; -- init callbacks implementation
 | 
|---|
| 6 |  SET CB("STARTELEMENT")="ELEST^XOBVRPCI"
 | 
|---|
| 7 |  SET CB("ENDELEMENT")="ELEND^XOBVRPCI"
 | 
|---|
| 8 |  SET CB("CHARACTERS")="CHR^XOBVRPCI"
 | 
|---|
| 9 |  QUIT
 | 
|---|
| 10 |  ;
 | 
|---|
| 11 | READER(XOBUF,XOBDATA) ; -- propriatary format reader implementation
 | 
|---|
| 12 |  DO START^XOBVRPCX(.XOBUF,.XOBDATA)
 | 
|---|
| 13 |  QUIT
 | 
|---|
| 14 |  ;
 | 
|---|
| 15 | REQHDLR(XOBDATA) ; -- request handler implementation
 | 
|---|
| 16 |  DO EN^XOBVRPC(.XOBDATA)
 | 
|---|
| 17 |  QUIT
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  ; ------------------------------------------------------------------------
 | 
|---|
| 20 |  ;             RPC Server: Request Message XML SAX Parser Callbacks         
 | 
|---|
| 21 |  ; ------------------------------------------------------------------------
 | 
|---|
| 22 | ELEST(ELE,ATR) ; -- element start event handler
 | 
|---|
| 23 |  IF ELE="VistaLink" DO  QUIT
 | 
|---|
| 24 |  . KILL XOBPARAM,XOBCTXT,XOBPN,XOBPTYPE
 | 
|---|
| 25 |  . ; -- if called from VL v1.0 client then set up J2SE defaults
 | 
|---|
| 26 |  . IF $GET(XOBDATA("VL VERSION"))="1.0" DO V1^XOBVRPCX
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  IF ELE="RpcHandler" SET XOBDATA("XOB RPC","RPC HANDLER VERSION")=$GET(ATR("version")) QUIT
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 |  IF ELE="Request" DO  QUIT
 | 
|---|
| 31 |  . SET XOBDATA("XOB RPC","RPC NAME")=$$ESC^XOBVRMX($GET(ATR("rpcName"),"##Unkown RPC##"))
 | 
|---|
| 32 |  . NEW X
 | 
|---|
| 33 |  . SET X=$$SETTO^XOBVLIB($GET(ATR("rpcClientTimeOut"),9000))
 | 
|---|
| 34 |  . SET X=$$SETVER^XOBVRPCX($GET(ATR("rpcVersion"),0))
 | 
|---|
| 35 |  ;
 | 
|---|
| 36 |  IF ELE="RpcContext" SET XOBCTXT="" QUIT
 | 
|---|
| 37 |  ;
 | 
|---|
| 38 |  ; --------------------  Param Node Start Event Processing  ---------------------------
 | 
|---|
| 39 |  ; 
 | 
|---|
| 40 |  IF ELE="Param" DO  QUIT
 | 
|---|
| 41 |  . SET XOBPARAM=""
 | 
|---|
| 42 |  . SET XOBPN="XOBP"_ATR("position")
 | 
|---|
| 43 |  . SET XOBDATA("XOB RPC","PARAMS",ATR("position"))=XOBPN
 | 
|---|
| 44 |  . SET XOBPTYPE=ATR("type")
 | 
|---|
| 45 |  . SET:XOBPTYPE="array" @XOBPN=""
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  IF ELE="Index" DO  QUIT
 | 
|---|
| 48 |  . KILL XOBPARAM
 | 
|---|
| 49 |  . IF $DATA(ATR("name"))&$DATA(ATR("value")) DO
 | 
|---|
| 50 |  . . SET @XOBPN@($$ESC^XOBVRMX(ATR("name")))=$$ESC^XOBVRMX(ATR("value"))
 | 
|---|
| 51 |  ;
 | 
|---|
| 52 |  IF ELE="Name" DO  QUIT
 | 
|---|
| 53 |  . SET XOBPARNM=""
 | 
|---|
| 54 |  ;
 | 
|---|
| 55 |  IF ELE="Value" DO  QUIT
 | 
|---|
| 56 |  . SET XOBPARVL=""
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  ; --------------------  Security Node Start Event Processing  ---------------------------
 | 
|---|
| 59 |  ; 
 | 
|---|
| 60 |  IF ELE="Security" DO  QUIT
 | 
|---|
| 61 |  . SET XOBDATA("XOB RPC","SECURITY","TYPE")=$GET(ATR("type"))
 | 
|---|
| 62 |  . SET XOBDATA("XOB RPC","SECURITY","DIV")=$GET(ATR("division"))
 | 
|---|
| 63 |  . SET XOBDATA("XOB RPC","SECURITY","STATE")=$GET(ATR("state"),"notauthenticated")
 | 
|---|
| 64 |  . KILL XOBSECFL
 | 
|---|
| 65 |  . ;
 | 
|---|
| 66 |  . ; -- use to make sure child nodes are from Security
 | 
|---|
| 67 |  . ;    parent when processing child node names
 | 
|---|
| 68 |  . SET XOBSECFL=1
 | 
|---|
| 69 |  ;
 | 
|---|
| 70 |  IF ELE="AccessVerify",$GET(XOBSECFL),$EXTRACT($GET(XOBDATA("XOB RPC","SECURITY","TYPE")),1,2)="av" DO  QUIT
 | 
|---|
| 71 |  . SET XOBAVCOD=""
 | 
|---|
| 72 |  ;
 | 
|---|
| 73 |  IF ELE="KernelCcowToken",$GET(XOBSECFL),$GET(XOBDATA("XOB RPC","SECURITY","TYPE"))="ccow" DO  QUIT
 | 
|---|
| 74 |  . SET XOBCCOWT=""
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 |  IF ELE="Duz",$GET(XOBSECFL),$GET(XOBDATA("XOB RPC","SECURITY","TYPE"))="duz" DO  QUIT
 | 
|---|
| 77 |  . SET XOBDATA("XOB RPC","SECURITY","TYPE","VALUE")=$GET(ATR("value"))
 | 
|---|
| 78 |  ;
 | 
|---|
| 79 |  IF ELE="Vpid",$GET(XOBSECFL),$GET(XOBDATA("XOB RPC","SECURITY","TYPE"))="vpid" DO  QUIT
 | 
|---|
| 80 |  . SET XOBDATA("XOB RPC","SECURITY","TYPE","VALUE")=$GET(ATR("value"))
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 |  IF ELE="ApplicationProxyName",$GET(XOBSECFL),$GET(XOBDATA("XOB RPC","SECURITY","TYPE"))="appproxy" DO  QUIT
 | 
|---|
| 83 |  . SET XOBDATA("XOB RPC","SECURITY","TYPE","VALUE")=$GET(ATR("value"))
 | 
|---|
| 84 |  ;
 | 
|---|
| 85 |  ; ---------------------------------------------------------------------------
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 |  QUIT
 | 
|---|
| 88 |  ;
 | 
|---|
| 89 | ELEND(ELE) ; -- element end event handler
 | 
|---|
| 90 |  IF ELE="VistaLink" DO  QUIT
 | 
|---|
| 91 |  . SET XOBDATA("MODE")=$GET(ATR("mode"),"singleton")
 | 
|---|
| 92 |  . KILL XOBPOS,XOBPARAM,XOBCTXT,XOBPN,XOBPTYPE
 | 
|---|
| 93 |  ;
 | 
|---|
| 94 |  IF ELE="RpcContext" DO  QUIT
 | 
|---|
| 95 |  . SET XOBDATA("XOB RPC","RPC CONTEXT")=$GET(XOBCTXT)
 | 
|---|
| 96 |  ;
 | 
|---|
| 97 |  IF ELE="Param" DO  KILL XOBPARAM QUIT
 | 
|---|
| 98 |  . IF XOBPTYPE="string" SET @XOBPN=$$ESC^XOBVRMX(XOBPARAM) QUIT
 | 
|---|
| 99 |  . IF XOBPTYPE="ref" SET @XOBPN=$GET(@$$ESC^XOBVRMX(XOBPARAM)) QUIT
 | 
|---|
| 100 |  ;
 | 
|---|
| 101 |  IF ELE="Params" DO  QUIT
 | 
|---|
| 102 |  . NEW POS,PARAMS
 | 
|---|
| 103 |  . SET PARAMS="",POS=0
 | 
|---|
| 104 |  . FOR  SET POS=$ORDER(XOBDATA("XOB RPC","PARAMS",POS)) QUIT:'POS  SET PARAMS=PARAMS_",."_XOBDATA("XOB RPC","PARAMS",POS)
 | 
|---|
| 105 |  . SET XOBDATA("XOB RPC","PARAMS")=PARAMS
 | 
|---|
| 106 |  ;
 | 
|---|
| 107 |  IF ELE="Index" DO  QUIT
 | 
|---|
| 108 |  . IF $DATA(XOBPARNM)&$DATA(XOBPARVL) DO
 | 
|---|
| 109 |  . . KILL XOBPARAM
 | 
|---|
| 110 |  . . IF $EXTRACT(XOBPARNM,1)=$CHAR(13) DO
 | 
|---|
| 111 |  . . . SET @("@XOBPN@("_$$ESC^XOBVRMX($EXTRACT(XOBPARNM,2,$LENGTH(XOBPARNM)))_")=$$ESC^XOBVRMX(XOBPARVL)")
 | 
|---|
| 112 |  . . ELSE  DO
 | 
|---|
| 113 |  . . . SET @XOBPN@($$ESC^XOBVRMX(XOBPARNM))=$$ESC^XOBVRMX(XOBPARVL)
 | 
|---|
| 114 |  . . KILL XOBPARNM,XOBPARVL
 | 
|---|
| 115 |  ;
 | 
|---|
| 116 |  IF ELE="Name" DO  QUIT
 | 
|---|
| 117 |  . SET XOBPARNM("DONE")=1
 | 
|---|
| 118 |  ;
 | 
|---|
| 119 |  IF ELE="Value" DO  QUIT
 | 
|---|
| 120 |  . SET XOBPARVL("DONE")=1
 | 
|---|
| 121 |  ;
 | 
|---|
| 122 |  IF ELE="AccessVerify",$GET(XOBSECFL),$EXTRACT($GET(XOBDATA("XOB RPC","SECURITY","TYPE")),1,2)="av" DO  QUIT
 | 
|---|
| 123 |  . SET XOBDATA("XOB RPC","SECURITY","TYPE","AVCODE")=XOBAVCOD KILL XOBAVCOD
 | 
|---|
| 124 |  IF ELE="KernelCcowToken",$GET(XOBSECFL),$GET(XOBDATA("XOB RPC","SECURITY","TYPE"))="ccow" DO  QUIT
 | 
|---|
| 125 |  . SET XOBDATA("XOB RPC","SECURITY","TYPE","CCOW")=XOBCCOWT KILL XOBCCOWT
 | 
|---|
| 126 |  IF ELE="Security" KILL XOBSECFL QUIT
 | 
|---|
| 127 |  ;
 | 
|---|
| 128 |  QUIT
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 | CHR(TEXT) ; -- character value event handler <tag>TEXT</tag)
 | 
|---|
| 131 |  ; -- need to concatenate because MXML parses on ENTITY characters (<>& etc.) and
 | 
|---|
| 132 |  ;    callback gets hit multiple times even though the tag text value is just one piece of data.
 | 
|---|
| 133 |  ;    (Yes, this seems kludgie!)
 | 
|---|
| 134 |  IF $DATA(XOBPARAM) SET XOBPARAM=XOBPARAM_TEXT
 | 
|---|
| 135 |  IF $DATA(XOBPARNM),'+$GET(XOBPARNM("DONE")) SET XOBPARNM=XOBPARNM_TEXT QUIT
 | 
|---|
| 136 |  IF $DATA(XOBPARVL),'+$GET(XOBPARVL("DONE")) SET XOBPARVL=XOBPARVL_TEXT QUIT
 | 
|---|
| 137 |  IF $DATA(XOBCTXT) SET XOBCTXT=XOBCTXT_TEXT QUIT
 | 
|---|
| 138 |  IF $DATA(XOBAVCOD) SET XOBAVCOD=XOBAVCOD_TEXT QUIT
 | 
|---|
| 139 |  IF $DATA(XOBCCOWT) SET XOBCCOWT=XOBCCOWT_TEXT QUIT
 | 
|---|
| 140 |  QUIT
 | 
|---|
| 141 |  ;
 | 
|---|