Bringing back http

This commit is contained in:
Daniil Gentili 2017-12-28 11:57:55 +01:00
parent af97c6224f
commit c146254428
No known key found for this signature in database
GPG Key ID: 259900308520B573
7 changed files with 30 additions and 21 deletions

View File

@ -129,9 +129,13 @@ if (!extension_loaded('pthreads')) {
private $protocol; private $protocol;
private $timeout = ['sec' => 0, 'usec' => 0]; private $timeout = ['sec' => 0, 'usec' => 0];
private $blocking = false; private $blocking = false;
private $domain;
private $type;
public function __construct(int $domain, int $type, int $protocol) public function __construct(int $domain, int $type, int $protocol)
{ {
$this->domain = $domain;
$this->type = $type;
$this->protocol = getprotobynumber($protocol); $this->protocol = getprotobynumber($protocol);
} }
@ -179,8 +183,12 @@ if (!extension_loaded('pthreads')) {
throw new \danog\MadelineProto\Exception('Not supported'); throw new \danog\MadelineProto\Exception('Not supported');
} }
public function connect(string $address, int $port = 0) public function connect(string $address, int $port = -1)
{ {
if ($this->domain === AF_INET6 && strpos($address, ':') !== false) {
$address = '['.$address.']';
}
$this->sock = fsockopen($this->protocol.'://'.$address, $port); $this->sock = fsockopen($this->protocol.'://'.$address, $port);
return true; return true;

View File

@ -46,13 +46,6 @@ class Connection
public $call_queue = []; public $call_queue = [];
public $i = []; public $i = [];
/* public function __get($name) {
echo "GETTING $name\n";
if (isset($this->i[$name]) && $this->{$name} === null) var_dump($this->i[$name]);
if ($this->{$name} instanceof \Volatile) $this->i[$name] = debug_backtrace(0);
var_dump(is_null($this->{$name}));
return $this->{$name};
}*/
public function ___construct($proxy, $extra, $ip, $port, $protocol, $timeout, $ipv6) public function ___construct($proxy, $extra, $ip, $port, $protocol, $timeout, $ipv6)
{ {
@ -164,6 +157,7 @@ class Connection
case 'http': case 'http':
case 'https': case 'https':
$this->parsed = parse_url($ip); $this->parsed = parse_url($ip);
if ($this->parsed['host'][0] === '[') $this->parsed['host'] = substr($this->parsed['host'], 1, -1);
$this->sock = new $proxy($ipv6 ? \AF_INET6 : \AF_INET, \SOCK_STREAM, getprotobyname($this->protocol === 'https' ? 'tls' : 'tcp')); $this->sock = new $proxy($ipv6 ? \AF_INET6 : \AF_INET, \SOCK_STREAM, getprotobyname($this->protocol === 'https' ? 'tls' : 'tcp'));
if ($has_proxy && $this->extra !== []) { if ($has_proxy && $this->extra !== []) {
$this->sock->setExtra($this->extra); $this->sock->setExtra($this->extra);

View File

@ -100,8 +100,8 @@ class DataCenter
} }
if ($this->settings[$dc_config_number]['protocol'] === 'http') { if ($this->settings[$dc_config_number]['protocol'] === 'http') {
if ($ipv6) $address = '['.$address.']';
$address = $this->settings[$dc_config_number]['protocol'].'://'.$address.'/api'; $address = $this->settings[$dc_config_number]['protocol'].'://'.$address.'/api';
$port = 80;
} }
\danog\MadelineProto\Logger::log([sprintf(\danog\MadelineProto\Lang::$current_lang['dc_con_test_start'], $dc_number, $test, $ipv6, $this->settings[$dc_config_number]['protocol'])], \danog\MadelineProto\Logger::VERBOSE); \danog\MadelineProto\Logger::log([sprintf(\danog\MadelineProto\Lang::$current_lang['dc_con_test_start'], $dc_number, $test, $ipv6, $this->settings[$dc_config_number]['protocol'])], \danog\MadelineProto\Logger::VERBOSE);

View File

@ -195,7 +195,6 @@ class MTProto
{ {
// Parse settings // Parse settings
$this->parse_settings($settings); $this->parse_settings($settings);
if (!defined('\phpseclib\Crypt\AES::MODE_IGE')) { if (!defined('\phpseclib\Crypt\AES::MODE_IGE')) {
throw new Exception(\danog\MadelineProto\Lang::$current_lang['phpseclib_fork']); throw new Exception(\danog\MadelineProto\Lang::$current_lang['phpseclib_fork']);
} }
@ -274,7 +273,6 @@ class MTProto
if (isset($this->settings['app_info']['lang_code']) && isset(Lang::$lang[$this->settings['app_info']['lang_code']])) { if (isset($this->settings['app_info']['lang_code']) && isset(Lang::$lang[$this->settings['app_info']['lang_code']])) {
Lang::$current_lang = &Lang::$lang[$this->settings['app_info']['lang_code']]; Lang::$current_lang = &Lang::$lang[$this->settings['app_info']['lang_code']];
} }
if (!defined('\phpseclib\Crypt\AES::MODE_IGE')) { if (!defined('\phpseclib\Crypt\AES::MODE_IGE')) {
throw new Exception(\danog\MadelineProto\Lang::$current_lang['phpseclib_fork']); throw new Exception(\danog\MadelineProto\Lang::$current_lang['phpseclib_fork']);
} }
@ -581,9 +579,9 @@ class MTProto
throw new \danog\MadelineProto\Exception(\danog\MadelineProto\Lang::$current_lang['api_not_set'], 0, null, 'MadelineProto', 1); throw new \danog\MadelineProto\Exception(\danog\MadelineProto\Lang::$current_lang['api_not_set'], 0, null, 'MadelineProto', 1);
} }
if ($settings['app_info']['api_id'] < 20) { /*if ($settings['app_info']['api_id'] < 20) {
$settings['connection_settings']['all']['protocol'] = 'obfuscated2'; $settings['connection_settings']['all']['protocol'] = 'obfuscated2';
} }*/
switch ($settings['logger']['logger_level']) { switch ($settings['logger']['logger_level']) {
case 'ULTRA_VERBOSE': $settings['logger']['logger_level'] = 5; break; case 'ULTRA_VERBOSE': $settings['logger']['logger_level'] = 5; break;
case 'VERBOSE': $settings['logger']['logger_level'] = 4; break; case 'VERBOSE': $settings['logger']['logger_level'] = 4; break;
@ -632,6 +630,16 @@ class MTProto
$socket->new_incoming = []; $socket->new_incoming = [];
} }
} }
public function is_http($datacenter) {
return in_array($this->datacenter->sockets[$datacenter]->protocol, ['http', 'https']);
}
public function close_and_reopen($datacenter) {
$this->datacenter->sockets[$datacenter]->close_and_reopen();
if ($this->is_http($datacenter)) {
$this->method_call('http_wait', ['max_wait' => 0, 'wait_after' => 0, 'max_delay' => 0], ['datacenter' => $datacenter]);
}
}
// Connects to all datacenters and if necessary creates authorization keys, binds them and writes client info // Connects to all datacenters and if necessary creates authorization keys, binds them and writes client info
public function connect_to_all_dcs() public function connect_to_all_dcs()
@ -681,9 +689,6 @@ class MTProto
$this->sync_authorization($id); $this->sync_authorization($id);
$this->get_config($config); $this->get_config($config);
} }
if (in_array($socket->protocol, ['http', 'https'])) {
$this->method_call('http_wait', ['max_wait' => 0, 'wait_after' => 0, 'max_delay' => 0], ['datacenter' => $id]);
}
} elseif (!$cdn) { } elseif (!$cdn) {
$this->sync_authorization($id); $this->sync_authorization($id);
} }

