'array', ]; public function __construct(array $attributes = []) { parent::__construct($attributes); /* EMSI SETTINGS */ $this->do_prevent = 1; /* EMSI - send an immediate EMSI_INQ on connect */ $this->ignore_nrq = 0; $this->options = 0; /* EMSI - our capabilities */ } /** * @throws \Exception */ public function __get($key) { switch ($key) { case 'binkp_bind': case 'dns_bind': case 'emsi_bind': return Arr::get($this->servers,str_replace('_','.',$key),self::BIND); case 'binkp_port': return Arr::get($this->servers,str_replace('_','.',$key),Binkp::PORT); case 'dns_port': return Arr::get($this->servers,str_replace('_','.',$key),EMSI::PORT); case 'emsi_port': return Arr::get($this->servers,str_replace('_','.',$key),DNS::PORT); case 'binkp_options': case 'dns_options': case 'emsi_options': return Arr::get($this->servers,'binkp.options'); case 'binkp_settings': case 'ignore_nrq': case 'do_prevent': return $this->internal[$key] ?? FALSE; case 'max_msgs_pkt': return self::MAX_MSGS_PKT; case 'version': return File::exists('VERSION') ? chop(File::get('VERSION')) : 'dev'; default: return parent::__get($key); } } /** * @throws \Exception */ public function __set($key,$value) { switch ($key) { case 'binkp_bind': case 'binkp_port': case 'binkp_options': case 'dns_bind': case 'dns_port': case 'dns_options': case 'emsi_bind': case 'emsi_port': case 'emsi_options': return Arr::set($this->servers,str_replace('_','.',$key),$value); case 'binkp_settings': case 'ignore_nrq': case 'opt_nr': case 'opt_nd': case 'opt_nda': case 'opt_md': case 'opt_cr': case 'opt_mb': case 'opt_cht': case 'opt_mpwd': case 'do_prevent': $this->internal[$key] = $value; break; default: parent::__set($key,$value); } } /** * The Mailer Product ID in hex. * * @param int $c * @return string * @throws \Exception */ public static function product_id(int $c=self::PRODUCT_ID): string { return hexstr($c); } /* RELATIONS */ /** * The defined system that this setup is valid for * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function system() { return $this->belongsTo(System::class); } /* ATTRIBUTES */ public function getLocationAttribute() { return $this->system->location; } public function getSysopAttribute() { return $this->system->sysop; } public function getSystemNameAttribute() { return $this->system->name; } /* METHODS */ public function optionClear(int $key,$index='options'): void { $this->{$index} &= ~$key; } public function optionGet(int $key,$index='options'): int { return ($this->{$index} & $key); } public function optionSet(int $key,$index='options'): void { $this->{$index} |= $key; } }