require_once("P10_ModeSets.class.php");
class Uplink {
- private $client = new Client();
+ private $client;
private $settings = array();
private $server;
private $flags = 0;
public function __construct() {
- $this->setSettings("recv_timeout", 1000);
+ $this->client = new Client();
+ $this->setSetting("recv_timeout", 1000);
}
public function initialize() {
if(($this->flags & self::FLAG_SECURITY_QUIT) || ($this->flags & self::FLAG_NOT_CONNECTABLE)) {
sleep(1);
}
- $state = $this->client->connect($host, $port, $this->getSettings("bind"), $this->getSettings("ssl"), $this->getSettings("recv_timeout"));
+ $state = $this->client->connect($host, $port, $this->getSetting("bind"), $this->getSetting("ssl"), $this->getSetting("recv_timeout"));
if(!$state) {
usleep($this->getSetting("recv_timeout") / 1000);
$this->flags |= self::FLAG_NOT_CONNECTABLE;
}
}
- public function setUplink($host, $port, $ssl = false, $bind = null) {
+ public function setUplinkHost($host, $port, $ssl = false, $bind = null) {
$this->setSetting("host", $host);
$this->setSetting("port", $port);
$this->setSetting("ssl", $ssl);
case "EB":
$this->recv_end_of_burst($from, $arguments);
break;
+ case "EA":
+ $this->recv_end_of_burst_ack($from, $arguments);
+ break;
+ case "SQ":
+ $this->recv_server_quit($from, $arguments);
+ break;
+ case "Q":
+ $this->recv_quit($from, $arguments);
+ break;
//default
default:
//unknown cmd
if(func_num_args() > 1) {
$args = array_slice(func_get_args(), 1);
$command = P10Formatter::formatCMD($this->getSetting("numeric"), $command, $args);
+ } else {
+ $command = P10Formatter::formatCMD($this->getSetting("numeric"), $command, array());
}
$this->client->send($command);
}
return;
}
$new_server = new P10_Server($args[0], substr($args[5],0,2), $this->server, $args[2], $args[3], $args[7]);
- $this->server->add_server($new_server);
+ $this->server->addServer($new_server);
$this->flags |= self::FLAG_P10SESSION | self::FLAG_BURST_PENDING;
} else {
//another server got a new slave server ^^
return;
}
$new_server = new P10_Server($args[0], substr($args[5],0,2), $server, $args[2], $args[3], $args[7]);
- $server->add_server($new_server);
+ $server->addServer($new_server);
}
}
}
private function recv_nick($from, $args) {
- //[recv] AM N Zer0n|IRPG 2 1292194168 ~Zer0n c04D8C5.localIP +oiwgrftx Zer0n Zer0n.admin.WebGamesNet AKBNjF AMAAj :Zer0n IRPG - Will never answer here.
- if(count($args) == 2) {
+ if(count($args) <= 2) {
//Nick change
$user = P10_User::getUserByNum($from);
if($user == null) {
$ident = $args[3];
$host = $args[4];
$modes = implode(" ",array_slice($args, 5, count($args)-8));
- $modes = new UserModeSet($modes);
+ $modes = new P10_UserModeSet($modes);
$ip = Numerics::parseIP($args[count($args)-3]);
$realname = $args[count($args)-1];
new P10_User($nick, $numeric, $server, $connect_time, $ident, $host, $ip, $realname, $modes);
}
}
+ private function recv_end_of_burst_ack($from, $args) {
+ //nothing to do here?
+ }
+ private function recv_server_quit($from, $args) {
+ $server = P10_Server::getServerByName($args[0]);
+ if($server == null) {
+ trigger_error("Server (".$args[0].") not found.", E_USER_ERROR);
+ return;
+ }
+ $server->disconnectServer();
+ }
+
+ private function recv_quit($from, $args) {
+ $user = P10_User::getUserByNum($from);
+ if($user == null) {
+ trigger_error("Server tries to quit an user that does not exist or was not found on recv_quit.", E_USER_ERROR);
+ return;
+ }
+ $user->quit($args[0]);
+ }
/********************************************************************************************
* SERVER FUNCTIONS *
********************************************************************************************/
private function burst() {
+ foreach($this->server->getUsers() as $user) {
+ $nick = $user->getNick();
+ $connect_time = $user->getConnectTime();
+ $ident = $user->getIdent();
+ $host = $user->getHost();
+ $modes = $user->getModes()->getModeString();
+ $ip = Numerics::numericFromIP($user->getIP());
+ $numeric = $user->getNumeric();
+ $realname = $user->getRealname();
+ $this->send("N", $nick, $connect_time, $ident, $host, $modes, $ip, $numeric, $realname);
+ }
$this->send("EB");
}