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