1 | XWBTCPM1 ;ISF/RWF - Support for XWBTCPM ;05/20/2004 10:14
|
---|
2 | ;;1.1;RPC BROKER;**35**;Mar 28, 1997
|
---|
3 | Q
|
---|
4 | ZISTCP(XWBTSKT) ;Start ZISTCPS listener
|
---|
5 | ;
|
---|
6 | N XWBENV,XWBVOL,Y
|
---|
7 | D GETENV^%ZOSV S XWBENV=Y,XWBVOL=$P(Y,"^",2)
|
---|
8 | Q:'$$SEMAPHOR^XWBTCPL(XWBTSKT,"LOCK") ;quit if job is already running
|
---|
9 | D UPDTREC^XWBTCPL(XWBTSKT,3) ;updt RPC BROKER SITE PARAMETER record as RUNNING
|
---|
10 | D MARKER^XWBTCP(XWBTSKT,-1) ;Clear marker
|
---|
11 | ;
|
---|
12 | D LISTEN^%ZISTCPS(XWBTSKT,"NT^XWBTCPM","D STAT^XWBTCPM1("_XWBTSKT_")")
|
---|
13 | ;
|
---|
14 | S %=$$SEMAPHOR^XWBTCPL(XWBTSKT,"UNLOCK") ; destroy 'running flag'
|
---|
15 | D UPDTREC^XWBTCPL(XWBTSKT,6) ;updt RPC BROKER SITE PARAMETER record as STOPPED
|
---|
16 | Q
|
---|
17 | ;
|
---|
18 | OLD ;Call the old style broker
|
---|
19 | ;XWBRBUF setup in XWBTCPM
|
---|
20 | N XWBTCNT
|
---|
21 | S XWBTCNT=0
|
---|
22 | D READCONN ;Get the rest of the connect msg
|
---|
23 | ; -- msg should be: action^client IP^client port^token
|
---|
24 | I $P(MSG,"^")="TCPconnect" D
|
---|
25 | . N DZ,%T,NATIP S DZ="",%T=0
|
---|
26 | . ;Get the peer and use that IP, Allow use thru a NAT box.
|
---|
27 | . S NATIP=$$GETPEER^%ZOSV S:'$L(NATIP) NATIP=$P(MSG,"^",2)
|
---|
28 | . I NATIP'=$P(MSG,"^",2) S $P(MSG,"^",2)=NATIP
|
---|
29 | . I '$$NEWJOB^XWBTCPM D LOG("No New Jobs"),QSND("reject") Q
|
---|
30 | . ;Keep the current job & Device.
|
---|
31 | . ;just call the old server code. Uses a extra socket.
|
---|
32 | . D QSND("accept"),LOG("accept")
|
---|
33 | . D EN^XWBTCPC($P(MSG,"^",2),$P(MSG,"^",3),$P(DZ,"^"),XWBVER,$P(MSG,"^",4))
|
---|
34 | Q
|
---|
35 | ;
|
---|
36 | READCONN ;Read the rest of the connect message
|
---|
37 | N CON,VL,LEN,MSG2
|
---|
38 | S CON=$$BREAD(6,XWBTIME) I CON="" S CON="Timeout" D LOG(CON) Q
|
---|
39 | I $E(CON,6)="|" D
|
---|
40 | . S VL=$$BREAD(1),VL=$A(VL)
|
---|
41 | . S XWBVER=$$BREAD(VL)
|
---|
42 | . S LEN=$$BREAD(5)
|
---|
43 | . S MSG=$$BREAD(+LEN)
|
---|
44 | E S X=$E(CON,6),LEN=$E(CON,1,5)-1,MSG2=$$BREAD(LEN),MSG=X_MSG2,XWBVER=0
|
---|
45 | D LOG("Connect: "_MSG)
|
---|
46 | Q
|
---|
47 | ;
|
---|
48 | BREAD(L,TO) ;Buffer read
|
---|
49 | S XWBTIME(1)=$G(TO,5)
|
---|
50 | Q $$BREAD^XWBRW(L)
|
---|
51 | ;
|
---|
52 | QSND(H) ;Quick send
|
---|
53 | D QSND^XWBRW(H)
|
---|
54 | Q
|
---|
55 | LOG(H) ;
|
---|
56 | D:$G(XWBDEBUG) LOG^XWBDLOG(H)
|
---|
57 | Q
|
---|
58 | ;
|
---|
59 | NODE(P) ;Get Listener node, XWBENV must be set first
|
---|
60 | N X,Y,BV
|
---|
61 | I '$D(XWBENV) D GETENV^%ZOSV S XWBENV=Y
|
---|
62 | S BV=$P(XWBENV,"^",4)
|
---|
63 | S IX1=$O(^%ZIS(14.7,"B",BV,0)) I IX1'>0 Q "Box-Vol 1"
|
---|
64 | S IX1=$O(^XWB(8994.1,1,7,"B",IX1,0)) I IX1'>0 Q "Box-Vol 2"
|
---|
65 | S IX2=$O(^XWB(8994.1,1,7,IX1,1,"B",P,0)) I IX2'>0 Q "Port"
|
---|
66 | S X=$G(^XWB(8994.1,1,7,IX1,1,IX2,0))
|
---|
67 | Q X
|
---|
68 | ;
|
---|
69 | STAT(P) ;Check if should stop.
|
---|
70 | ;Called from ZRULE in %ZISTCPS
|
---|
71 | N X
|
---|
72 | S X=$$NODE(P)
|
---|
73 | S ZISQUIT=($P(X,"^",2)>3) ;Status Stop
|
---|
74 | Q
|
---|