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