...
|
...
|
@@ -14,10 +14,9 @@ class ProxyService |
|
|
protected static $clients = [];
|
|
|
|
|
|
|
|
|
protected function push(...$params){
|
|
|
echo co::getCid()." => ";
|
|
|
echo implode(' => ',$params);
|
|
|
return $params;
|
|
|
protected function push($msg){
|
|
|
echo 'out '.$msg;
|
|
|
return $msg;
|
|
|
}
|
|
|
|
|
|
/**
|
...
|
...
|
@@ -35,19 +34,19 @@ class ProxyService |
|
|
|
|
|
//监听连接进入事件。
|
|
|
$server->on('Connect', function ($server, $fd) {
|
|
|
$server->send($fd, "220 proxy client ok\r\n");
|
|
|
$server->send($fd, $this->push("220 proxy client ok\r\n"));
|
|
|
});
|
|
|
|
|
|
//监听数据接收事件。
|
|
|
$server->on('Receive', function ($server, $fd, $reactor_id, $data) {
|
|
|
// echo "in ".co::getCid()." ==> ".$data."\n";
|
|
|
echo "in > ".$data;
|
|
|
// 建立连接
|
|
|
if (empty(self::$clients[$fd])) {
|
|
|
|
|
|
try {
|
|
|
$auth = new Auth($data);
|
|
|
}catch (Throwable $e){
|
|
|
$server->send($fd, $e->getMessage());
|
|
|
$server->send($fd, $this->push($e->getMessage()));
|
|
|
$server->close($fd,true);
|
|
|
return;
|
|
|
}
|
...
|
...
|
@@ -57,23 +56,20 @@ class ProxyService |
|
|
try {
|
|
|
self::$clients[$fd]->open($auth->out_ip, $auth->timeOut);
|
|
|
}catch (Throwable $e){
|
|
|
$server->send($fd, '500 ' . $e->getMessage()."\r\n");
|
|
|
$server->send($fd,$this->push('500 ' . $e->getMessage()."\r\n"));
|
|
|
$server->close($fd,true);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
$line = self::$clients[$fd]->readLine();
|
|
|
$line = self::$clients[$fd]->readLine(1);
|
|
|
|
|
|
if($line) $server->send($fd,$line);
|
|
|
|
|
|
// 发送成功消息
|
|
|
// $server->send($fd, "200 OK The proxy server is successfully connected.\r\n");
|
|
|
$server->send($fd,$this->push($line));
|
|
|
|
|
|
} // 正式请求转发
|
|
|
else {
|
|
|
// 没有连接成功
|
|
|
if(empty(self::$clients[$fd])){
|
|
|
$server->send($fd, "500 No proxy server.\r\n");
|
|
|
$server->send($fd, $this->push("500 No proxy server.\r\n"));
|
|
|
$server->close($fd,true);
|
|
|
return;
|
|
|
}
|
...
|
...
|
@@ -86,12 +82,12 @@ class ProxyService |
|
|
if($num) $line = self::$clients[$fd]->readLine();
|
|
|
|
|
|
}catch (Throwable $e){
|
|
|
echo date('Y-m-d H:i:s').' 协程读取异常 ' .$data." ::".$e->getMessage()."\n";
|
|
|
$line = '500 server error '.$e->getMessage()."\r\n";
|
|
|
}
|
|
|
|
|
|
// echo 'out '.co::getCid()." => ".$line;
|
|
|
|
|
|
if($line!==false) $server->send($fd,$line);
|
|
|
if($line!==false) $server->send($fd,$this->push($line));
|
|
|
|
|
|
}
|
|
|
});
|
...
|
...
|
|