Remove should_serialize check

This commit is contained in:
Daniil Gentili 2017-06-02 13:27:13 +02:00
parent 85b71b2a3e
commit 5b869098b9
9 changed files with 6 additions and 62 deletions

View File

@ -445,8 +445,8 @@ $MadelineProto = \danog\MadelineProto\Serialization::deserialize('session.madeli
```
THe deserialize method accepts a second optional parameter, `$no_updates`, that can be set to true to avoid fetching updates on deserialization, and postpone parsing of updates received through the socket until the next deserialization.
That class serializes only if the `$MadelineProto->API->should_serialize` boolean is set to true, using [MagicalSerializer](https://github.com/danog/MagicalSerializer).
The same operation should be done when serializing to another destination manually, to avoid conflicts with other PHP scripts that are trying to serialize another instance of the class.
That class serializes using [MagicalSerializer](https://github.com/danog/MagicalSerializer).
The same should be done when serializing to another destination manually, to avoid conflicts with other PHP scripts that are trying to serialize another instance of the class.
### Exceptions

View File

@ -1,7 +1,3 @@
---
title: MadelineProto documentation
description: PHP implementation of telegram's MTProto protocol
---
# MadelineProto
[![StyleCI](https://styleci.io/repos/61838413/shield)](https://styleci.io/repos/61838413)
[![Build Status](https://travis-ci.org/danog/MadelineProto.svg?branch=master)](https://travis-ci.org/danog/MadelineProto)
@ -449,8 +445,8 @@ $MadelineProto = \danog\MadelineProto\Serialization::deserialize('session.madeli
```
THe deserialize method accepts a second optional parameter, `$no_updates`, that can be set to true to avoid fetching updates on deserialization, and postpone parsing of updates received through the socket until the next deserialization.
That class serializes only if the `$MadelineProto->API->should_serialize` boolean is set to true, using [MagicalSerializer](https://github.com/danog/MagicalSerializer).
The same operation should be done when serializing to another destination manually, to avoid conflicts with other PHP scripts that are trying to serialize another instance of the class.
That class serializes using [MagicalSerializer](https://github.com/danog/MagicalSerializer).
The same should be done when serializing to another destination manually, to avoid conflicts with other PHP scripts that are trying to serialize another instance of the class.
### Exceptions

View File

@ -185,7 +185,6 @@ class MTProto extends \Volatile
private $twoe2048;
private $ipv6 = false;
public $should_serialize = false;
public $run_workers = false;
public $threads = false;
@ -244,7 +243,6 @@ class MTProto extends \Volatile
if ($nearest_dc['nearest_dc'] != $nearest_dc['this_dc']) {
$this->datacenter->curdc = (int) $nearest_dc['nearest_dc'];
$this->settings['connection_settings']['default_dc'] = (int) $nearest_dc['nearest_dc'];
$this->should_serialize = true;
}
} catch (RPCErrorException $e) {
if ($e->rpc !== 'BOT_METHOD_INVALID') {
@ -254,7 +252,6 @@ class MTProto extends \Volatile
}
$this->get_config([], ['datacenter' => $this->datacenter->curdc]);
$this->v = $this->getV();
$this->should_serialize = true;
return $this->settings;
}
@ -551,7 +548,6 @@ class MTProto extends \Volatile
$this->settings = $settings;
// Setup logger
$this->setup_logger();
$this->should_serialize = true;
}
public function setup_logger()
@ -576,7 +572,6 @@ class MTProto extends \Volatile
$socket->outgoing_messages = [];
$socket->new_outgoing = [];
$socket->new_incoming = [];
$this->should_serialize = true;
}
}
@ -610,7 +605,6 @@ class MTProto extends \Volatile
$socket->session_id = $this->random(8);
$socket->session_in_seq_no = 0;
$socket->session_out_seq_no = 0;
$this->should_serialize = true;
}
if ($socket->temp_auth_key === null || $socket->auth_key === null) {
if ($socket->auth_key === null) {
@ -624,7 +618,6 @@ class MTProto extends \Volatile
if (in_array($socket->protocol, ['http', 'https'])) {
$this->method_call('http_wait', ['max_wait' => 0, 'wait_after' => 0, 'max_delay' => 0], ['datacenter' => $id]);
}
$this->should_serialize = true;
}
}
$this->initing_authorization = false;
@ -646,7 +639,6 @@ class MTProto extends \Volatile
continue;
}
\danog\MadelineProto\Logger::log(['Copying authorization from dc '.$authorized_dc.' to dc '.$new_dc.'...'], Logger::VERBOSE);
$this->should_serialize = true;
$exported_authorization = $this->method_call('auth.exportAuthorization', ['dc_id' => $new_dc], ['datacenter' => $authorized_dc]);
$this->method_call('auth.logOut', [], ['datacenter' => $new_dc]);
$this->method_call('auth.importAuthorization', $exported_authorization, ['datacenter' => $new_dc]);
@ -684,7 +676,6 @@ class MTProto extends \Volatile
return;
}
$this->config = empty($config) ? $this->method_call('help.getConfig', $config, $options) : $config;
$this->should_serialize = true;
$this->parse_config();
}
@ -712,7 +703,6 @@ class MTProto extends \Volatile
$this->settings['connection'][$test][$ipv6][$id] = $dc;
}
$this->datacenter->__construct($this->settings['connection'], $this->settings['connection_settings']);
$this->should_serialize = true;
}
public function getV()