View File

@ -553,6 +553,8 @@ trait AuthKeyHandler
if ($res === true) { if ($res === true) {
\danog\MadelineProto\Logger::log(['Successfully binded temporary and permanent authorization keys, DC '.$datacenter], \danog\MadelineProto\Logger::NOTICE); \danog\MadelineProto\Logger::log(['Successfully binded temporary and permanent authorization keys, DC '.$datacenter], \danog\MadelineProto\Logger::NOTICE);
if ($this->is_http($datacenter)) $this->close_and_reopen($datacenter);
return true; return true;
} }
} catch (\danog\MadelineProto\SecurityException $e) { } catch (\danog\MadelineProto\SecurityException $e) {

View File

@ -203,7 +203,7 @@ trait CallHandler
//if (in_array($this->datacenter->sockets[$aargs['datacenter']]->protocol, ['http', 'https']) && $method !== 'http_wait') { //if (in_array($this->datacenter->sockets[$aargs['datacenter']]->protocol, ['http', 'https']) && $method !== 'http_wait') {
//$this->method_call('http_wait', ['max_wait' => $this->datacenter->sockets[$aargs['datacenter']]->timeout, 'wait_after' => 0, 'max_delay' => 0], ['datacenter' => $aargs['datacenter']]); //$this->method_call('http_wait', ['max_wait' => $this->datacenter->sockets[$aargs['datacenter']]->timeout, 'wait_after' => 0, 'max_delay' => 0], ['datacenter' => $aargs['datacenter']]);
//} else { //} else {
$this->datacenter->sockets[$aargs['datacenter']]->close_and_reopen(); $this->close_and_reopen($aargs['datacenter']);
//} //}
continue; continue;
} catch (\RuntimeException $e) { } catch (\RuntimeException $e) {
@ -212,7 +212,7 @@ trait CallHandler
//if (in_array($this->datacenter->sockets[$aargs['datacenter']]->protocol, ['http', 'https']) && $method !== 'http_wait') { //if (in_array($this->datacenter->sockets[$aargs['datacenter']]->protocol, ['http', 'https']) && $method !== 'http_wait') {
//$this->method_call('http_wait', ['max_wait' => $this->datacenter->sockets[$aargs['datacenter']]->timeout, 'wait_after' => 0, 'max_delay' => 0], ['datacenter' => $aargs['datacenter']]); //$this->method_call('http_wait', ['max_wait' => $this->datacenter->sockets[$aargs['datacenter']]->timeout, 'wait_after' => 0, 'max_delay' => 0], ['datacenter' => $aargs['datacenter']]);
//} else { //} else {
$this->datacenter->sockets[$aargs['datacenter']]->close_and_reopen(); $this->close_and_reopen($aargs['datacenter']);
//} //}
continue; continue;
} finally { } finally {
@ -282,7 +282,7 @@ trait CallHandler
} }
} catch (Exception $e) { } catch (Exception $e) {
\danog\MadelineProto\Logger::log(['An error occurred while calling object '.$object.': '.$e->getMessage().' in '.$e->getFile().':'.$e->getLine().'. Recreating connection and retrying to call object...'], \danog\MadelineProto\Logger::WARNING); \danog\MadelineProto\Logger::log(['An error occurred while calling object '.$object.': '.$e->getMessage().' in '.$e->getFile().':'.$e->getLine().'. Recreating connection and retrying to call object...'], \danog\MadelineProto\Logger::WARNING);
$this->datacenter->sockets[$aargs['datacenter']]->close_and_reopen(); $this->close_and_reopen($aargs['datacenter']);
continue; continue;
} }

