[613] | 1 | XMS ;ISC-SF/GMB-SMTP Send ;07/11/2002 07:52
|
---|
| 2 | ;;8.0;MailMan;;Jun 28, 2002
|
---|
| 3 | ENTER ;
|
---|
| 4 | ; Variables
|
---|
| 5 | ; XMINST Institution number
|
---|
| 6 | ; XMSITE Institution name
|
---|
| 7 | ; XMIO same as ZTIO
|
---|
| 8 | D INIT
|
---|
| 9 | ; Fall through...
|
---|
| 10 | SEND ;
|
---|
| 11 | S XMC("DIR")="S"
|
---|
| 12 | S:'$D(XMC("TURN")) XMC("TURN")=0
|
---|
| 13 | D SYNCH Q:ER
|
---|
| 14 | I $D(XMC("CHRISTEN")) D CHRISTN,TESTLNK Q
|
---|
| 15 | I $D(XMC("TEST")) D TESTLNK Q
|
---|
| 16 | D HELO(XMINST,XMSITE) L -^DIC(4.2,XMINST,0) Q:ER
|
---|
| 17 | D PROCESS(XMINST,.XMB)
|
---|
| 18 | D TURN(XMINST)
|
---|
| 19 | D QUIT
|
---|
| 20 | Q
|
---|
| 21 | INIT ;
|
---|
| 22 | S ER=0
|
---|
| 23 | S $P(^XMBS(4.2999,XMINST,3),U,6)=$E(IO,1,9)_" "_XMPROT
|
---|
| 24 | S:'$D(XMC("START")) XMC("START")=$$TSTAMP^XMXUTIL1-.001
|
---|
| 25 | I '$D(DT) D DT^DICRW
|
---|
| 26 | S:'$D(XMC("BATCH")) XMC("BATCH")=0
|
---|
| 27 | S XMTLER=0
|
---|
| 28 | Q
|
---|
| 29 | SYNCH ; Recv: "220 REMOTE.MED.VA.GOV MailMan 8.0 ready"
|
---|
| 30 | I XMC("BATCH") S XMC("MAILMAN")=+$P($T(XMS+1),";",3) Q
|
---|
| 31 | S XMC("MAILMAN")=0
|
---|
| 32 | N XMI,XMX
|
---|
| 33 | F XMI=1:1:5 D Q:ER Q:$E(XMRG)=2
|
---|
| 34 | . X XMREC Q:ER
|
---|
| 35 | . S XMX=$P(XMRG," MailMan ",2)
|
---|
| 36 | . I XMX>4,XMX[" ready" S XMC("MAILMAN")=+XMX
|
---|
| 37 | . I $E(XMRG)'=2 S XMSG="NOOP" X XMSEN Q
|
---|
| 38 | Q
|
---|
| 39 | HELO(XMINST,XMSITE) ;
|
---|
| 40 | ; Send: "HELO LOCAL.MED.VA.GOV <security num>"
|
---|
| 41 | ; Recv: "250 OK REMOTE.MED.VA.GOV <security num> [8.0,DUP,SER,FTP]"
|
---|
| 42 | N XMINREC,XMSVAL,I
|
---|
| 43 | S XMINREC=^DIC(4.2,XMINST,0)
|
---|
| 44 | S XMSVAL=$P(XMINREC,U,15) ; Security code
|
---|
| 45 | I XMSVAL L +^DIC(4.2,XMINST,0):0 E D Q
|
---|
| 46 | . D ERTRAN^XMC1(42350) ;Domain file locked.
|
---|
| 47 | S XMSG="HELO "_^XMB("NETNAME")_$S('XMSVAL:"",1:"<"_XMSVAL_">") X XMSEN
|
---|
| 48 | I ER D ERTRAN^XMC1(42351,XMSG) Q ;HELO SEND failed: |1|
|
---|
| 49 | Q:XMC("BATCH")
|
---|
| 50 | X XMREC I ER D ERTRAN^XMC1(42352) Q ;HELO RECEIVE failed.
|
---|
| 51 | I $E(XMRG)'=2 D Q
|
---|
| 52 | . D ERTRAN^XMC1(42353,^XMB("NETNAME"),XMSITE) ;|1| not recognized by |2|
|
---|
| 53 | ;I $P(XMRG,"[",2)'="" S XMC("CAPABLE")=$P(XMRG,"[",2)
|
---|
| 54 | F I=1:1:$L(XMRG," ") Q:$P(XMRG," ",I)["."
|
---|
| 55 | S XMC("HELO SEND")=$P(XMRG," ",I)
|
---|
| 56 | Q:'XMSVAL
|
---|
| 57 | S XMSVAL=$P($P(XMRG,"<",2),">")
|
---|
| 58 | I XMSVAL<1000000 D Q
|
---|
| 59 | . N XMPARM,XMINSTR
|
---|
| 60 | . S XMSG="500 Invalid domain validation response" X XMSEN
|
---|
| 61 | . S XMPARM(1)=XMSITE,XMINSTR("FROM")="POSTMASTER"
|
---|
| 62 | . D TASKBULL^XMXBULL(.5,"XMVALBAD",.XMPARM,,,.XMINSTR)
|
---|
| 63 | . S ER=1,ER("MSG")=XMSG
|
---|
| 64 | ;Double set below prevents replicated ^DIC from
|
---|
| 65 | ;going out of synch when link is down.
|
---|
| 66 | S ^DIC(4.2,XMINST,0)=XMINREC,$P(XMINREC,U,15)=XMSVAL,^(0)=XMINREC
|
---|
| 67 | Q
|
---|
| 68 | PROCESS(XMINST,XMB) ;
|
---|
| 69 | N XMK,XMZ
|
---|
| 70 | S XMK=XMINST+1000
|
---|
| 71 | I '$$BMSGCT^XMXUTIL(.5,XMK) D Q
|
---|
| 72 | . D DOTRAN^XMC1(42358) ; There are no messages in the queue to send
|
---|
| 73 | ; First send msgs the postmaster has flagged to go first
|
---|
| 74 | ; (NETWORK MESSAGE FLAG) set to 1), then send rest.
|
---|
| 75 | F S XMZ=$$NEXT(XMK) Q:XMZ="" D Q:ER
|
---|
| 76 | . L +^XMNET(XMINST,XMZ):0 E D Q
|
---|
| 77 | . . S XMC("NOREQUEUE")=1
|
---|
| 78 | . . D ERTRAN^XMC1(42354) ;Queue being transmitted by another job - Aborting now.
|
---|
| 79 | . D SENDMSG^XMS1(XMK,XMZ,.XMB)
|
---|
| 80 | . I '$D(^XMB(3.9,XMZ,1,"AQUEUE",XMINST)) D ZAPIT^XMXMSGS2(.5,XMK,XMZ) H 1
|
---|
| 81 | . I ER,$G(ER("NONFATAL")) D
|
---|
| 82 | . . K ER S ER=0
|
---|
| 83 | . . I $D(^XMB(3.7,.5,2,XMK,1,XMZ,0)) D XP^XMXMSGS1(.5,XMK,XMZ,2) ; Set xmit priority LOW
|
---|
| 84 | . . D RSET
|
---|
| 85 | . L -^XMNET(XMINST,XMZ)
|
---|
| 86 | Q
|
---|
| 87 | NEXT(XMK) ; Returns the next message (XMZ) in basket XMK to go out.
|
---|
| 88 | ; The next XMZ flagged 'high-priority' is next.
|
---|
| 89 | ; Barring that, the next 'regular-priority' XMZ is next.
|
---|
| 90 | ; Barring that, the next 'low-priority' XMZ is next.
|
---|
| 91 | ; If an XMZ was involved in the failure of the previous transmission,
|
---|
| 92 | ; that XMZ will be 'low-priority'.
|
---|
| 93 | N XMZ,XMOK
|
---|
| 94 | S XMZ=$$NEXTPRI(XMK,1) Q:XMZ XMZ ; Get next high priority msg, if any
|
---|
| 95 | S (XMZ,XMOK)=0 ; Get next regular priority msg, if any
|
---|
| 96 | F S XMZ=$O(^XMB(3.7,.5,2,XMK,1,XMZ)) Q:'XMZ D Q:XMOK
|
---|
| 97 | . Q:$D(^XMB(3.7,.5,2,XMK,1,"AC",2,XMZ)) ; Skip if low priority
|
---|
| 98 | . S:$$NEXTOK(XMK,XMZ) XMOK=1 ; Check msg OK
|
---|
| 99 | Q:XMZ XMZ
|
---|
| 100 | Q $$NEXTPRI(XMK,2) ; Get next low priority msg, if any
|
---|
| 101 | NEXTPRI(XMK,XMTPRI) ; Get the next high/low priority message
|
---|
| 102 | N XMZ
|
---|
| 103 | F S XMZ=$O(^XMB(3.7,.5,2,XMK,1,"AC",XMTPRI,0)) Q:'XMZ D Q:XMZ
|
---|
| 104 | . I '$D(^XMB(3.7,.5,2,XMK,1,XMZ,0)) D Q
|
---|
| 105 | . . K ^XMB(3.7,.5,2,XMK,1,"AC",XMTPRI,XMZ) ; msg not in bskt, kill xref
|
---|
| 106 | . . S XMZ=0
|
---|
| 107 | . I '$$NEXTOK(XMK,XMZ) S XMZ=0 ; Check msg OK
|
---|
| 108 | Q XMZ
|
---|
| 109 | NEXTOK(XMK,XMZ) ; Ensure msg is in file 3.9 & still has recipients q'd
|
---|
| 110 | I $D(^XMB(3.9,XMZ,0)),$O(^XMB(3.9,XMZ,1,"AQUEUE",XMK-1000,0)) Q 1
|
---|
| 111 | D ZAPIT^XMXMSGS2(.5,XMK,XMZ)
|
---|
| 112 | Q 0
|
---|
| 113 | QUIT ;
|
---|
| 114 | Q:$G(XMC("QUIT"))
|
---|
| 115 | S XMSG="QUIT" X XMSEN Q:ER
|
---|
| 116 | X XMREC
|
---|
| 117 | S XMC("QUIT")=1
|
---|
| 118 | Q
|
---|
| 119 | RSET ; Send: "RSET"
|
---|
| 120 | ; Recv: "250"
|
---|
| 121 | S XMSG="RSET" X XMSEN Q:ER!XMC("BATCH")
|
---|
| 122 | X XMREC Q:ER
|
---|
| 123 | I $E(XMRG)'=2 S ER=1
|
---|
| 124 | Q
|
---|
| 125 | TURN(XMINST) ; Turn around channel
|
---|
| 126 | ; Send: "TURN"
|
---|
| 127 | ; Recv: "250 REMOTE.MED.VA.GOV has messages to export"
|
---|
| 128 | ; or: "502 REMOTE.MED.VA.GOV has no messages to export"
|
---|
| 129 | Q:XMC("TURN")!XMC("BATCH")
|
---|
| 130 | I $F("Yy",$P(^DIC(4.2,XMINST,0),U,16))>1 D Q
|
---|
| 131 | . D DOTRAN^XMC1(42355.1,XMSITE) ; TURN command disabled for |1|
|
---|
| 132 | S XMC("TURN")=1
|
---|
| 133 | N XMFDA,XMIENS
|
---|
| 134 | S XMIENS=XMINST_","
|
---|
| 135 | S XMFDA(4.2999,XMIENS,1)=$H
|
---|
| 136 | S XMFDA(4.2999,XMIENS,25)=$S($D(ZTQUEUED):$G(ZTSK),1:"@") ; Task number
|
---|
| 137 | D FILE^DIE("","XMFDA")
|
---|
| 138 | S XMSG="TURN" X XMSEN Q:ER
|
---|
| 139 | X XMREC Q:$E(XMRG)'="2"!ER
|
---|
| 140 | D DOTRAN^XMC1(42355) ;Turning around receiver
|
---|
| 141 | G RECEIVE^XMR ; Go into receive mode
|
---|
| 142 | Q
|
---|
| 143 | CHRISTN ; Christen the remote domain
|
---|
| 144 | S XMSG="CHRS "_XMC("CHRISTEN") X XMSEN Q:ER X XMREC Q:ER
|
---|
| 145 | Q
|
---|
| 146 | TESTLNK ; Test the link
|
---|
| 147 | N XMSTIME,XMETIME,XMTLER,XMCHARS,XMUERR,XMLINES
|
---|
| 148 | S XMSG="ECHO" X XMSEN I ER D TESTERR Q
|
---|
| 149 | X XMREC I ER D TESTERR Q
|
---|
| 150 | S XMSTIME=$$NOW^XLFDT
|
---|
| 151 | D TESTIT(.XMLINES,.XMCHARS,.XMUERR,.XMTLER)
|
---|
| 152 | S XMETIME=$$NOW^XLFDT
|
---|
| 153 | D:ER TESTERR
|
---|
| 154 | U IO(0)
|
---|
| 155 | D TESTRSLT(XMSTIME,XMETIME,XMLINES,XMCHARS,XMUERR,XMTLER)
|
---|
| 156 | Q
|
---|
| 157 | TESTERR ;
|
---|
| 158 | S XMSG="****Physical link protocol error. Unable to proceed" D TRAN^XMC1
|
---|
| 159 | Q
|
---|
| 160 | TESTIT(XMLINES,XMCHARS,XMUERR,XMTLER) ;
|
---|
| 161 | N I
|
---|
| 162 | S (I,XMLINES,XMCHARS,XMUERR,XMTLER)=0
|
---|
| 163 | F S I=$O(^TMP("XMS",$J,"S",I)) Q:'I S XMSG=^(I) D Q:ER
|
---|
| 164 | . S XMLINES=XMLINES+1
|
---|
| 165 | . S XMCHARS=XMCHARS+$L(XMSG)
|
---|
| 166 | . X XMSEN Q:ER X XMREC Q:ER
|
---|
| 167 | . Q:XMRG=XMSG
|
---|
| 168 | . S XMUERR=XMUERR+1
|
---|
| 169 | . U IO(0)
|
---|
| 170 | . S XMSG="*****Sent: "_XMSG D TRAN^XMC1
|
---|
| 171 | . S XMSG="*****Rec'd: "_XMRG D TRAN^XMC1
|
---|
| 172 | . U IO
|
---|
| 173 | Q:ER
|
---|
| 174 | S XMSG="." X XMSEN Q:ER X XMREC
|
---|
| 175 | Q
|
---|
| 176 | TESTRSLT(XMSTIME,XMETIME,XMLINES,XMCHARS,XMUERR,XMTLER) ;
|
---|
| 177 | S XMSG=XMLINES_" Lines,"_XMCHARS_" characters transmitted." D TRAN^XMC1
|
---|
| 178 | S XMSG="Errors detected: "_XMUERR_" unrecoverable, "_XMTLER_" recoverable."
|
---|
| 179 | S XMSG=$J(XMCHARS/$$FMDIFF^XLFDT(XMETIME,XMSTIME,2),0,1)_" chars/sec effective transmission rate." D TRAN^XMC1
|
---|
| 180 | Q
|
---|