View File

@ -67,7 +67,6 @@ trait AuthKeyHandler
foreach ($this->method_call('help.getCdnConfig', [], ['datacenter' => $datacenter])['public_keys'] as $curkey) {
$tempkey = new \danog\MadelineProto\RSA($curkey['public_key']);
$this->rsa_keys[$tempkey->fp] = $tempkey;
$this->should_serialize = true;
}
}

View File

@ -27,7 +27,6 @@ trait PeerHandler
case 'user':
if (!isset($this->chats[$user['id']]) || $this->chats[$user['id']] !== $user) {
$this->chats[$user['id']] = $user;
$this->should_serialize = true;
try {
$this->get_pwr_chat($user['id'], false, true);
} catch (\danog\MadelineProto\Exception $e) {
@ -54,7 +53,6 @@ trait PeerHandler
case 'chatForbidden':
if (!isset($this->chats[-$chat['id']]) || $this->chats[-$chat['id']] !== $chat) {
$this->chats[-$chat['id']] = $chat;
$this->should_serialize = true;
try {
$this->get_pwr_chat(-$chat['id'], true, true);
} catch (\danog\MadelineProto\Exception $e) {
@ -74,7 +72,6 @@ trait PeerHandler
$bot_api_id = $this->to_supergroup($chat['id']);
if (!isset($this->chats[$bot_api_id]) || $this->chats[$bot_api_id] !== $chat) {
$this->chats[$bot_api_id] = $chat;
$this->should_serialize = true;
if (!isset($this->full_chats[$bot_api_id]) || $this->full_chats[$bot_api_id]['full']['participants_count'] !== $this->get_full_info($bot_api_id)['full']['participants_count']) {
try {
$this->get_pwr_chat($this->to_supergroup($chat['id']), true, true);

View File

@ -48,7 +48,6 @@ trait UpdateHandler
return;
}
$this->updates[$this->updates_key++] = $update;
$this->should_serialize = true;
//\danog\MadelineProto\Logger::log(['Stored ', $update);
}
@ -81,7 +80,6 @@ trait UpdateHandler
ksort($supdates);
foreach ($supdates as $key => $value) {
if ($params['offset'] > $key) {
$this->should_serialize = true;
unset($this->updates[$key]);
} elseif ($params['limit'] === null || count($updates) < $params['limit']) {
$updates[] = ['update_id' => $key, 'update' => $value];
@ -103,7 +101,6 @@ trait UpdateHandler
public function set_channel_state($channel, $data)
{
if (isset($data['pts']) && $data['pts'] !== 0) {
$this->should_serialize = true;
$this->get_channel_state($channel)['pts'] = $data['pts'];
}
}
@ -119,7 +116,6 @@ trait UpdateHandler
{
$id = $this->get_info($peer)['bot_api_id'];
$this->msg_ids[$id] = $msg_id;
$this->should_serialize = true;
}
public function get_channel_difference($channel)
@ -185,19 +181,15 @@ trait UpdateHandler
public function set_update_state($data)
{
if (isset($data['pts']) && $data['pts'] !== 0) {
$this->should_serialize = true;
$this->get_update_state()['pts'] = $data['pts'];
}
if (isset($data['qts']) && $data['qts'] !== 0) {
$this->should_serialize = true;
$this->get_update_state()['qts'] = $data['qts'];
}
if (isset($data['seq']) && $data['seq'] !== 0) {
$this->should_serialize = true;
$this->get_update_state()['seq'] = $data['seq'];
}
if (isset($data['date']) && $data['date'] > $this->get_update_state()['date']) {
$this->should_serialize = true;
$this->get_update_state()['date'] = $data['date'];
}
}
@ -205,11 +197,9 @@ trait UpdateHandler
public function &get_update_state()
{
if (!isset($this->updates_state['qts'])) {
$this->should_serialize = true;
$this->updates_state['qts'] = 0;
}
if (!$this->got_state) {
$this->got_state = $this->should_serialize = true;
$this->get_updates_state();
}
@ -380,12 +370,10 @@ trait UpdateHandler
if ($update['pts'] > $cur_state['pts']) {
\danog\MadelineProto\Logger::log(['Applying pts. current pts: '.$cur_state['pts'].' + pts count: '.(isset($update['pts_count']) ? $update['pts_count'] : 0).' = new pts: '.$new_pts.', channel id: '.$channel_id], \danog\MadelineProto\Logger::VERBOSE);
$cur_state['pts'] = $update['pts'];
$this->should_serialize = true;
$pop_pts = true;
}
if ($channel_id !== false && isset($options['date']) && $this->get_update_state()['date'] < $options['date']) {
$this->get_update_state()['date'] = $options['date'];
$this->should_serialize = true;
}
} elseif ($channel_id === false && isset($options['seq']) && $options['seq'] > 0) {
$seq = $options['seq'];
@ -403,7 +391,6 @@ trait UpdateHandler
}
if ($cur_state['seq'] != $seq) {
$this->should_serialize = true;
$cur_state['seq'] = $seq;
if (isset($options['date']) && $cur_state['date'] < $options['date']) {
$cur_state['date'] = $options['date'];
@ -425,7 +412,6 @@ trait UpdateHandler
if (!$this->settings['updates']['handle_updates']) {
return;
}
$this->should_serialize = true;
$next_seq = $this->get_update_state()['seq'] + 1;
if (empty($this->get_update_state()['pending_seq_updates'][$next_seq]['updates'])) {
return false;
@ -448,7 +434,6 @@ trait UpdateHandler
if (!$this->settings['updates']['handle_updates']) {
return;
}
$this->should_serialize = true;
if ($channel_id === false) {
$cur_state = &$this->get_update_state();
} else {
@ -536,7 +521,6 @@ trait UpdateHandler
$cur_state = $this->get_update_state();
if ($cur_state['qts'] === -1) {
$cur_state['qts'] = $update['qts'];
$this->should_serialize = true;
}
if ($update['qts'] < $cur_state['qts']) {
\danog\MadelineProto\Logger::log(['Duplicate update. update qts: '.$update['qts'].' <= current qts '.$cur_state['qts'].', chat id: '.$update['message']['chat_id']], \danog\MadelineProto\Logger::ERROR);
@ -551,7 +535,6 @@ trait UpdateHandler
}
\danog\MadelineProto\Logger::log(['Applying qts: '.$update['qts'].' over current qts '.$cur_state['qts'].', chat id: '.$update['message']['chat_id']], \danog\MadelineProto\Logger::VERBOSE);
$this->method_call('messages.receivedQueue', ['max_qts' => $cur_state['qts'] = $update['qts']], ['datacenter' => $this->datacenter->curdc]);
$this->should_serialize = true;
$this->handle_encrypted_update($update);
return;

View File

@ -30,7 +30,6 @@ trait AuthKeyHandler
return false;
}
$this->should_serialize = true;
$dh_config = $this->get_dh_config();
\danog\MadelineProto\Logger::log(['Generating b...'], \danog\MadelineProto\Logger::VERBOSE);
$b = new \phpseclib\Math\BigInteger($this->random(256), 256);
@ -52,7 +51,6 @@ trait AuthKeyHandler
public function request_secret_chat($user)
{
$this->should_serialize = true;
$user = $this->get_info($user);
if (!isset($user['InputUser'])) {
throw new \danog\MadelineProto\Exception('This peer is not present in the internal peer database');
@ -83,7 +81,6 @@ trait AuthKeyHandler
return false;
}
$this->should_serialize = true;
$dh_config = $this->get_dh_config();
$params['g_a_or_b'] = new \phpseclib\Math\BigInteger($params['g_a_or_b'], 256);
$this->check_G($params['g_a_or_b'], $dh_config['p']);
@ -115,7 +112,6 @@ trait AuthKeyHandler
if ($this->secret_chats[$chat]['rekeying'][0] !== 0) {
return;
}
$this->should_serialize = true;
\danog\MadelineProto\Logger::log(['Rekeying secret chat '.$chat.'...'], \danog\MadelineProto\Logger::VERBOSE);
$dh_config = $this->get_dh_config();
\danog\MadelineProto\Logger::log(['Generating a...'], \danog\MadelineProto\Logger::VERBOSE);
@ -147,7 +143,6 @@ trait AuthKeyHandler
return;
}
}
$this->should_serialize = true;
\danog\MadelineProto\Logger::log(['Accepting rekeying of secret chat '.$chat.'...'], \danog\MadelineProto\Logger::VERBOSE);
$dh_config = $this->get_dh_config();
\danog\MadelineProto\Logger::log(['Generating b...'], \danog\MadelineProto\Logger::VERBOSE);
@ -173,7 +168,6 @@ trait AuthKeyHandler
if ($this->secret_chats[$chat]['rekeying'][0] !== 1) {
return;
}
$this->should_serialize = true;
\danog\MadelineProto\Logger::log(['Committing rekeying of secret chat '.$chat.'...'], \danog\MadelineProto\Logger::VERBOSE);
$dh_config = $this->get_dh_config();
$params['g_b'] = new \phpseclib\Math\BigInteger($params['g_b'], 256);
@ -207,7 +201,6 @@ trait AuthKeyHandler
$this->method_call('messages.sendEncryptedService', ['peer' => $chat, 'message' => ['_' => 'decryptedMessageService', 'action' => ['_' => 'decryptedMessageActionAbortKey', 'exchange_id' => $params['exchange_id']]]], ['datacenter' => $this->datacenter->curdc]);
throw new \danog\MadelineProto\SecurityException('Invalid key fingerprint!');
}
$this->should_serialize = true;
\danog\MadelineProto\Logger::log(['Completing rekeying of secret chat '.$chat.'...'], \danog\MadelineProto\Logger::VERBOSE);
$this->secret_chats[$chat]['rekeying'] = [0];
$this->secret_chats[$chat]['old_key'] = $this->secret_chats[$chat]['key'];

View File

@ -24,17 +24,11 @@ class Serialization
* @param API $instance
* @param bool $force
*
* @return number|bool
* @return number
*/
public static function serialize($filename, $instance, $force = false)
{
if ($instance->API->should_serialize || !(file_exists($filename) && !empty(file_get_contents($filename))) || $force) {
$instance->API->should_serialize = false;
return file_put_contents($filename, \danog\Serialization::serialize($instance, true), LOCK_EX);
}
return false;
return file_put_contents($filename, \danog\Serialization::serialize($instance, true), LOCK_EX);
}
/**

View File

@ -32,7 +32,6 @@ trait Login
\danog\MadelineProto\Logger::log(['Logged out successfully!'], \danog\MadelineProto\Logger::NOTICE);
$this->should_serialize = true;
return true;
}
@ -56,7 +55,6 @@ trait Login
$this->sync_authorization($this->datacenter->curdc);
$this->updates = [];
$this->updates_key = 0;
$this->should_serialize = true;
if (!isset($this->settings['pwr']['pwr']) || !$this->settings['pwr']['pwr']) {
@file_get_contents('https://api.pwrtelegram.xyz/bot'.$token.'/getme');
}
@ -85,7 +83,6 @@ trait Login
$this->authorization['phone_number'] = $number;
//$this->authorization['_'] .= 'MP';
$this->authorized = self::WAITING_CODE;
$this->should_serialize = true;
$this->updates = [];
$this->updates_key = 0;
@ -114,7 +111,6 @@ trait Login
if ($e->rpc === 'SESSION_PASSWORD_NEEDED') {
\danog\MadelineProto\Logger::log(['2FA enabled, you will have to call the complete_2fa_login function...'], \danog\MadelineProto\Logger::NOTICE);
$this->authorized = self::WAITING_PASSWORD;
$this->should_serialize = true;
$this->authorization = $this->method_call('account.getPassword', [], ['datacenter' => $this->datacenter->curdc]);
//$this->authorization['_'] .= 'MP';
@ -123,7 +119,6 @@ trait Login
if ($e->rpc === 'PHONE_NUMBER_UNOCCUPIED') {
\danog\MadelineProto\Logger::log(['An account has not been created for this number, you will have to call the complete_signup function...'], \danog\MadelineProto\Logger::NOTICE);
$this->authorized = self::WAITING_SIGNUP;
$this->should_serialize = true;
$this->authorization['phone_code'] = $code;
return ['_' => 'account.needSignup'];
@ -133,7 +128,6 @@ trait Login
$this->authorized = self::LOGGED_IN;
$this->authorization = $authorization;
$this->sync_authorization($this->datacenter->curdc);
$this->should_serialize = true;
\danog\MadelineProto\Logger::log(['Logged in successfully!'], \danog\MadelineProto\Logger::NOTICE);
@ -160,7 +154,6 @@ trait Login
$this->authorized = self::LOGGED_IN;
$this->authorized = true;
$this->sync_authorization($this->datacenter->curdc);
$this->should_serialize = true;
\danog\MadelineProto\Logger::log(['Signed up in successfully!'], \danog\MadelineProto\Logger::NOTICE);
@ -182,7 +175,6 @@ trait Login
);
$this->authorized = self::LOGGED_IN;
$this->sync_authorization($this->datacenter->curdc);
$this->should_serialize = true;
\danog\MadelineProto\Logger::log(['Logged in successfully!'], \danog\MadelineProto\Logger::NOTICE);
return $this->authorization;