From f91778b515dca2f0d1532064c683c2646c735796 Mon Sep 17 00:00:00 2001 From: Deon George Date: Sun, 12 Sep 2021 22:09:45 +1000 Subject: [PATCH] Fix for when msgid address is from an unknown zone --- app/Classes/FTN/Packet.php | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/app/Classes/FTN/Packet.php b/app/Classes/FTN/Packet.php index cbc08e5..8515a43 100644 --- a/app/Classes/FTN/Packet.php +++ b/app/Classes/FTN/Packet.php @@ -426,28 +426,33 @@ class Packet extends FTNBase implements \Iterator, \Countable if ($msg->errors) { // If the from address doenst exist, we'll create a new entry if ($msg->errors->messages()->has('from')) { - Log::alert(sprintf('%s: - From FTN is not defined, creating new entry for [%s]',self::LOGKEY,$msg->fboss)); + $e = NULL; - Address::unguard(); - $ao = Address::firstOrNew([ - 'zone_id' => $msg->fzone->id, - 'region_id' => 0, - 'host_id' => $msg->fn, - 'node_id' => $msg->ff, - 'point_id' => $msg->fp, - ]); - Address::reguard(); + try { + Address::unguard(); + $ao = Address::firstOrNew([ + 'zone_id' => $msg->fzone->id, + 'region_id' => 0, + 'host_id' => $msg->fn, + 'node_id' => $msg->ff, + 'point_id' => $msg->fp, + ]); + Address::reguard(); - $ao->active = TRUE; - $ao->role = DomainController::NODE_UNKNOWN; + } catch (\Exception $e) { + Log::error(sprintf('%s:! Error finding/creating address [%s] for message',self::LOGKEY,$msg->fboss)); + } // This shouldnt happen - if ($ao->exists) { - Log::error(sprintf('%s: - Attempting to create address [%s], but it exists?',self::LOGKEY,$msg->fboss)); + if ($e || $ao->exists) { + Log::error(sprintf('%s:! Attempting to create address [%s], but it exists?',self::LOGKEY,$msg->fboss)); $this->errors->push($msg); return; } + $ao->active = TRUE; + $ao->role = DomainController::NODE_UNKNOWN; + System::unguard(); $so = System::firstOrCreate([ 'name' => 'Discovered System', @@ -459,6 +464,8 @@ class Packet extends FTNBase implements \Iterator, \Countable $so->addresses()->save($ao); + Log::alert(sprintf('%s: - From FTN is not defined, creating new entry for [%s] (%d)',self::LOGKEY,$msg->fboss,$ao->id)); + } elseif($msg->errors->messages()->has('user_from') || $msg->errors->messages()->has('user_to')) { Log::error(sprintf('%s:! Skipping message [%s] due to errors (%s)...',self::LOGKEY,$msg->msgid,join(',',$msg->errors->messages()->keys()))); $this->errors->push($msg);