View File

@ -351,7 +351,7 @@ trait PeerHandler
if (isset($full['full']['profile_photo']['sizes'])) { if (isset($full['full']['profile_photo']['sizes'])) {
$res['photo'] = $this->photosize_to_botapi(end($full['full']['profile_photo']['sizes']), []); $res['photo'] = $this->photosize_to_botapi(end($full['full']['profile_photo']['sizes']), []);
} }
$bio = ''; /*$bio = '';
if ($full['type'] === 'user' && isset($res['username']) && !isset($res['about']) && $fullfetch) { if ($full['type'] === 'user' && isset($res['username']) && !isset($res['about']) && $fullfetch) {
if (preg_match('/meta property="og:description" content=".+/', file_get_contents('https://telegram.me/'.$res['username']), $biores)) { if (preg_match('/meta property="og:description" content=".+/', file_get_contents('https://telegram.me/'.$res['username']), $biores)) {
$bio = html_entity_decode(preg_replace_callback('/(&#[0-9]+;)/', function ($m) { $bio = html_entity_decode(preg_replace_callback('/(&#[0-9]+;)/', function ($m) {
@ -361,7 +361,7 @@ trait PeerHandler
if ($bio != '' && $bio != 'You can contact @'.$res['username'].' right away.') { if ($bio != '' && $bio != 'You can contact @'.$res['username'].' right away.') {
$res['about'] = $bio; $res['about'] = $bio;
} }
} }*/
break; break;
case 'chat': case 'chat':
foreach (['title', 'participants_count', 'admin', 'admins_enabled'] as $key) { foreach (['title', 'participants_count', 'admin', 'admins_enabled'] as $key) {