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