This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
vbbs/app/Classes/Control/Telnet.php
2018-12-28 22:57:19 +11:00

100 lines
1.7 KiB
PHP

<?php
namespace App\Classes\Control;
use App\Classes\Control;
/**
* Class Telnet
*
* This class looks after any telnet session commands
*
* TELNET http://pcmicro.com/netfoss/telnet.html
*
* @package App\Classes\Control
*/
class Telnet extends Control
{
private $option = FALSE;
private $note = '';
private $terminal = '';
public function handle(string $read)
{
$this->so->log('debug',sprintf('Session Char (%s)',ord($read)),['complete'=>$this->complete,'option'=>$this->option]);
switch ($read) {
// Command being sent.
case TCP_IAC:
$this->complete = FALSE;
$this->note = 'IAC ';
break;
case TCP_SB:
$this->option = TRUE;
break;
case TCP_SE:
$this->option = FALSE;
$this->complete = TRUE;
$this->so->log('debug',sprintf('Session Terminal: %s',$this->terminal));
break;
case TCP_DO:
$this->note .= 'DO ';
break;
case TCP_WILL:
$this->note .= 'WILL ';
break;
case TCP_WONT:
$this->note .= 'WONT ';
break;
case TCP_OPT_TERMTYPE:
break;
case TCP_OPT_ECHO:
$this->note .= 'ECHO';
$this->complete = TRUE;
$this->so->log('debug',sprintf('Session Note: %s',$this->note));
break;
case TCP_OPT_SUP_GOAHEAD:
$this->note .= 'SUPPRESS GO AHEAD';
$this->complete = TRUE;
$this->so->log('debug',sprintf('Session Note: %s',$this->note));
break;
case TCP_OPT_WINDOWSIZE:
$this->note .= 'WINDOWSIZE';
$this->complete = TRUE;
$this->so->log('debug',sprintf('Session Note: %s',$this->note));
break;
default:
if ($this->option AND $read) {
$this->terminal .= $read;
} else {
$this->so->log('debug',sprintf('Unhandled char in session_init: %s (%s)',$read,ord($read)));
}
}
return '';
}
}