| 1 | XMKPRD ;ISC-SF/GMB-DNS Interface ;07/11/2002  08:09
 | 
|---|
| 2 |  ;;8.0;MailMan;;Jun 28, 2002
 | 
|---|
| 3 | NEXTIPF(XMSITE,XMIPT,XMIPLIST) ; Function returns next IP address to try.
 | 
|---|
| 4 |  ; IN:
 | 
|---|
| 5 |  ; XMSITE   - .01 field of domain in file 4.2 (not a synonym)
 | 
|---|
| 6 |  ; XMIPT    - List of IP addresses, separated by ",", already tried
 | 
|---|
| 7 |  ; XMIPLIST - (optional) List of IP addresses, separated by ",", to try
 | 
|---|
| 8 |  I '$D(XMIPLIST) D
 | 
|---|
| 9 |  . D SHOW(42260) ;Call DNS for IP Address list ...
 | 
|---|
| 10 |  . S XMIPLIST=$$IPADDR(XMSITE)
 | 
|---|
| 11 |  . D SHOW($S(XMIPLIST="":42261,1:42262),XMIPLIST) ;Returned: Nothing!/|1|
 | 
|---|
| 12 |  I XMIPLIST="" Q ""
 | 
|---|
| 13 |  I $G(XMIPT)="" Q $P(XMIPLIST,",")
 | 
|---|
| 14 |  N XMJ,XMIP
 | 
