| 1 | XMR3A ;ISC-SF/GMB-XMR3 (cont.) ;04/17/2002  11:16
 | 
|---|
| 2 |  ;;8.0;MailMan;;Jun 28, 2002
 | 
|---|
| 3 | CHEKDUP ;
 | 
|---|
| 4 |  N XMZCHK,XMTO
 | 
|---|
| 5 |  ;REJECT ON PURGED MESSAGE PROTECT FOC-AUSTIN
 | 
|---|
| 6 |  ;DO NOT CHANGE WITHOUT COORDINATING
 | 
|---|
| 7 |  S XMZCHK=$$LOCALXMZ(XMREMID)
 | 
|---|
| 8 |  ;Set up "AI" cross reference -- since XMBX is replicated at FOC-Austin
 | 
|---|
| 9 |  ;set pseudo node first so that if DDP is down, failure will occur before
 | 
|---|
| 10 |  ;message is considered received.
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  ;Accept as new message if NOT HERE
 | 
|---|
| 13 |  Q:'XMZCHK
 | 
|---|
| 14 |  ; We already have the message
 | 
|---|
| 15 |  I $P(XMZCHK,U,3)'="E"!(XMZ=+XMZCHK) D  Q
 | 
|---|
| 16 |  . S XMSG="554 Duplicate (purged).  Msg rejected." X XMSEN
 | 
|---|
| 17 |  . D KILLIT
 | 
|---|
| 18 |  . S XMREJECT=1
 | 
|---|
| 19 |  S XMTO=""
 | 
|---|
| 20 |  F  S XMTO=$O(^TMP("XMY",$J,XMTO)) Q:XMTO=""  I $D(^XMB(3.7,"M",+XMZCHK,XMTO)) K ^TMP("XMY",$J,XMTO)
 | 
|---|
| 21 |  I $O(^TMP("XMY",$J,""))="" D  Q
 | 
|---|
| 22 |  . S XMSG="254 Duplicate (no add'l recipients).  Msg rejected." X XMSEN
 | 
|---|
| 23 |  . D KILLIT
 | 
|---|
| 24 |  . S XMREJECT=1
 | 
|---|
| 25 |  ; We are forwarding a msg which already exists on our system
 | 
|---|
| 26 |  ; to recipients who don't currently have it in their mailbox.
 | 
|---|
| 27 |  K XMZFDA  ; When we implement true 'forwarded by', we'll have to retain that.
 | 
|---|
| 28 |  D KILLIT
 | 
|---|
| 29 |  S XMZ=+XMZCHK
 | 
|---|
| 30 |  Q
 | 
|---|
| 31 | KILLIT ;
 | 
|---|
| 32 |  K XMREMID
 | 
|---|
| 33 |  D ZAPIT^XMXMSGS2(.5,.95,XMZ)
 | 
|---|
| 34 |  D KILLMSG^XMXUTIL(XMZ)
 | 
|---|
| 35 |  Q
 | 
|---|
| 36 | LOCALXMZ(XMREMID) ; Given a remote id, function returns XMZ if the message
 | 
|---|
| 37 |  ; can be or was ever found locally.
 | 
|---|
| 38 |  ; If no record of it, returns null.
 | 
|---|
| 39 |  ; Otherwise, returns:
 | 
|---|
| 40 |  ; Piece 1: local XMZ
 | 
|---|
| 41 |  ; Piece 2: originated here? (0=no; 1=yes)
 | 
|---|
| 42 |  ; Piece 3: still exists? (P=no, purged;
 | 
|---|
| 43 |  ;                         R=no, purged, & replaced with something else;
 | 
|---|
| 44 |  ;                         E=yes, it still exists here)
 | 
|---|
| 45 |  N XMZCHK,XMP1,XMP2
 | 
|---|
| 46 |  S XMP1=$P(XMREMID,"@",1),XMP2=$P(XMREMID,"@",2)
 | 
|---|
| 47 |  I XMP1=""!(XMP2="") Q ""
 | 
|---|
| 48 |  S XMZCHK=$$FINDXMZ(XMP1,XMP2)
 | 
|---|
| 49 |  I XMZCHK Q XMZCHK
 | 
|---|
| 50 |  S XMZCHK=$$FINDXMZ(XMP2,XMP1)
 | 
|---|
| 51 |  I XMZCHK Q XMZCHK
 | 
|---|
| 52 |  Q ""
 | 
|---|
| 53 | FINDXMZ(XMP1,XMP2) ;
 | 
|---|
| 54 |  I XMP1?.N!(XMP1?.N1"."7N) Q:XMP2=^XMB("NETNAME") $$LOCXMZ(XMP1)  Q:$$FIND1^DIC(4.2,"","QX",XMP2,"B^C")=^XMB("NUM") $$LOCXMZ(XMP1)
 | 
|---|
| 55 |  N XMZ
 | 
|---|
| 56 | TRY S XMZ=$O(^XMBX(3.9,"AI",$E(XMP2,1,64),$E(XMP1,1,64),0))
 | 
|---|
| 57 |  I XMZ Q $$REMXMZ(XMZ,XMP2,XMP1)
 | 
|---|
| 58 |  I XMP1?.N1"."7N S XMP1=$P(XMP1,".") G TRY
 | 
|---|
| 59 |  Q ""
 | 
|---|
| 60 | LOCXMZ(XMZ) ; Message originated here.
 | 
|---|
| 61 |  I XMZ'["." Q XMZ_"^1^"_$S($D(^XMB(3.9,XMZ,0)):"E",1:"P")
 | 
|---|
| 62 |  ; The following code won't activate until MailMan message IDs contain
 | 
|---|
| 63 |  ; dates.  Message IDs are created in $$NETID^XMS3.
 | 
|---|
| 64 |  N XMCRE8
 | 
|---|
| 65 |  S XMCRE8=$P(XMZ,".",2),XMZ=$P(XMZ,".",1)
 | 
|---|
| 66 |  Q XMZ_"^1^"_$S('$D(^XMB(3.9,XMZ,0)):"P",$P($G(^XMB(3.9,XMZ,.6)),U,1)=XMCRE8:"E",1:"R")
 | 
|---|
| 67 | REMXMZ(XMZ,XMP2,XMP1) ; Message originated somewhere else.
 | 
|---|
| 68 |  I '$D(^XMB(3.9,XMZ,0)) Q XMZ_"^0^P"
 | 
|---|
| 69 |  N XMREMID
 | 
|---|
| 70 |  S XMREMID=$G(^XMB(3.9,XMZ,5))
 | 
|---|
| 71 |  I XMREMID="" Q XMZ_"^0^R"
 | 
|---|
| 72 |  I XMP1_"@"_XMP2=XMREMID Q XMZ_"^0^E"
 | 
|---|
| 73 |  I XMP2_"@"_XMP1=XMREMID Q XMZ_"^0^E"
 | 
|---|
| 74 |  Q XMZ_"^0^R"
 | 
|---|