diff --git a/mtproto.php b/mtproto.php index b25fa858..c2c72bfc 100755 Binary files a/mtproto.php and b/mtproto.php differ diff --git a/mtproto.php.save b/mtproto.php.save new file mode 100644 index 00000000..961092e6 --- /dev/null +++ b/mtproto.php.save @@ -0,0 +1,148 @@ + $curn) { + if (BIG_ENDIAN) { + $res .= strrev(pack($format[$key], $curn)); + } else $res .= pack($format[$key], $curn); + } + return $res; +} +function pack_be($format, ...$n) { + $res = ""; + foreach ($n as $key => $curn) { + if (!BIG_ENDIAN) { + $res .= strrev(pack($format[$key], $curn)); + } else $res .= pack($format[$key], $curn); + } + return $res; +} +function unpack_le($format, $data) { + if (BIG_ENDIAN) { + return unpack(strrev($format), strrev($data)); + } else return unpack($format, $data); +} +function unpack_be($format, $data) { + if (!BIG_ENDIAN) { + return unpack($format, strrev($data)); + } else return unpack($format, $data); +} +function vis($bs) { + $bs = bytearray($bs); + $symbols_in_one_line = 8; + $n = floor(strlen($bs) / $symbols_in_one_line); + $i = 0; + foreach (pyjslib_range($n) as $i) { + pyjslib_printnl( + join(pyjslib_str(($i * $symbols_in_one_line)) . ' | ' . ' ', + array_map(function($el) { return "%02X" % $el; }, array_slice($bs,$i*$symbols_in_one_line, ($i+1)*$symbols_in_one_line)) + )); + } + if (!(((strlen($bs) % $symbols_in_one_line) == 0))) { + pyjslib_printnl(join(pyjslib_str((($i + 1) * $symbols_in_one_line)) . ' | ' . ' ', + array_map(function($el) { return "%02X" % $el; }, array_slice($bs, ($i+1)*$symbols_in_one_line), null) + ) . ' +'); + } +} +/** + * bytes_to_long(string) : long + * Convert a byte string to a long integer. + * This is (essentially) the inverse of long_to_bytes(). + */ +function bytes_to_long($s) { + $acc = 0; + $length = strlen($s); + if (($length % 4)) { + $extra = (4 - ($length % 4)); + $s = (($b('') * $extra) + $s); + $length = ($length + $extra); + } + foreach( pyjslib_range(0, $length, 4) as $i ) { + $acc = ($acc << 32 + unpack('I', array_slice($s, $i, ($i + 4) - $i))[0]); + } + return $acc; +} + +function fread_all($handle) { + $pos = ftell($handle); + fseek($handle, 0); + $content = fread($handle, fstat($handle)["size"]); + fseek($handle, $pos); + return $content; +} +function fopen_and_write($filename, $mode, $data) { + $handle = fopen($filename, $mode); + fwrite($handle, $data); + rewind($handle); + return $handle; +} +/** + * long_to_bytes(n:long, blocksize:int) : string + * Convert a long integer to a byte string. + * If optional blocksize is given and greater than zero, pad the front of the + * byte string with binary zeros so that the length is a multiple of + * blocksize. + */ +function long_to_bytes($n,$blocksize=0) { + $s = $b(''); + $n = long($n); + while (($n > 0)) { + $s = (pack('I', $n & 4294967295) + $s); + $n = $n >> 32; + } + foreach( pyjslib_range(strlen($s)) as $i ) { + if (($s[$i] != $b('')[0])) { + break; + } + } + $s = array_slice($s, $i, null); + if (($blocksize > 0) && (strlen($s) % $blocksize)) { + $s = ((($blocksize - (strlen($s) % $blocksize)) * $b('')) + $s); + } + return $s; +} +/** + * Manages TCP Transport. encryption and message frames + */ +class Session { + function __construct($ip, $port, $auth_key = null, $server_salt = null) { + $this->sock = fsockopen("tcp://".$ip.":".$port); + $this->number = 0; + $this->timedelta = 0; \ No newline at end of file diff --git a/mtproto.php.save.1 b/mtproto.php.save.1 new file mode 100755 index 00000000..6f8f9a82 Binary files /dev/null and b/mtproto.php.save.1 differ diff --git a/mtproto.py b/mtproto.py index 943fbdca..75ae4331 100644 --- a/mtproto.py +++ b/mtproto.py @@ -89,7 +89,6 @@ class Session: step1 = struct.pack('