X-Git-Url: http://git.pk910.de/?p=PHP-P10.git;a=blobdiff_plain;f=Uplink%2FUplink.class.php;h=e7b8e9c9bc88fc9bf74a305169407fa01eac33f6;hp=2dee4da2f213caf4d93bc98d9c50bc7f1ba2f0d6;hb=8fc32c585446865b73c89859c35d1387fadbf9af;hpb=7b3f5a75e7bba8bd536cd0cbbaa595113765a15e diff --git a/Uplink/Uplink.class.php b/Uplink/Uplink.class.php index 2dee4da..e7b8e9c 100644 --- a/Uplink/Uplink.class.php +++ b/Uplink/Uplink.class.php @@ -50,6 +50,9 @@ require_once("Client.class.php"); require_once("Numerics.class.php"); require_once("P10Formatter.class.php"); +require_once("P10_Server.class.php"); +require_once("P10_User.class.php"); +require_once("P10_ModeSets.class.php"); class Uplink { private $client = new Client(); @@ -59,6 +62,7 @@ class Uplink { const FLAG_P10SESSION = 0x0001; //connection is in P10 mode (server is connected) const FLAG_SECURITY_QUIT = 0x0002; //local connection abort because of security issues const FLAG_NOT_CONNECTABLE = 0x0004; //remote server is not connectable + const FLAG_BURST_PENDING = 0x0008; //we still have to burst private $flags = 0; public function __construct() { @@ -185,6 +189,12 @@ class Uplink { case "G": $this->recv_ping($from, $arguments); break; + case "N": + $this->recv_nick($from, $arguments); + break; + case "EB": + $this->recv_end_of_burst($from, $arguments); + break; //default default: //unknown cmd @@ -234,7 +244,7 @@ class Uplink { } $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->flags |= self::FLAG_P10SESSION; + $this->flags |= self::FLAG_P10SESSION | self::FLAG_BURST_PENDING; } else { //another server got a new slave server ^^ $server = P10_Server::getServerByNum($from); @@ -251,6 +261,57 @@ class Uplink { $this->send("Z", $args[0]); //simply PONG } + 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) { + //Nick change + $user = P10_User::getUserByNum($from); + if($user == null) { + trigger_error("Server tries to change the nick of an user that does not exist or was not found on recv_nick.", E_USER_ERROR); + return; + } + $nick->setNick($args[0]); + } else { + //New User + $numeric = $args[count($args)-2]; + $nick = $args[0]; + $server = P10_Server::getServerByNum($from); + if($server == null) { + trigger_error("Server (".$from.") the User (".$nick.") is coming from does not exist or was not found on recv_nick.", E_USER_ERROR); + return; + } + if(substr($numeric,0,2) != $from) { + trigger_error("A Server (".$from.") tries to connect a User with an invalid User numeric ('".$numeric."' does not belong to the Server)", E_USER_WARNING); + } + $connect_time = $args[2]; + $ident = $args[3]; + $host = $args[4]; + $modes = implode(" ",array_slice($args, 5, count($args)-8)); + $modes = new 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($from, $args) { + if(($this->flags & self::FLAG_BURST_PENDING)) { + $this->burst(); + $this->send("EA"); + $this->flags &= ~self::FLAG_BURST_PENDING; + } + } + + + + /******************************************************************************************** + * SERVER FUNCTIONS * + ********************************************************************************************/ + + private function burst() { + $this->send("EB"); + } + } ?> \ No newline at end of file