| 1 | XWBLIB ;SFISC/VYD - Various remote procedure library ;06/16/2004  17:53
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**6,10,26,35**;Mar 28, 1997
 | 
|---|
| 3 |  Q
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | BROKER() ;EF. Running under the Broker or Vlink
 | 
|---|
| 6 |  Q $D(XWBOS)!$D(XOBDATA)
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 | RTRNFMT(X,WRAP) ;EF. set the RPC return type and wrap flag
 | 
|---|
| 9 |  N Y
 | 
|---|
| 10 |  S:$D(WRAP) XWBWRAP=+WRAP
 | 
|---|
| 11 |  S X=$G(X)
 | 
|---|
| 12 |  IF X=+X,X>0,X<6 S XWBPTYPE=X Q X
 | 
|---|
| 13 |  S X=$$UP^XLFSTR(X)
 | 
|---|
| 14 |  S X=$S(X="SINGLE VALUE":1,X="ARRAY":2,X="WORD PROCESSING":3,X="GLOBAL ARRAY":4,X="GLOBAL INSTANCE":5,1:0)
 | 
|---|
| 15 |  IF X=0 Q 0
 | 
|---|
| 16 |  S XWBPTYPE=X
 | 
|---|
| 17 |  Q X
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 | VARVAL(RESULT,VARIABLE) ;returns value of passed in variable
 | 
|---|
| 20 |  S RESULT=VARIABLE ;can do this with the REFERENCE type parameter
 | 
|---|
| 21 |  Q
 | 
|---|
| 22 |  ;See GETV^XWBBRK for how we get the REFERENCE type parameter
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | IMHERE(RESULT) ;P6
 | 
|---|
| 25 |  ;Entry point for XWB IM HERE remote procedure
 | 
|---|
| 26 |  S RESULT=1
 | 
|---|
| 27 |  Q
 | 
|---|
| 28 |  ;
 | 
|---|
| 29 | BRKRINFO(RESULT) ;P6
 | 
|---|
| 30 |  ;Entry point for XWB GET BROKER INFO RPC.
 | 
|---|
| 31 |  ;R(0) = Length of handler read timeout
 | 
|---|
| 32 |  S RESULT(0)=$$BAT^XUPARAM
 | 
|---|
| 33 |  Q
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | CKRPC(RESULT,RPCNAME,RPCUSE,VERNUM) ;P10
 | 
|---|
| 36 |  ;Entry point for "XWB IS RPC AVIALABLE" RPC.
 | 
|---|
| 37 |  ;RPCUSE("L" or "R") and VERNUM are optional.
 | 
|---|
| 38 |  ;Checks if RPC exists and if INACTIVE flag is set for specified use.
 | 
|---|
| 39 |  ;Also checks version number if passed.
 | 
|---|
| 40 |  ;Result = 1 for can be run; 0 for can't be run.
 | 
|---|
| 41 |  N RPCIEN
 | 
|---|
| 42 |  S RESULT=0
 | 
|---|
| 43 |  S RPCIEN=$$RPCIEN($G(RPCNAME))
 | 
|---|
| 44 |  I RPCIEN,$$RPCAVAIL(RPCIEN,$G(RPCUSE),$G(VERNUM)) S RESULT=1
 | 
|---|
| 45 |  Q
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 | CKRPCS(RESULT,RPCUSE,RPC) ;P10
 | 
|---|
| 48 |  ;Entry point for "XWB ARE RPCS AVIALABLE" RPC.
 | 
|---|
| 49 |  ;RPCUSE("L" or "R") and VERNUM are optional.
 | 
|---|
| 50 |  ;RPC() array has format RPCName^RPCVersionNumber.
 | 
|---|
| 51 |  ;Checks if RPC exists and version number (if not null).
 | 
|---|
| 52 |  ;Check INACTIVE flag if set for specified use.
 | 
|---|
| 53 |  ;Result(I) = 1 for can be run; 0 for can't be run.
 | 
|---|
| 54 |  N I
 | 
|---|
| 55 |  S I=""
 | 
|---|
| 56 |  F  S I=$O(RPC(I)) Q:I=""  D
 | 
|---|
| 57 |  . N RPCNAME,VERNUM,RPCIEN
 | 
|---|
| 58 |  . S RESULT(I)=0
 | 
