| 1 | XWBCAGNT ;ISC-SF/EG,RWF - Connect to Remote TCP Client Agent ;2/12/98  16:15<<= NOT VERIFIED >
 | 
|---|
| 2 |  ;;1.1;RPC BROKER;**2**;Mar 28, 1997
 | 
|---|
| 3 |  Q
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | CMD(XWBRET,QUES,PARAM) ;Call daemon and get responce <e.f.>
 | 
|---|
| 6 |  N IPA,SOCK S XWBRET="",IPA=$G(IO("IP")),SOCK=9200 Q:IPA="" 0
 | 
|---|
| 7 |  I $G(IO)="" D HOME^%ZIS
 | 
|---|
| 8 |  D CALL^%ZISTCP(IPA,SOCK,3) I POP Q 0
 | 
|---|
| 9 |  D SEND(QUES,$G(PARAM)),REC(.XWBRET)
 | 
|---|
| 10 |  D CLOSE^%ZISTCP
 | 
|---|
| 11 |  Q 1
 | 
|---|
| 12 |  ;
 | 
|---|
| 13 | OPEN(IP,SKT) ; - connect to remote <extrinsic function>
 | 
|---|
| 14 |  D HOME^%ZIS:'$D(IO(0)),SAVDEV^%ZISUTL("XWBCAGENT HOME")
 | 
|---|
| 15 |  D CALL^%ZISTCP(IP,SKT,3)
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 |  ;
 | 
|---|
| 18 | SEND(S,P) ; - send message <procedure>
 | 
|---|
| 19 |  N $ETRAP S $ETRAP="S $EC="""" Q"
 | 
|---|
| 20 |  S S=$$SETMSG(S,$G(P))
 | 
|---|
| 21 |  U IO W S,!
 | 
|---|
| 22 |  Q
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | REC(BODY) ; - receive message <extrinsic function>
 | 
|---|
| 25 |  N LEN,Y
 | 
|---|
| 26 |  U IO S BODY("HDR")="~",BODY("HDR")=$$SREAD(5) ; -- get header
 | 
|---|
| 27 |  Q:BODY("HDR")'="{XWB}"  ; -- quit if no responce
 | 
|---|
| 28 |  S LEN=$$SREAD(5),BODY("ID")=$$SREAD(+LEN) ; -- get PID
 | 
|---|
| 29 |  S LEN=$$SREAD(5),BODY(0)=$$SREAD(+LEN) ; -- get rpc name
 | 
|---|
| 30 |  S LEN=$$SREAD(5) D:+LEN BREAD(+LEN,.BODY) ; -- get rpc parameter
 | 
|---|
| 31 |  S LEN=$$SREAD(1) ; -- read terminator
 | 
|---|
| 32 |  Q
 | 
|---|
| 33 |  ;
 | 
|---|
| 34 | SETMSG(S,PAR) ; - format message <extrinsic function>
 | 
|---|
| 35 |  N L,F,PID
 | 
|---|
| 36 |  IF ('$D(S))!('$D(PAR)) Q ""
 | 
|---|
| 37 |  S F=100000
 | 
|---|
| 38 |  S PID=$J
 | 
|---|
| 39 |  S L=$L(PID)
 | 
|---|
| 40 |  S PID=$E(F+L,2,6)_PID
 | 
|---|
| 41 |  S L=$L(S),S=$E(F+L,2,6)_S
 | 
|---|
| 42 |  S L=$L(PAR),PAR=$E(F+L,2,6)_PAR
 | 
|---|
| 43 |  Q "{XWB}"_PID_S_PAR_$C(23)
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 | CLOSE ; - close device <procedure>
 | 
|---|
| 46 |  D CLOSE^%ZISTCP,USE^%ZISUTL("XWBCAGENT HOME"),RMDEV^%ZISUTL("XWBCAGENT HOME")
 | 
|---|
| 47 |  Q
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 | BREAD(L,B) ;read tcp buffer, L is length <extrinsic function>
 | 
|---|
| 50 |  N E,X,T,DONE,XWBTIME,Y,IX,$ETRAP S $ETRAP="S $EC="""" Q"
 | 
|---|
| 51 |  S (T,E,DONE)=0,XWBTIME=10,IX=1,B=L,L=$S(L<256:L,1:128) Q:L'>0 ""
 | 
|---|
| 52 | BR2 R X#L:XWBTIME
 | 
|---|
| 53 |  S E=X
 | 
|---|
| 54 |  IF $L(E)<L F  D  Q:DONE
 | 
|---|
| 55 |  . IF $L(E)=L S DONE=1 Q
 | 
|---|
| 56 |  . R X#(L-$L(E)):XWBTIME
 | 
|---|
| 57 |  . S E=E_X
 | 
|---|
| 58 |  S B(IX)=E,T=T+$L(E)
 | 
|---|
| 59 |  I T'=B S L=$S(B-T>255:128,1:B-T),IX=IX+1 G BR2
 | 
|---|
| 60 |  Q
 | 
|---|
| 61 |  ;
 | 
|---|
| 62 | SREAD(L) ;read short tcp buffer, L is length <extrinsic function>
 | 
|---|
| 63 |  N C,E,X,DONE,XWBTIME,$ETRAP S $ETRAP="S $EC="""" Q """""
 | 
|---|
| 64 |  S (C,E,DONE)=0,XWBTIME=10 Q:L'>0 ""
 | 
|---|
| 65 |  R X#L:XWBTIME
 | 
|---|
| 66 |  S E=X IF $L(E)<L R X#(L-$L(E)):XWBTIME S E=E_X
 | 
|---|
| 67 |  Q E
 | 
|---|
| 68 |  ;
 | 
|---|