|---|
| 15 |  F XMJ=1:1:$L(XMIPT,",") D  Q:XMIP=""!(","_XMIPT_","'[(","_XMIP_","))
 | 
|---|
| 16 |  . S XMIP=$P(XMIPT,",",XMJ)
 | 
|---|
| 17 |  . D NEXTIP(.XMIP,.XMIPLIST)
 | 
|---|
| 18 |  Q XMIP
 | 
|---|
| 19 | IPADDR(XMSITE) ;
 | 
|---|
| 20 |  N XMIPARY,XMIP,XMIPSITE,XMI,XMIPREC,XMIPLIST
 | 
|---|
| 21 |  D MAIL^XLFNSLK(.XMIPARY,XMSITE)
 | 
|---|
| 22 |  S XMI=0
 | 
|---|
| 23 |  F  S XMI=$O(XMIPARY(XMI)) Q:'XMI  D
 | 
|---|
| 24 |  . S XMIPREC=XMIPARY(XMI)
 | 
|---|
| 25 |  . S XMIP=$P(XMIPREC,U,2)
 | 
|---|
| 26 |  . ;I XMIP'?1.N1"."1.N1"."1.N1".".E D  Q
 | 
|---|
| 27 |  . I XMIP="" D  Q
 | 
|---|
| 28 |  . . D SHOW(42260.1,XMIPREC) ;Ignore '|1|' - no IP address
 | 
|---|
| 29 |  . S XMIPSITE=$$UP^XLFSTR($P(XMIPREC,U,1))
 | 
|---|
| 30 |  . ; Accept whatever DNS returns, except for FORUM.  We accept FORUM if
 | 
|---|
| 31 |  . ; we're trying to get to FORUM, but we don't want messages destined
 | 
|---|
| 32 |  . ; for another site to be routed through FORUM.  If this is a non-VA
 | 
|---|
| 33 |  . ; site, then it's OK to route through FORUM.
 | 
|---|
| 34 |  . I ^XMB("NETNAME")[".VA.GOV",XMSITE'["FORUM.VA.GOV",XMIPSITE["FORUM.VA.GOV" D  Q
 | 
|---|
| 35 |  . . D SHOW(42260.2,XMIPREC) ;Ignore '|1|' - that's a different site
 | 
|---|
| 36 |  . ;I '$$SAMESITE(XMIPSITE,XMSITE) D  Q
 | 
|---|
| 37 |  . ;. D SHOW(42260.2,XMIPREC) ;Ignore '|1|' - that's a different site
 | 
|---|
| 38 |  . I ","_$G(XMIPLIST)_","[(","_XMIP_",") D  Q
 | 
|---|
| 39 |  . . D SHOW(42260.3,XMIPREC) ;Ignore '|1|' - already have that IP address
 | 
|---|
| 40 |  . D SHOW(42260.4,XMIPREC) ;Accept '|1|'
 | 
|---|
| 41 |  . I $G(XMIPLIST)="" S XMIPLIST=XMIP Q
 | 
|---|
| 42 |  . S XMIPLIST=XMIPLIST_","_XMIP
 | 
|---|
| 43 |  Q $G(XMIPLIST)
 | 
|---|
| 44 | SAMESITE(X,XMSITE) ;
 | 
|---|
| 45 |  N DIC,Y,D
 | 
|---|
| 46 |  I $E(X,$L(X))="." S X=$E(X,1,$L(X)-1)
 | 
|---|
| 47 |  S DIC="^DIC(4.2,",DIC(0)="FMXZ",D="B^C"
 | 
|---|
| 48 |  F  D MIX^DIC1 Q:Y>0!(X'[".")  S X=$P(X,".",2,99)
 | 
|---|
| 49 |  I Y,Y(0,0)=XMSITE Q 1
 | 
|---|
| 50 |  Q 0
 | 
|---|
| 51 | SHOW(XMDIALOG,XM1) ;
 | 
|---|
| 52 |  I $D(ZTQUEUED)!'$G(XMC("PLAY")) Q
 | 
|---|
| 53 |  I +XMDIALOG=XMDIALOG W !,$$EZBLD^DIALOG(XMDIALOG,$G(XM1)) Q
 | 
|---|
| 54 |  W !,XMDIALOG
 | 
|---|
| 55 |  Q
 | 
|---|
| 56 | NEXTIP(XMIP,XMIPLIST) ;
 | 
|---|
| 57 |  N XMI
 | 
|---|
| 58 |  F XMI=1:1:$L(XMIPLIST,",") Q:$P(XMIPLIST,",",XMI)=XMIP
 | 
|---|
| 59 |  I XMIP'=$P(XMIPLIST,",",XMI) S XMIP=$P(XMIPLIST,","),XMIPLIST=$P(XMIPLIST,",",2,99) Q
 | 
|---|
| 60 |  I XMI=1 S XMIPLIST=$P(XMIPLIST,",",2,99)
 | 
|---|
| 61 |  E  I XMI=$L(XMIPLIST,",") S XMIPLIST=$P(XMIPLIST,",",1,XMI-1)
 | 
|---|
| 62 |  E  S XMIPLIST=$P(XMIPLIST,",",1,XMI-1)_","_$P(XMIPLIST,",",XMI+1,99)
 | 
|---|
| 63 |  S XMIP=$P(XMIPLIST,","),XMIPLIST=$P(XMIPLIST,",",2,99)
 | 
|---|
| 64 |  Q
 | 
|---|
| 65 |  ; *** The following is not used ***
 | 
|---|
| 66 | CONNECT(XMSITE,XMIP,XMPORT) ; Function tries to connect to site.
 | 
|---|
| 67 |  ; Returns the IP address if success; 0 if failure
 | 
|---|
| 68 |  ; XMSITE - Site name to connect to
 | 
|---|
| 69 |  ; XMIP   - Site IP address to try first (optional).  If none given,
 | 
|---|
| 70 |  ;           or if attempt fails, DNS is called to retrieve address(es).
 | 
|---|
| 71 |  ; XMPORT - Port number to use (optional, default=25)
 | 
|---|
| 72 |  N XMIPLIST,XMOK
 | 
|---|
| 73 |  I '$G(XMPORT) S XMPORT=25
 | 
|---|
| 74 |  D SHOW("Connect to "_XMSITE_" on port "_XMPORT_$S($G(XMIP):", IP Address "_XMIP,1:""))
 | 
|---|
| 75 |  I $G(XMIP)="" D NEXTIPR(XMSITE,.XMIP,.XMIPLIST) Q:XMIP="" 0
 | 
|---|
| 76 |  S XMOK=0
 | 
|---|
| 77 |  F  D TRYIP(XMIP,.XMOK) Q:XMOK  D NEXTIPR(XMSITE,.XMIP,.XMIPLIST) Q:XMIP=""
 | 
|---|
| 78 |  Q:XMOK XMIP
 | 
|---|
| 79 |  D SHOW("Connect failed.  Try again later.")
 | 
|---|
| 80 |  Q 0
 | 
|---|
| 81 | NEXTIPR(XMSITE,XMIP,XMIPLIST) ; Routine returns next IP address to try
 | 
|---|
| 82 |  ; IN/OUT:
 | 
|---|
| 83 |  ; XMIP     - in:  Last IP address tried
 | 
|---|
| 84 |  ;            out: Next IP address to try
 | 
|---|
| 85 |  ; XMIPLIST - in:  (optional) List of IP addresses, separated by ",",
 | 
|---|
| 86 |  ;                 we haven't yet tried
 | 
|---|
| 87 |  ;            out: Same, but with XMIP (out) removed
 | 
|---|
| 88 |  I '$D(XMIPLIST) D
 | 
|---|
| 89 |  . D SHOW(42260) ;Call DNS for IP Address list ...
 | 
|---|
| 90 |  . S XMIPLIST=$$IPADDR(XMSITE)
 | 
|---|
| 91 |  . D SHOW($S(XMIPLIST="":42261,1:42262),XMIPLIST) ;Returned: Nothing!/|1|
 | 
|---|
| 92 |  I XMIPLIST="" S XMIP="" Q
 | 
|---|
| 93 |  I $G(XMIP)="" S XMIP=$P(XMIPLIST,","),XMIPLIST=$P(XMIPLIST,",",2,99) Q
 | 
|---|
| 94 |  D NEXTIP(.XMIP,.XMIPLIST)
 | 
|---|
| 95 |  Q
 | 
|---|
| 96 | TRYIP(XMIP,XMOK) ; Try the IP address, if it works, set XMOK=1
 | 
|---|
| 97 |  D SHOW("Trying "_XMIP)
 | 
|---|
| 98 |  D CALL^%ZISTCP(XMIP,XMPORT)
 | 
|---|
| 99 |  S XMOK='POP
 | 
|---|
| 100 |  I 'XMOK D SHOW("Attempt failed.")
 | 
|---|
| 101 |  Q
 | 
|---|