|---|
| 59 |  . S RPCNAME=$P(RPC(I),U)
 | 
|---|
| 60 |  . S VERNUM=$P(RPC(I),U,2)
 | 
|---|
| 61 |  . S RPCIEN=$$RPCIEN($G(RPCNAME))
 | 
|---|
| 62 |  . I RPCIEN,$$RPCAVAIL(RPCIEN,$G(RPCUSE),$G(VERNUM)) S RESULT(I)=1
 | 
|---|
| 63 |  Q
 | 
|---|
| 64 |  ;
 | 
|---|
| 65 | RPCIEN(RPCNAME) ;P10
 | 
|---|
| 66 |  ;Function that returns IEN of RPC based on name.
 | 
|---|
| 67 |  ;Returns 0 if RPC does not exist.
 | 
|---|
| 68 |  I RPCNAME="" Q 0
 | 
|---|
| 69 |  Q +$O(^XWB(8994,"B",RPCNAME,0))
 | 
|---|
| 70 |  ;
 | 
|---|
| 71 | RPCAVAIL(RPCIEN,RPCUSE,VERNUM) ;P10
 | 
|---|
| 72 |  ;Boolean function, identifies if RPC is active and correct version.
 | 
|---|
| 73 |  ;RPCUSE (optional) = L check local use; R check remote use.
 | 
|---|
| 74 |  ;VERNUM (optional) only checked for remote RPCs.
 | 
|---|
| 75 |  N RPC0,INACT
 | 
|---|
| 76 |  S RPC0=$G(^XWB(8994,+RPCIEN,0))
 | 
|---|
| 77 |  Q:RPC0="" 0
 | 
|---|
| 78 |  S INACT=+$P(RPC0,U,6)
 | 
|---|
| 79 |  I INACT=1 Q 0 ;RPC marked inactive.
 | 
|---|
| 80 |  S RPCUSE=$G(RPCUSE)
 | 
|---|
| 81 |  I RPCUSE="" Q 1 ;Local and remote check not needed.
 | 
|---|
| 82 |  I RPCUSE="L",INACT=2 Q 0 ;Local use, RPC is remote only.
 | 
|---|
| 83 |  I RPCUSE="R",INACT=3 Q 0 ;Remote use, RPC is local only.
 | 
|---|
| 84 |  I RPCUSE="R",+$G(VERNUM),'$$CKVERNUM(VERNUM,+$P(RPC0,U,9)) Q 0 ;Failed version # check.
 | 
|---|
| 85 |  Q 1 ;Must be ok.
 | 
|---|
| 86 |  ;
 | 
|---|
| 87 | CKVERNUM(VERNUM,RPCVER,RPCIEN) ;P10
 | 
|---|
| 88 |  ;Boolean function. Returns 1 if RPC verion is > or = version number to be checked.
 | 
|---|
| 89 |  ;VERNUM = version number passed in (i.e., from client ap) to be checked.
 | 
|---|
| 90 |  ;RPCVER = version number in Remote Procedure file. (optional)
 | 
|---|
| 91 |  ;RPCIEN of RPC being checked. Needed if RPCVER not sent.
 | 
|---|
| 92 |  I +$G(RPCIEN),'+$G(RPCVER) S RPCVER=$P($G(^XWB(8994,RPCIEN,0)),U,9)
 | 
|---|
| 93 |  I +RPCVER<+VERNUM Q 0
 | 
|---|
| 94 |  Q 1
 | 
|---|
| 95 |  ;
 | 
|---|
| 96 | VARLST ;;XWB,XWBAPVER,XWBCLMAN,XWBNULL,XWBODEV,XWBOS,XWBP,XWBPTYPE,XWBR,XWBSEC,XWBSTATE,XWBTBUF,XWBTDEV,XWBTIME,XWBTIP,XWBTOS,XWBTSKT,XWBVER,XWBWRAP,XWBY,DEBUG,XWBSHARE,XWBDEBUG,XWBT
 | 
|---|
| 97 |  ;P10.  Variable for exclusive NEW in KILL^XUSCLEAN
 | 
|---|
| 98 |  ;P26.  Added XWBSHARE
 | 
|---|
| 99 |  ;P35.  Added XWBDEBUG,XWBT
 | 
|---|