source: FOIAVistA/trunk/r/MAILMAN-XM/XMKPRD.m@ 1068

Last change on this file since 1068 was 628, checked in by George Lilly, 15 years ago

initial load of FOIAVistA 6/30/08 version

File size: 4.0 KB
Line 
1XMKPRD ;ISC-SF/GMB-DNS Interface ;07/11/2002 08:09
2 ;;8.0;MailMan;;Jun 28, 2002
3NEXTIPF(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
19IPADDR(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)
44SAMESITE(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
51SHOW(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
56NEXTIP(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 ***
66CONNECT(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
81NEXTIPR(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
96TRYIP(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
Note: See TracBrowser for help on using the repository browser.