Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: XMKPR1

XMKPR1.m

Go to the documentation of this file.
XMKPR1 ;ISC-SF/GMB-^XMKPR (cont.) ;09/06/2002  09:11
 ;;8.0;MailMan;**3**;Jun 28, 2002
 ; Reference to ^XTV(8989.3 - IA #3749
SCRIPT(XMINST,XMSITE,XMB,XMOKTYPE) ; Get first/next Transmission Script
 ; XMINST   (in)  Pointer to domain file
 ; XMSITE   (in)  Name (.01 field) of domain pointed to by XMINST
 ; XMOKTYPE (in)  array of script types which are acceptable
 ; XMB      (out) XMB("SCR IEN")      Pointer to script within domain
 ;                XMB("FIRST SCRIPT") Pointer to first script tried
 ;                XMB("SCR REC")      Script zero node
 ;                XMB("ITERATIONS")   Number of cycles of scripts
 ;                XMB("TRIES")        Number of tries with one script
 ;                XMB("IP TRIED")     IP addresses tried so far
 ; If no transmission scripts are prioritized use old data/defaults.
 ; If failure, then XMB("SCR IEN")=0
 ; XMPRI    Priority
 ; XMTYPE   Script type
 ; XMDEFALT Default script settings
 ; XMSLIST  Array of possible scripts
 ; XMSFIRST First possible script
 ; XMSNEXT  Next possible script
 N XMSLIST,XMSFIRST,XMSNEXT,XMPRI,XMTYPE,I,XMREC,XMIEN
 I $D(XMB("SCR REC")),(XMB("TRIES")+1)<$P(XMB("SCR REC"),U,3) D  Q
 . S XMB("TRIES")=XMB("TRIES")+1
 . D DEFAULT(XMINST,XMSITE,.XMB) ; refresh the script
 . ;I $G(ER)=25,$$USEDNS D NEXTIP(XMSITE,.XMB)
 . I $G(ER)=25!($P(XMB("SCR REC"),U,6)=""),$$USEDNS D NEXTIP(XMSITE,.XMB)
 ; We are here because the # attempts made is more than the max allowed,
 ; or because we are about to make our first attempt.
 ; In either case, we need a (next) script to try.
 I '$D(XMOKTYPE) S (XMOKTYPE("SMTP"),XMOKTYPE("TCPCHAN"),XMOKTYPE("NONE"))=""
 S XMIEN=0
 F  S XMIEN=$O(^DIC(4.2,XMINST,1,XMIEN)) Q:XMIEN'>0  D
 . S XMREC=$G(^DIC(4.2,XMINST,1,XMIEN,0))
 . Q:$P(XMREC,U,7)  ; Out of service
 . S XMTYPE=$P(XMREC,U,4)
 . S:XMTYPE="" XMTYPE="NONE"
 . Q:'$D(XMOKTYPE(XMTYPE))
 . S XMPRI=$P(XMREC,U,2) S:XMPRI="" XMPRI=9999
 . S XMSLIST(XMPRI,XMIEN)=XMIEN
 I '$D(XMSLIST) S XMB("SCR IEN")=0 Q
 S XMIEN=+$G(XMB("SCR IEN"))
 S XMSFIRST="XMSLIST"
 S XMSFIRST=$Q(@XMSFIRST)
 I XMIEN=0!('$D(^DIC(4.2,XMINST,1,XMIEN,0))) D  ; First attempt, so take the first script
 . S XMB("SCR IEN")=@XMSFIRST
 . S XMB("FIRST SCRIPT")=XMB("SCR IEN")
 . S XMB("ITERATIONS")=0
 E  D  ; Try the next script after the one we just tried.
 . ; If that was the last one, go back to the first.
 . S XMPRI=$P(^DIC(4.2,XMINST,1,XMIEN,0),U,2) S:XMPRI="" XMPRI=9999
 . S XMSNEXT="XMSLIST(XMPRI,XMIEN)"
 . S XMSNEXT=$Q(@XMSNEXT)
 . I XMSNEXT="" D
 . . S XMB("SCR IEN")=@XMSFIRST
 . . S XMB("ITERATIONS")=XMB("ITERATIONS")+1
 . E  S XMB("SCR IEN")=@XMSNEXT
 D INITSCR(XMINST,XMSITE,.XMB)
 Q
NEXTIP(XMSITE,XMB) ;
 I ","_$G(XMB("IP TRIED"))_","[(","_$P(XMB("SCR REC"),U,6)_",")!($P(XMB("SCR REC"),U,6)="") D
 . N XMIP
 . S XMIP=$$NEXTIPF^XMKPRD(XMSITE,$G(XMB("IP TRIED")))
 . I XMIP'="" S $P(XMB("SCR REC"),U,6)=XMIP
 I $P(XMB("SCR REC"),U,6)="" S $P(XMB("SCR REC"),U,6)=$P($G(XMB("IP TRIED")),",",1)
 I $G(XMB("IP TRIED"))="" S XMB("IP TRIED")=$P(XMB("SCR REC"),U,6) Q
 I ","_XMB("IP TRIED")_","[(","_$P(XMB("SCR REC"),U,6)_",") Q
 S XMB("IP TRIED")=XMB("IP TRIED")_","_$P(XMB("SCR REC"),U,6)
 Q
INITSCR(XMINST,XMSITE,XMB) ;
 S:'$D(XMB("ITERATIONS")) XMB("ITERATIONS")=0
 S XMB("TRIES")=0
 S:'$D(XMB("FIRST SCRIPT")) XMB("FIRST SCRIPT")=XMB("SCR IEN")
 S XMB("IP TRIED")=""
 D DEFAULT(XMINST,XMSITE,.XMB)
 S:XMB("IP TRIED")="" XMB("IP TRIED")=$P(XMB("SCR REC"),U,6)
 Q
DEFAULT(XMINST,XMSITE,XMB) ;
 N XMDEFALT,I
 ; Pickup data from selected script
 S XMB("SCR REC")=^DIC(4.2,XMINST,1,XMB("SCR IEN"),0)
 ;I $P(XMB("SCR REC"),U,6)="",$$USEDNS D NEXTIP(XMSITE,.XMB)
 ; Create defaults
 S XMDEFALT=^DIC(4.2,XMINST,0)
 ; Piece 17=Physical link device; Piece 12=Host IP Address;
 ; $P(^XMB(1,1,"NETWORK"),U,1) is the number of attempts before failure
 S XMDEFALT=$P(XMDEFALT,U)_"^0^"_$S(+$G(^XMB(1,1,"NETWORK")):+^("NETWORK"),1:10)_"^SMTP^"_$P(XMDEFALT,U,17)_U_$P(XMDEFALT,U,12)
 ;
 I $P(XMDEFALT,U,5)="" D
 . N XMIO
 . S XMIO=$P($G(^XMB(1,1,"NETWORK")),U,5)
 . I XMIO'="" S $P(XMDEFALT,U,5)=XMIO
 ;Use defaults if no data in transmission script fields
 F I=3:1:$L(XMDEFALT,U) S:$P(XMB("SCR REC"),U,I)="" $P(XMB("SCR REC"),U,I)=$P(XMDEFALT,U,I)
 Q
USEDNS() ; Function returns 1 if we can use DNS; 0 if we can't.
 Q:'$P($G(^XMB(1,1,"NETWORK")),U,2) 0  ; Site says don't use DNS
 Q:$T(^XLFNSLK)="" 0  ; DNS API is not present
 Q:$P($G(^XTV(8989.3,1,"DNS")),U,1)="" 0  ; No DNS IP address
 Q 1