HLMA4	;OIFO-O/RJH-DON'T PING VIE ;03/29/2007  16:21
	;;1.6;HEALTH LEVEL SEVEN;**122**;Oct 13, 1995;Build 14
	;Per VHA Directive 2004-038, this routine should not be modified.
	;
	Q
DONTPING(PAR)	;
	; check the data stored in file #869.3 related multiples to
	; to see if ping is allowed for the Ping option, PING^HLMA
	; return 1: don't ping this link.
	; return 0: ok to ping the link.
	;
	N ONE,LINE,PINGOK
	S HLQUIET=$G(HLQUIET)
	;
	; the only one entry in file #869.3
	S ONE=$O(^HLCS(869.3,0))
	;
	D PINGIP
	Q:PINGOK 0
	;
	D DONTPORT
	Q:'PINGOK 1
	;
	D DONTDOMN
	Q:'PINGOK 1
	;
	D DONTNAME
	Q:'PINGOK 1
	;
	D DONTIP
	Q:'PINGOK 1
	;
	D PINGDOMN
	Q:PINGOK 0
	;
	I 'HLQUIET S HLCS="This link is not allowed to ping"
	Q 1
	;
PINGIP	;
	; retrieve the "Ping IP" multiple, which are ok to ping
	S PINGOK=0
	S LINE=0
	F  S LINE=$O(^HLCS(869.3,ONE,7,LINE)) Q:'LINE  D  Q:PINGOK
	. N DATAS,COUNT,DATA
	. S DATAS=$G(^HLCS(869.3,ONE,7,LINE,0))
	. S COUNT=$L(DATAS,",")
	. F I=1:1:COUNT D  Q:PINGOK
	.. S DATA=$P(DATAS,",",I),DATA=$TR(DATA," ","")
	.. I DATA=HLTCPADD S PINGOK=1
	Q
	;
DONTPORT	;
	; retrieve the "Don't Ping Port" multiple, which are not
	; allowed to ping
	S PINGOK=1
	S LINE=0
	F  S LINE=$O(^HLCS(869.3,ONE,9,LINE)) Q:'LINE  D  Q:'PINGOK
	. N DATAS,COUNT,DATA
	. S DATAS=$G(^HLCS(869.3,ONE,9,LINE,0))
	. S COUNT=$L(DATAS,",")
	. F I=1:1:COUNT D  Q:'PINGOK
	.. S DATA=$P(DATAS,",",I),DATA=$TR(DATA," ","")
	.. I DATA=HLTCPORT D
	... S PINGOK=0
	... I 'HLQUIET D
	.... S HLCS="This link with 'PORT' as '"_HLTCPORT
	.... S HLCS=HLCS_"' is not allowed to ping"
	Q
	;
DONTDOMN	;
	; retrieve the "Don't Ping Domain (Full)" multiple,
	; which are not allowed to ping
	;
	N HLDOM
	S PINGOK=1
	S HLDOM=$P(^HLCS(870,HLDP,0),U,7)
	S HLDOM("DNS")=$P($G(^HLCS(870,+$G(HLDP),0)),"^",8)
	I 'HLDOM,($L(HLDOM("DNS"),".")<3) Q
	;
	I HLDOM S HLDOM=$P(^DIC(4.2,HLDOM,0),U)
	;
	S LINE=0
	F  S LINE=$O(^HLCS(869.3,ONE,12,LINE)) Q:'LINE  D  Q:'PINGOK
	. N DATAS,COUNT,DATA,DNSDOMN,MAILDOMN
	. S DATAS=$G(^HLCS(869.3,ONE,12,LINE,0))
	. S COUNT=$L(DATAS,",")
	. F I=1:1:COUNT D  Q:'PINGOK
	.. S DATA=$P(DATAS,",",I),DATA=$TR(DATA," ","")
	.. ; set PINGOK to 0 if domain is not allowed to ping
	.. I ($L(HLDOM("DNS"),".")>2),HLDOM("DNS")=DATA D  Q
	... D SETHLCS(HLDOM("DNS"),"DNS DOMAIN")
	.. I $L(HLDOM)>5,HLDOM=DATA D
	... D SETHLCS(HLDOM,"MAILMAN DOMAIN")
	Q
	;
