diff --git a/app/Jobs/MessageProcess.php b/app/Jobs/MessageProcess.php index 773edc4..077b20c 100644 --- a/app/Jobs/MessageProcess.php +++ b/app/Jobs/MessageProcess.php @@ -287,9 +287,14 @@ class MessageProcess implements ShouldQueue $dummy = collect(); $path = $this->parseAddresses('path',$this->msg->path,$this->pktsrc->zone,$dummy); + // If our sender is not in the path, add it + if (! $path->contains($this->sender->id)) { + Log::alert(sprintf('%s:? Echomail adding sender to PATH [%s] for [%d].',self::LOGKEY,$x->ftn,$o->id)); + $path->push($this->sender->id); + } + $ppoid = NULL; foreach ($path as $aoid) { - $po = DB::select('INSERT INTO echomail_path (echomail_id,address_id,parent_id) VALUES (?,?,?) RETURNING id',[ $o->id, $aoid, @@ -327,7 +332,6 @@ class MessageProcess implements ShouldQueue )); } - // @todo Can the sender create it if it doesnt exist? // Can the system send messages to this area? if (! $ea->sec_write || ($this->pktsrc->security < $ea->sec_write)) { Log::alert(sprintf('%s:! FTN [%s] is not allowed to post [%s] to [%s].',self::LOGKEY,$this->pktsrc->ftn,$this->msg->msgid,$ea->name)); @@ -355,7 +359,25 @@ class MessageProcess implements ShouldQueue $o->datetime = $this->msg->date; $o->tzoffset = $this->msg->date->utcOffset(); - $o->fftn_id = ($x=$this->msg->fboss_o) ? $x->id : NULL; // @todo This should be the node that originated the message - but since that node is not in the DB it would be null + if ($x=$this->msg->fboss_o) { + $o->fftn_id = $x->id; + + // Make sure our sender and packet source are in the path + if (! $this->msg->path->contains($x->ftn)) { + Log::alert(sprintf('%s:? Echomail adding sender to PATH [%s].',self::LOGKEY,$x->ftn)); + + $this->msg->path->push($x->ftn); + } + + } else { + $o->fftn_id = NULL; // @todo This should be the node that originated the message - but since that node is not in the DB it would be null + } + + if (! $this->msg->path->contains($this->pktsrc->id)) { + Log::alert(sprintf('%s:? Echomail adding pktsrc to PATH [%s].',self::LOGKEY,$x->ftn)); + $this->msg->path->push($this->pktsrc->id); + } + $o->echoarea_id = $ea->id; $o->msgid = $this->msg->msgid; $o->replyid = $this->msg->replyid; @@ -363,6 +385,7 @@ class MessageProcess implements ShouldQueue $o->msg = $this->msg->message_src."\r"; $o->msg_src = $this->msg->message_src; $o->msg_crc = md5($this->msg->message); + $o->set_path = $this->msg->path; $o->set_seenby = $this->msg->seenby; $o->set_recvtime = $this->recvtime; diff --git a/app/Models/Echomail.php b/app/Models/Echomail.php index 8d37d39..3143583 100644 --- a/app/Models/Echomail.php +++ b/app/Models/Echomail.php @@ -70,7 +70,7 @@ final class Echomail extends Model implements Packet static::created(function($model) { $rogue = collect(); $seenby = NULL; - $path = []; + $path = collect(); // Parse PATH if ($model->set_path->count()) @@ -104,12 +104,17 @@ final class Echomail extends Model implements Packet // Our last node in the path is our sender if (isset($model->set_pkt) && isset($model->set_recvtime)) { - DB::update('UPDATE echomail_path set recv_pkt=?,recv_at=? where address_id=? and echomail_id=?',[ - $model->set_pkt, - $model->set_recvtime, - $path->last(), - $model->id, - ]); + if ($path->count()) { + DB::update('UPDATE echomail_path set recv_pkt=?,recv_at=? where address_id=? and echomail_id=?',[ + $model->set_pkt, + $model->set_recvtime, + $path->last(), + $model->id, + ]); + + } else { + Log::critical(sprintf('%s:! Wasnt able to set packet details for [%d] to [%s] to [%s], no path information',self::LOGKEY,$model->id,$model->set_pkt,$model->set_recvtime)); + } } // See if we need to export this message.