Trying to fix flags

This commit is contained in:
danogentili 2016-11-23 15:58:38 +03:00
parent 0767d1bc80
commit d7c098087e

View File

@ -79,6 +79,7 @@ class TL extends \danog\MadelineProto\Tools
$serialized = \danog\PHP\Struct::pack('<i', $tl_method['id']); $serialized = \danog\PHP\Struct::pack('<i', $tl_method['id']);
$flags = 0; $flags = 0;
$flags_to_send = [];
foreach ($tl_method['params'] as $cur_flag) { foreach ($tl_method['params'] as $cur_flag) {
if ($cur_flag['opt']) { if ($cur_flag['opt']) {
$flag_pow = pow(2, $cur_flag['pow']); $flag_pow = pow(2, $cur_flag['pow']);
@ -87,20 +88,27 @@ class TL extends \danog\MadelineProto\Tools
case 'false': case 'false':
$flags = (isset($arguments[$cur_flag['name']]) && $arguments[$cur_flag['name']]) ? ($flags | $flag_pow) : ($flags & ~$flag_pow); $flags = (isset($arguments[$cur_flag['name']]) && $arguments[$cur_flag['name']]) ? ($flags | $flag_pow) : ($flags & ~$flag_pow);
unset($arguments[$cur_flag['name']]); unset($arguments[$cur_flag['name']]);
$flags_to_send[$cur_flag['name']] = false;
break; break;
case 'int': case 'Bool':
case 'string': $flags_to_send[$cur_flag['name']] = true;
$flags = (isset($arguments[$cur_flag['name']]) && $arguments[$cur_flag['name']] !== null) ? ($flags | $flag_pow) : ($flags & ~$flag_pow); if (($flags & $flag_pow) == 0) { // If source flag isn't set
$flags_to_send[$cur_flag['name']] = false;
unset($arguments[$cur_flag['name']]);
}
break; break;
default: default:
throw new Exception('Unrecognized flag type ('.$cur_flag['type'].')'); $flags_to_send[$cur_flag['name']] = true;
$flags = (isset($arguments[$cur_flag['name']]) && $arguments[$cur_flag['name']] !== null) ? ($flags | $flag_pow) : ($flags & ~$flag_pow);
break;
} }
} }
} }
var_dump($flags_to_send);
$arguments['flags'] = $flags; $arguments['flags'] = $flags;
foreach ($tl_method['params'] as $current_argument) { foreach ($tl_method['params'] as $current_argument) {
if (!isset($arguments[$current_argument['name']])) { if (!isset($arguments[$current_argument['name']])) {
if ($current_argument['opt']) { if ($current_argument['opt'] && $flags_to_send[$current_argument['name']]) {
continue; continue;
} }
throw new Exception('Missing required parameter ('.$current_argument['name'].')'); throw new Exception('Missing required parameter ('.$current_argument['name'].')');