From b8478adecbfc3149571d6149f8dc379ef43443a8 Mon Sep 17 00:00:00 2001 From: Deon George Date: Sun, 15 Aug 2021 19:25:04 +1000 Subject: [PATCH] Catch Netmails that dont generate an exception when converting to a packed message. Make sure we present unique addresses --- app/Classes/Protocol/Binkp.php | 4 ++ app/Classes/Protocol/EMSI.php | 2 + app/Models/Netmail.php | 89 +++++++++++++++++++--------------- 3 files changed, 56 insertions(+), 39 deletions(-) diff --git a/app/Classes/Protocol/Binkp.php b/app/Classes/Protocol/Binkp.php index 395abf4..a14da1c 100644 --- a/app/Classes/Protocol/Binkp.php +++ b/app/Classes/Protocol/Binkp.php @@ -150,6 +150,8 @@ final class Binkp extends BaseProtocol foreach ($this->node->aka_remote_authed as $ao) $addresses = $addresses->merge($this->setup->system->match($ao->zone)); + $addresses = $addresses->unique(); + Log::debug(sprintf('%s: - Presenting limited AKAs [%s]',__METHOD__,$addresses->pluck('ftn')->join(','))); } else { @@ -687,6 +689,8 @@ final class Binkp extends BaseProtocol foreach ($this->node->aka_remote as $ao) $addresses = $addresses->merge($this->setup->system->match($ao->zone)); + $addresses = $addresses->unique(); + Log::debug(sprintf('%s: - Presenting limited AKAs [%s]',__METHOD__,$addresses->pluck('ftn')->join(','))); } else { diff --git a/app/Classes/Protocol/EMSI.php b/app/Classes/Protocol/EMSI.php index 49a9e02..4154cd7 100644 --- a/app/Classes/Protocol/EMSI.php +++ b/app/Classes/Protocol/EMSI.php @@ -188,6 +188,8 @@ final class EMSI extends BaseProtocol implements CRCInterface,ZmodemInterface foreach ($this->node->aka_remote as $ao) $addresses = $addresses->merge($this->setup->system->match($ao->zone)); + $addresses = $addresses->unique(); + Log::debug(sprintf('%s: - Presenting limited AKAs [%s]',__METHOD__,$addresses->pluck('ftn')->join(','))); } else { diff --git a/app/Models/Netmail.php b/app/Models/Netmail.php index ddbe44e..e9a337c 100644 --- a/app/Models/Netmail.php +++ b/app/Models/Netmail.php @@ -3,6 +3,7 @@ namespace App\Models; use Carbon\Carbon; +use Illuminate\Support\Facades\Log; use Jenssegers\Mongodb\Eloquent\Model; use Jenssegers\Mongodb\Eloquent\SoftDeletes; @@ -10,8 +11,10 @@ use App\Classes\FTN\Message; use App\Interfaces\Packet; use App\Traits\UseMongo; -class Netmail extends Model implements Packet +final class Netmail extends Model implements Packet { + private const LOGKEY = 'MN-'; + use SoftDeletes,UseMongo; protected $dates = ['datetime','sent_at']; @@ -40,55 +43,63 @@ class Netmail extends Model implements Packet */ public function packet(Address $ao): Message { + Log::debug(sprintf('%s:Bundling [%s]',self::LOGKEY,$this->id)); + // @todo Dont bundle mail to nodes that have been disabled, or addresses that have been deleted $o = new Message; - $o->header = [ - 'onode' => $this->fftn->node_id, - 'dnode' => $ao->node_id, - 'onet' => $this->fftn->host_id, - 'dnet' => $ao->host_id, - 'flags' => 0, // @todo? - 'cost' => 0, - 'date'=>$this->datetime->format('d M y H:i:s'), - ]; + try { + $o->header = [ + 'onode' => $this->fftn->node_id, + 'dnode' => $ao->node_id, + 'onet' => $this->fftn->host_id, + 'dnet' => $ao->host_id, + 'flags' => 0, // @todo? + 'cost' => 0, + 'date'=>$this->datetime->format('d M y H:i:s'), + ]; - $o->tzutc = $this->datetime->utcOffset($this->tzoffset)->getOffsetString(''); - $o->user_to = $this->to; - $o->user_from = $this->from; - $o->subject = $this->subject; + $o->tzutc = $this->datetime->utcOffset($this->tzoffset)->getOffsetString(''); + $o->user_to = $this->to; + $o->user_from = $this->from; + $o->subject = $this->subject; - // INTL kludge - // @todo Point handling FMPT/TOPT - $o->intl = sprintf('%s %s',$this->tftn->ftn3d,$this->fftn->ftn3d); - $o->flags = $this->flags; + // INTL kludge + // @todo Point handling FMPT/TOPT + $o->intl = sprintf('%s %s',$this->tftn->ftn3d,$this->fftn->ftn3d); + $o->flags = $this->flags; - $o->msgid = sprintf('%s %08x',$this->fftn->ftn3d,crc32($this->id)); - if ($this->reply) - $o->reply = $this->reply; + $o->msgid = sprintf('%s %08x',$this->fftn->ftn3d,crc32($this->id)); + if ($this->reply) + $o->reply = $this->reply; - $o->message = $this->msg; + $o->message = $this->msg; - if ($this->tagline) - $o->message .= $this->tagline; + if ($this->tagline) + $o->message .= $this->tagline; - if ($this->tearline) - $o->tearline .= $this->tearline; + if ($this->tearline) + $o->tearline .= $this->tearline; - // VIA kludge - $via = $this->via ?: collect(); - $via->push( - sprintf('%s @%s.UTC %s %d.%d/%s %s', - $this->fftn->ftn3d, - Carbon::now()->utc()->format('Ymd.His'), - Setup::PRODUCT_NAME, - Setup::PRODUCT_VERSION_MAJ, - Setup::PRODUCT_VERSION_MIN, - (new Setup)->version, - Carbon::now()->format('Y-m-d'), - )); + // VIA kludge + $via = $this->via ?: collect(); + $via->push( + sprintf('%s @%s.UTC %s %d.%d/%s %s', + $this->fftn->ftn3d, + Carbon::now()->utc()->format('Ymd.His'), + Setup::PRODUCT_NAME, + Setup::PRODUCT_VERSION_MAJ, + Setup::PRODUCT_VERSION_MIN, + (new Setup)->version, + Carbon::now()->format('Y-m-d'), + )); - $o->via = $via; + $o->via = $via; + + } catch (\Exception $e) { + Log::error(sprintf('%s:Error converting netmail [%s] to a message (%d:%s)',self::LOGKEY,$this->id,$e->getLine(),$e->getMessage())); + dump($this); + } return $o; }