SETHLCS(DATA,TYPE)	;
	; to be called from sub-routine DONTDOMN
	S PINGOK=0
	I 'HLQUIET D
	. S HLCS="This link with '"_TYPE_"' as '"_DATA
	. S HLCS=HLCS_"' is not allowed to ping"
	Q
	;
DONTNAME	;
	; retrieve the "Don't Ping Link Name (Partial)" multiple,
	; which are not allowed to ping
	;
	N LINKNAME
	S PINGOK=1
	;
	S LINKNAME=$P(^HLCS(870,HLDP,0),U,1)
	;
	S LINE=0
	F  S LINE=$O(^HLCS(869.3,ONE,10,LINE)) Q:'LINE  D  Q:'PINGOK
	. N DATAS,COUNT,DATA
	. S DATAS=$G(^HLCS(869.3,ONE,10,LINE,0))
	. S COUNT=$L(DATAS,",")
	. F I=1:1:COUNT D  Q:'PINGOK
	.. S DATA=$P(DATAS,",",I),DATA=$TR(DATA," ","")
	.. I LINKNAME[DATA D
	... S PINGOK=0
	... I 'HLQUIET D
	.... S HLCS="This link 'NAME' containing name-stub"
	.... S HLCS=HLCS_" '"_DATA_"' is not allowed to ping"
	Q
	;
DONTIP	;
	; retrieve the "Don't Ping IP" multiple, which are not 
	; allowed to ping
	;
	S PINGOK=1
	;
	S LINE=0
	F  S LINE=$O(^HLCS(869.3,ONE,11,LINE)) Q:'LINE  D  Q:'PINGOK
	. N DATAS,COUNT,DATA
	. S DATAS=$G(^HLCS(869.3,ONE,11,LINE,0))
	. S COUNT=$L(DATAS,",")
	. F I=1:1:COUNT D  Q:'PINGOK
	.. S DATA=$P(DATAS,",",I),DATA=$TR(DATA," ","")
	.. I DATA=HLTCPADD D
	... S PINGOK=0
	... I 'HLQUIET D
	.... S HLCS="This link with 'IP' as '"_HLTCPADD
	.... S HLCS=HLCS_"' is not allowed to ping"
	Q
	;
PINGDOMN	;
	; retrieve the "Ping Domain (Partial)" multiple,
	; which is ok to ping, data could be partial domain.
	;
	N HLDOM
	S PINGOK=0
	;
	S HLDOM=$P(^HLCS(870,HLDP,0),U,7)
	S HLDOM("DNS")=$P($G(^HLCS(870,+$G(HLDP),0)),"^",8)
	I 'HLDOM,($L(HLDOM("DNS"),".")<3) Q
	;
	I HLDOM S HLDOM=$P(^DIC(4.2,HLDOM,0),U)
	;
	S LINE=0
	F  S LINE=$O(^HLCS(869.3,ONE,8,LINE)) Q:'LINE  D  Q:PINGOK
	. N DATAS,COUNT,DATA,DNSDOMN,MAILDOMN
	. S DATAS=$G(^HLCS(869.3,ONE,8,LINE,0))
	. S COUNT=$L(DATAS,",")
	. F I=1:1:COUNT D  Q:PINGOK
	.. S DATA=$P(DATAS,",",I),DATA=$TR(DATA," ","")
	.. ; set PINGOK to 1 if domain is allowed to ping
	.. I ($L(HLDOM("DNS"),".")>2),HLDOM("DNS")[DATA S PINGOK=1 Q
	.. I $L(HLDOM)>5,HLDOM[DATA S PINGOK=1
	Q
	;
