Enable us to create an outbound packet without updating send details. Determine the send address for packets earlier

This commit is contained in:
Deon George 2022-01-20 17:54:02 +11:00
parent d930c410dc
commit 421cd565bd
2 changed files with 38 additions and 24 deletions

View File

@ -95,7 +95,11 @@ class Packet extends FTNBase implements \Iterator, \Countable
return (! is_null($this->key())) && ($this->use_cache ? Cache::has($this->key()) : $this->messages->has($this->key())); return (! is_null($this->key())) && ($this->use_cache ? Cache::has($this->key()) : $this->messages->has($this->key()));
} }
public function __construct(Address $o=NULL) /**
* @param Address|NULL $oo Origin Address
* @param Address|NULL $o Destination Address
*/
public function __construct(Address $oo=NULL,Address $o=NULL)
{ {
$this->messages = collect(); $this->messages = collect();
$this->errors = collect(); $this->errors = collect();
@ -103,8 +107,8 @@ class Packet extends FTNBase implements \Iterator, \Countable
$this->name = sprintf('%08x',timew()); $this->name = sprintf('%08x',timew());
// If we are creating an outbound packet, we need to set our header // If we are creating an outbound packet, we need to set our header
if ($o) if ($oo && $o)
$this->newHeader($o); $this->newHeader($oo,$o);
} }
/** /**
@ -384,16 +388,16 @@ class Packet extends FTNBase implements \Iterator, \Countable
/** /**
* When creating a new packet, set the header. * When creating a new packet, set the header.
* *
* @param Address $oo
* @param Address $o * @param Address $o
*/ */
private function newHeader(Address $o): void private function newHeader(Address $oo,Address $o): void
{ {
$date = Carbon::now(); $date = Carbon::now();
$ao = Setup::findOrFail(config('app.id'))->system->match($o->zone)->first();
// Create Header // Create Header
$this->header = [ $this->header = [
'onode' => $ao->node_id, // Originating Node 'onode' => $oo->node_id, // Originating Node
'dnode' => $o->node_id, // Destination Node 'dnode' => $o->node_id, // Destination Node
'y' => $date->format('Y'), // Year 'y' => $date->format('Y'), // Year
'm' => $date->format('m')-1, // Month 'm' => $date->format('m')-1, // Month
@ -401,14 +405,14 @@ class Packet extends FTNBase implements \Iterator, \Countable
'H' => $date->format('H'), // Hour 'H' => $date->format('H'), // Hour
'M' => $date->format('i'), // Minute 'M' => $date->format('i'), // Minute
'S' => $date->format('s'), // Second 'S' => $date->format('s'), // Second
'onet' => $ao->host_id ?: $ao->region_id, // Originating Net (0xffff when origPoint !=0 2+) 'onet' => $oo->host_id ?: $oo->region_id, // Originating Net (0xffff when origPoint !=0 2+)
'dnet' => $o->host_id ?: $o->region_id, // Destination Net 'dnet' => $o->host_id ?: $o->region_id, // Destination Net
'password' => $o->session('pktpass'), // Packet Password 'password' => $o->session('pktpass'), // Packet Password
'qozone' => $ao->zone->zone_id, 'qozone' => $oo->zone->zone_id,
'qdzone' => $o->zone->zone_id, 'qdzone' => $o->zone->zone_id,
'ozone' => $ao->zone->zone_id, // Originating Zone (Not used 2) 'ozone' => $oo->zone->zone_id, // Originating Zone (Not used 2)
'dzone' => $o->zone->zone_id, // Destination Zone (Not used 2) 'dzone' => $o->zone->zone_id, // Destination Zone (Not used 2)
'opoint' => $ao->point_id, // Originating Point (Not used 2) 'opoint' => $oo->point_id, // Originating Point (Not used 2)
'dpoint' => $o->point_id, // Destination Point (Not used 2) 'dpoint' => $o->point_id, // Destination Point (Not used 2)
]; ];
} }

View File

@ -371,9 +371,10 @@ class Address extends Model
/** /**
* Get echomail for this node * Get echomail for this node
* *
* @param bool $update
* @return Packet|null * @return Packet|null
*/ */
public function getEchomail(): ?Packet public function getEchomail(bool $update=TRUE): ?Packet
{ {
$pkt = NULL; $pkt = NULL;
@ -382,13 +383,14 @@ class Address extends Model
{ {
$pkt = $this->getPacket($x); $pkt = $this->getPacket($x);
DB::table('echomail_seenby') if ($pkt && $pkt->count() && $update)
->whereIn('echomail_id',$x->pluck('id')) DB::table('echomail_seenby')
->where('address_id',$this->id) ->whereIn('echomail_id',$x->pluck('id'))
->whereNull('sent_at') ->where('address_id',$this->id)
->whereNull('packet') ->whereNull('sent_at')
->whereNotNull('echomail_seenby.export_at') ->whereNull('packet')
->update(['sent_at'=>Carbon::now(),'packet'=>$pkt->name]); ->whereNotNull('echomail_seenby.export_at')
->update(['sent_at'=>Carbon::now(),'packet'=>$pkt->name]);
} }
return $pkt; return $pkt;
@ -397,9 +399,10 @@ class Address extends Model
/** /**
* Get netmail for this node (including it's children) * Get netmail for this node (including it's children)
* *
* @param bool $update
* @return Packet|null * @return Packet|null
*/ */
public function getNetmail(): ?Packet public function getNetmail(bool $update=TRUE): ?Packet
{ {
$pkt = NULL; $pkt = NULL;
@ -408,9 +411,10 @@ class Address extends Model
{ {
$pkt = $this->getPacket($x); $pkt = $this->getPacket($x);
DB::table('netmails') if ($pkt && $pkt->count() && $update)
->whereIn('id',$x->pluck('id')) DB::table('netmails')
->update(['sent_at'=>Carbon::now(),'sent_pkt'=>$pkt->name]); ->whereIn('id',$x->pluck('id'))
->update(['sent_at'=>Carbon::now(),'sent_pkt'=>$pkt->name]);
} }
return $pkt; return $pkt;
@ -422,9 +426,15 @@ class Address extends Model
* @param Collection $c * @param Collection $c
* @return Packet * @return Packet
*/ */
private function getPacket(Collection $c): Packet private function getPacket(Collection $c): ?Packet
{ {
$o = new Packet($this); $ao = Setup::findOrFail(config('app.id'))->system->match($this->zone)->first();
// If we dont match on the address, we cannot pack mail for that system
if (! $ao)
return NULL;
$o = new Packet($ao,$this);
foreach ($c as $oo) foreach ($c as $oo)
$o->addMail($oo->packet($this)); $o->addMail($oo->packet($this));