From bf3fce252db01900a9ff63d837d362ea924a3c49 Mon Sep 17 00:00:00 2001 From: Deon George Date: Sat, 9 Nov 2024 08:58:09 +1100 Subject: [PATCH] Remove CommProtocolReceive commands, Remove protocol onConnect() functions, pass Setup::class to protocols --- app/Classes/Protocol.php | 28 ++++++++---- app/Classes/Protocol/Binkp.php | 22 ---------- app/Classes/Protocol/DNS.php | 17 -------- app/Classes/Protocol/EMSI.php | 22 ---------- app/Classes/Protocol/Zmodem.php | 21 --------- app/Classes/Sock/SocketServer.php | 6 ++- app/Console/Commands/CommBinkpReceive.php | 53 ----------------------- app/Console/Commands/CommEMSIReceive.php | 53 ----------------------- app/Console/Commands/ServerStart.php | 6 +-- app/Jobs/AddressPoll.php | 6 ++- 10 files changed, 31 insertions(+), 203 deletions(-) delete mode 100644 app/Console/Commands/CommBinkpReceive.php delete mode 100644 app/Console/Commands/CommEMSIReceive.php diff --git a/app/Classes/Protocol.php b/app/Classes/Protocol.php index f579297..59f5d3e 100644 --- a/app/Classes/Protocol.php +++ b/app/Classes/Protocol.php @@ -3,7 +3,6 @@ namespace App\Classes; use Illuminate\Support\Collection; -use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Log; use App\Classes\File\{Receive,Send}; @@ -138,9 +137,13 @@ abstract class Protocol abstract protected function protocol_session(bool $force_queue=FALSE): int; - public function __construct() + /** + * @param Setup $setup + * @throws \Exception + */ + public function __construct(Setup $setup) { - $this->setup = Config::get('setup',Setup::findOrFail(config('app.id'))); + $this->setup = $setup; // Some initialisation details switch (get_class($this)) { @@ -267,20 +270,27 @@ abstract class Protocol * Incoming Protocol session * * @param SocketClient $client - * @return int|null + * @return int * @throws SocketException */ - public function onConnect(SocketClient $client): ?int + public function onConnect(SocketClient $client): int { $pid = pcntl_fork(); if ($pid === -1) throw new SocketException(SocketException::CANT_ACCEPT,'Could not fork process'); + // If our parent returns a PID, we've forked if ($pid) Log::info(sprintf('%s:+ New connection from [%s], thread [%d] created',self::LOGKEY,$client->address_remote,$pid)); - // Parent return ready for next connection + // This is the new thread + else { + Log::withContext(['pid'=>getmypid()]); + + $this->session($client,(new Address)); + } + return $pid; } @@ -347,10 +357,10 @@ abstract class Protocol } /** - * Initialise our Session + * Setup a session with a remote client * - * @param SocketClient $client - * @param Address|null $o + * @param SocketClient $client Socket details of session + * @param Address|null $o If we have an address, we originated a session to this Address * @return int * @throws \Exception */ diff --git a/app/Classes/Protocol/Binkp.php b/app/Classes/Protocol/Binkp.php index 8c43d25..25da7a8 100644 --- a/app/Classes/Protocol/Binkp.php +++ b/app/Classes/Protocol/Binkp.php @@ -12,7 +12,6 @@ use App\Classes\Crypt; use App\Classes\Node; use App\Classes\Protocol as BaseProtocol; use App\Classes\Sock\Exception\SocketException; -use App\Classes\Sock\SocketClient; use App\Exceptions\{FileGrewException,InvalidFTNException}; use App\Models\{Address,Setup}; @@ -142,27 +141,6 @@ final class Binkp extends BaseProtocol */ private Crypt $crypt_out; - /** - * Incoming BINKP session - * - * @param SocketClient $client - * @return int|null - * @throws SocketException - */ - public function onConnect(SocketClient $client): ?int - { - // If our parent returns a PID, we've forked - if (! parent::onConnect($client)) { - Log::withContext(['pid'=>getmypid()]); - - $this->session($client,(new Address)); - $this->client->close(); - exit(0); - } - - return NULL; - } - /** * BINKD handshake * diff --git a/app/Classes/Protocol/DNS.php b/app/Classes/Protocol/DNS.php index 87d7786..caab9ba 100644 --- a/app/Classes/Protocol/DNS.php +++ b/app/Classes/Protocol/DNS.php @@ -6,7 +6,6 @@ use Illuminate\Support\Facades\Log; use Illuminate\Support\Str; use App\Classes\Protocol as BaseProtocol; -use App\Classes\Sock\SocketClient; use App\Models\{Address,Domain,Mailer}; /** @@ -64,22 +63,6 @@ final class DNS extends BaseProtocol public const DNS_TYPE_OPT = 41; // OPT Records public const DNS_TYPE_DS = 43; // DS Records (Delegation signer RFC 4034) - public function onConnect(SocketClient $client): ?int - { - // If our parent returns a PID, we've forked - if (! parent::onConnect($client)) { - Log::withContext(['pid'=>getmypid()]); - - $this->client = $client; - $this->protocol_session(); - - Log::debug(sprintf('%s:= onConnect - Connection closed [%s]',self::LOGKEY,$client->address_remote)); - exit(0); - } - - return NULL; - } - protected function protocol_init(): int { // N/A diff --git a/app/Classes/Protocol/EMSI.php b/app/Classes/Protocol/EMSI.php index 136382e..6b1e729 100644 --- a/app/Classes/Protocol/EMSI.php +++ b/app/Classes/Protocol/EMSI.php @@ -7,7 +7,6 @@ use Illuminate\Support\Facades\Log; use App\Classes\Protocol as BaseProtocol; use App\Classes\Sock\Exception\SocketException; -use App\Classes\Sock\SocketClient; use App\Exceptions\InvalidFTNException; use App\Interfaces\CRC as CRCInterface; use App\Interfaces\Zmodem as ZmodemInterface; @@ -82,27 +81,6 @@ final class EMSI extends BaseProtocol implements CRCInterface,ZmodemInterface '1'=>self::P_ZMODEM, ]; - /** - * Incoming EMSI session - * - * @param SocketClient $client - * @return int|null - * @throws SocketException - */ - public function onConnect(SocketClient $client): ?int - { - // If our parent returns a PID, we've forked - if (! parent::onConnect($client)) { - Log::withContext(['pid'=>getmypid()]); - - $this->session($client,(new Address)); - $this->client->close(); - exit(0); - } - - return NULL; - } - /** * Send our welcome banner * diff --git a/app/Classes/Protocol/Zmodem.php b/app/Classes/Protocol/Zmodem.php index b84a3fd..3fb7322 100644 --- a/app/Classes/Protocol/Zmodem.php +++ b/app/Classes/Protocol/Zmodem.php @@ -202,27 +202,6 @@ final class Zmodem extends Protocol implements CRCInterface,ZmodemInterface private string $rxbuf = ''; private string $txbuf = ''; - /** - * @param SocketClient $client - * @return null - * @throws SocketException - */ - public function onConnect(SocketClient $client): ?int - { - // If our parent returns a PID, we've forked - if (! parent::onConnect($client)) { - Log::withContext(['pid'=>getmypid()]); - - $this->session($client); - $this->client->close(); - - Log::info(sprintf('%s:= onConnect - Connection closed [%s]',self::LOGKEY,$client->address_remote)); - exit(0); - } - - return NULL; - } - /** * Initialise our session */ diff --git a/app/Classes/Sock/SocketServer.php b/app/Classes/Sock/SocketServer.php index e2b549e..dc1b44b 100644 --- a/app/Classes/Sock/SocketServer.php +++ b/app/Classes/Sock/SocketServer.php @@ -141,7 +141,11 @@ final class SocketServer { continue; } - $this->handler[0]->{$this->handler[1]}($r); + // If the handler returns a value, then that is the main thread + if (! $this->handler[0]->{$this->handler[1]}($r)) { + $r->close(); + exit(0); + } } } diff --git a/app/Console/Commands/CommBinkpReceive.php b/app/Console/Commands/CommBinkpReceive.php deleted file mode 100644 index c458275..0000000 --- a/app/Console/Commands/CommBinkpReceive.php +++ /dev/null @@ -1,53 +0,0 @@ -binkp_port,$o->binkp_bind); - $server->handler = [new Binkp,'onConnect']; - - try { - $server->listen(); - - } catch (SocketException $e) { - if ($e->getMessage() === 'Can\'t accept connections: "Success"') - Log::debug('Server Terminated'); - else - Log::emergency('Uncaught Message: '.$e->getMessage()); - } - } -} diff --git a/app/Console/Commands/CommEMSIReceive.php b/app/Console/Commands/CommEMSIReceive.php deleted file mode 100644 index 2220087..0000000 --- a/app/Console/Commands/CommEMSIReceive.php +++ /dev/null @@ -1,53 +0,0 @@ -emsi_port,$o->emsi_bind); - $server->handler = [new EMSI,'onConnect']; - - try { - $server->listen(); - - } catch (SocketException $e) { - if ($e->getMessage() === 'Can\'t accept connections: "Success"') - Log::debug('Server Terminated'); - else - Log::emergency('Uncaught Message: '.$e->getMessage()); - } - } -} diff --git a/app/Console/Commands/ServerStart.php b/app/Console/Commands/ServerStart.php index 6b5ff4e..4145fbb 100644 --- a/app/Console/Commands/ServerStart.php +++ b/app/Console/Commands/ServerStart.php @@ -50,7 +50,7 @@ class ServerStart extends Command 'address'=>$o->binkp_bind, 'port'=>$o->binkp_port, 'proto'=>SOCK_STREAM, - 'class'=>new Binkp, + 'class'=>new Binkp($o), ]); if ($o->emsi_active) @@ -58,7 +58,7 @@ class ServerStart extends Command 'address'=>$o->emsi_bind, 'port'=>$o->emsi_port, 'proto'=>SOCK_STREAM, - 'class'=>new EMSI, + 'class'=>new EMSI($o), ]); if ($o->dns_active) @@ -66,7 +66,7 @@ class ServerStart extends Command 'address'=>$o->dns_bind, 'port'=>$o->dns_port, 'proto'=>SOCK_DGRAM, - 'class'=>new DNS, + 'class'=>new DNS($o), ]); $children = collect(); diff --git a/app/Jobs/AddressPoll.php b/app/Jobs/AddressPoll.php index 0744dca..5470d48 100644 --- a/app/Jobs/AddressPoll.php +++ b/app/Jobs/AddressPoll.php @@ -10,6 +10,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\ManuallyFailedException; use Illuminate\Queue\MaxAttemptsExceededException; use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; @@ -85,6 +86,7 @@ class AddressPoll implements ShouldQueue, ShouldBeUnique } Log::info(sprintf('%s:- Polling [%s] - attempt [%d]',self::LOGKEY,$this->ao->ftn,$this->attempts())); + $setup = Config::get('setup',Setup::findOrFail(config('app.id'))); foreach ($this->ao->system->mailer_preferred as $o) { // If we chose a protocol, skip to find the mailer details for it @@ -93,12 +95,12 @@ class AddressPoll implements ShouldQueue, ShouldBeUnique switch ($o->name) { case 'BINKP': - $s = new Binkp; + $s = new Binkp($setup); break; case 'EMSI': - $s = new EMSI; + $s = new EMSI($setup); break;