Commit Graph

359 Commits

Author SHA1 Message Date
Lonami Exo
97cab7347b Make lint happier 2017-09-04 17:10:04 +02:00
Lonami Exo
7f700c3bc1 Remove unused attributes and methods from the base TLObject class 2017-09-04 16:39:16 +02:00
Lonami Exo
dc238df2e0 Update to v0.13 2017-09-04 12:18:45 +02:00
Lonami Exo
6f0bd14c2f Use an Enum for the ConnectionMode and support specifying it 2017-09-04 11:24:10 +02:00
Lonami Exo
62a52679f4 Ensure the state of the requests is clean before invoking them 2017-09-03 13:45:13 +02:00
Lonami Exo
27408b46da Only reconnect from background thread if .disconnect wasn't called 2017-09-03 13:44:52 +02:00
Lonami Exo
626778bd32 Ignore EBADF when closing the socket 2017-09-03 13:44:29 +02:00
Lonami Exo
68cdc9eaf1 Treat OSError.errno == EBADF as a ConnectionResetError 2017-09-03 11:54:26 +02:00
Lonami Exo
f8f389c850 Fix ack requests removing pending requests when they shouldn't 2017-09-03 11:21:42 +02:00
Lonami Exo
db6fd4bdc2 Fix RPC errors being ignored due to modifying the wrong attribute 2017-09-03 11:19:28 +02:00
Lonami Exo
83f3f66113 Fix MtProtoSender never clearing self._pending_receive requests 2017-09-03 10:50:55 +02:00
Lonami Exo
fa34c4bb77 Handle ConnectionResetError on background thread (removed on 9bc1f64) 2017-09-03 10:05:18 +02:00
Lonami Exo
2a5d08b23d Turn socket.timeout error into the more general TimeoutError 2017-09-03 10:01:00 +02:00
Lonami Exo
494b82ea9d Fix check to avoid (dis)connecting if already (dis)connected 2017-09-03 09:59:37 +02:00
Lonami Exo
4de4026bb3 Move the "constant read" thread to the main TelegramClient 2017-09-03 09:56:10 +02:00
Lonami Exo
9bc1f64efe Move update handling to the MtProtoSender, being functional again 2017-09-02 21:46:44 +02:00
Lonami Exo
21eaf8bd72 Allow setting whether the MtProtoSender should use constant_read 2017-09-02 21:27:11 +02:00
Lonami Exo
863d2e8368 Make confirm_received a flag, avoid race conditions, fix bg RPCError
There was a race condition between TelegramBareClient.invoke
receiving part and MtProtoSender._handle_rpc_result actually
reading the result after setting request.confirmed = True.

The .confirmed is now a threading.Event to avoid the sleep(0.1).

RPC errors have been moved inside the request so they're not
raised on a background thread anymore.
2017-09-02 20:41:00 +02:00
Lonami Exo
b908296efa Remove unused TcpClien.read(timeout=...) param, change other accessors 2017-09-02 19:33:42 +02:00
Lonami Exo
36f51e1e3f Remove ability to TcpClient.cancel_read()
This simplifies the process of sending and receiving data,
and makes use of Python's socket.settimeout instead a hand-crafted
version with a sort-of arbitrary self.delay = 0.1 (seconds), which
should improve the speed of the method
2017-09-02 19:14:11 +02:00
Lonami Exo
cc280a129d Remove TcpClient.write/read shared locks
Since they were shared between write and read, and now the read
is done constantly on a separate thread, the read lock would
cause the write method to be locked and not functional at all
2017-09-02 18:49:29 +02:00
Lonami Exo
43b79c3d36 Add a thread to constantly read messages from the network 2017-09-02 18:27:22 +02:00
Lonami Exo
0197271f74 Fix SignUpRequest using an incorrectly named parameter 2017-09-02 16:52:56 +02:00
Lonami Exo
bea1b7f526 Preserve backward compatibility with old .sign_in() code 2017-08-31 10:38:53 +02:00
Lonami
5f636fdf31 Let .sign_in() call .send_code_request() 2017-08-31 10:34:09 +02:00
Lonami Exo
8bff10d956 Fix get_input_* not skipping None entities (#215)
This was an issue when parsing optional parameters, since None
could not be specified, resulting in a strange crash.
2017-08-30 11:12:25 +02:00
Lonami Exo
b4811261e9 Set a known buffer size if possible on BinaryWriter()s 2017-08-29 20:44:51 +02:00
Lonami Exo
7ad2ece168 Simplify modifying TelegramClient.session through its __init__ 2017-08-29 16:06:14 +02:00
Lonami Exo
22673aec0e Replace the old Session+pickle with JsonSession (name change) 2017-08-29 15:59:08 +02:00
Lonami Exo
82304b18eb Attempt at supporting IPv6 (#211 and #112) 2017-08-29 13:49:41 +02:00
Lonami Exo
592e107f52 Recreate the TCP socket only when needed 2017-08-29 13:35:56 +02:00
Lonami Exo
cff7655a10 Add support for TCP intermediate mode (#112) 2017-08-29 11:39:44 +02:00
Lonami Exo
a3c2c462a7 Add support for tcp_obfuscated on the Connection class (#112) 2017-08-28 21:44:02 +02:00
Lonami Exo
fa22a3f848 Create a centralized Connection class, replaces TcpTransport (#112) 2017-08-28 21:23:31 +02:00
Lonami Exo
bc72e52834 Reuse the AESModeCTR class on CdnDecrypter 2017-08-28 20:30:33 +02:00
Lonami Exo
5404670469 Implement and use TCP obfuscated as a PoC (#112)
Credits to MadelineProto/Connection.php by @danog
2017-08-28 20:25:44 +02:00
Lonami Exo
adfebfc82c Remove ThreadTcpClient test (committed by mistake) 2017-08-28 17:46:31 +02:00
Lonami Exo
2c6377e069 Update to v0.12.2 2017-08-28 17:29:08 +02:00
Lonami Exo
06b2d5d786 Fix CDN client not being disconnected 2017-08-28 16:33:23 +02:00
Lonami Exo
8afcd0b91f Turn HashChecker into CdnDecrypter to abstract CDN-specific aspects 2017-08-28 16:25:10 +02:00
Lonami Exo
b504ce14bc Verify the files downloaded from CDNs and raise on sha256 mismatch 2017-08-28 14:17:31 +02:00
Lonami Exo
00b5b5021b Report errors to pwrtelegram.xyz by default 2017-08-25 15:34:20 +02:00
Lonami Exo
2517b9787d TLObject.stringify() was showing bytes as lists 2017-08-24 20:56:08 +02:00
Lonami Exo
2e55998d7f Update to v0.12.1 2017-08-24 19:09:37 +02:00
Lonami Exo
98bbcb6cd6 Favour rsa module over PyCrypto since the former is pure Python 2017-08-24 18:41:48 +02:00
Lonami Exo
b7dbf9767e Fix TelegramClient.sign_in not accepting an integer for the code 2017-08-24 18:05:32 +02:00
Lonami Exo
4384ccb132 Tidy up TelegramBareClient.download_file CDN's mess 2017-08-24 18:00:47 +02:00
Lonami Exo
d5323c5506 Enhance a lot choosing a valid path when downloading files 2017-08-24 17:44:38 +02:00
Lonami Exo
e5e7715a31 Decrypt files downloaded from CDNs (closes #208) 2017-08-24 15:50:44 +02:00
Lonami Exo
940a2896e8 Part size when downloading files is now 4096 bytes, not 1024 2017-08-24 13:15:33 +02:00
Lonami Exo
09272ef6fc Support connecting and downloading encrypted files from CDNs (#208) 2017-08-24 13:02:48 +02:00
Lonami Exo
d5fd147881 Add a few more default RSA public keys from Telegram 2017-08-23 21:50:33 +02:00
Lonami Exo
66876b6722 Use pycrypto's RSA instead the old weird RSA implementation 2017-08-23 21:49:27 +02:00
Lonami Exo
0cae62f091 Fix silly bug with two wrongly ordered lines (on download document) 2017-08-23 16:06:41 +02:00
Lonami Exo
571d8bc21f Update to v0.12 2017-08-23 01:47:52 +02:00
Lonami Exo
c0bae1d608 Replace type(...) == ... with isinstance() checks 2017-08-23 01:45:49 +02:00
Lonami Exo
65d5ab685f Let .upload_file() support streams and byte arrays 2017-08-23 01:43:08 +02:00
Lonami Exo
8ed77418bf Make .download_profile_photo() more friendly 2017-08-23 01:35:12 +02:00
Lonami Exo
1d0ad9628d Rename "callback" to "progress_callback" for consistency 2017-08-23 00:55:34 +02:00
Lonami Exo
fd6a9a4318 Make downloading files a lot more friendly with .download_media() 2017-08-23 00:48:00 +02:00
Lonami Exo
4234efcc86 Make sending files a lot more friendly with a simple .send_file() 2017-08-23 00:27:33 +02:00
Lonami Exo
81ccd21cdb Allow specifying a phone number or username for common methods 2017-08-23 00:01:10 +02:00
Lonami Exo
fb5c43b539 Ensure .connect() always returns True/False 2017-08-22 23:17:05 +02:00
Lonami Exo
1a6231472e Ensure the connection is flagged as closed on errors, move #201 2017-08-22 23:12:32 +02:00
Lonami Exo
88ec9c297e Improve libssl.py's file formatting 2017-08-22 23:05:07 +02:00
Lonami Exo
274e16ac66 Avoid defining Python's AES class if libssl's is available 2017-08-22 23:05:07 +02:00
Tural
12b84c929a Fix log_out problems on macOS devices 2017-08-21 09:00:23 +02:00
Christian Stemmle
ffb1cf483d Faster crypto by using libssl (closes #199) 2017-08-20 01:21:11 +02:00
Lonami Exo
afcddfd7c1 Remove seemingly useless array copies on aes.py (#199) 2017-08-17 18:12:19 +02:00
Lonami Exo
9f812d83a9 Use sympy for faster factorization if available (#199) 2017-08-17 17:37:27 +02:00
Lonami Exo
7e85a3cda4 Attempt at making get_new_msg_id thread-safe (#195) 2017-08-14 15:17:16 +02:00
MeytiGHG
1794acdfec Check for isinstance(x, JsonSession) instead crashing during transition 2017-08-07 00:54:23 +02:00
Lonami Exo
83c346ccc5 Let InputPeerChannel be casted automatically into InputChannel 2017-08-05 09:37:34 +02:00
Lonami Exo
7844cd358e Attempt at making layer migrations more smooth (#158) 2017-07-26 16:10:45 +02:00
Lonami Exo
160a3699ac Fix confusing names "MtProtoRequest" and ".confirmed" (#176)
This also fixes the annoyingly confusing message:
"Odd msg_seqno expected (relevant message), but even received."
2017-07-24 16:54:48 +02:00
Lonami Exo
773376ee21 Fix two more spelling mistakes 2017-07-23 18:38:27 +02:00
Lonami Exo
fe2e9f335b Style enhancements for PR #173 2017-07-23 17:08:04 +02:00
hnikaein
c9e566342e All download_* methods now accept streams 2017-07-20 09:37:19 +02:00
Lonami Exo
3be995b5a3 Update to v0.11.5 2017-07-11 11:38:17 +02:00
Lonami Exo
5ded836437 Update to v0.11.4 2017-07-10 16:13:45 +02:00
Lonami Exo
88c4cdfb52 Make get_input_* methods slightly smarter 2017-07-10 16:11:06 +02:00
Lonami Exo
bdee94eaf3 Implement automatic cast to InputUser too (closes #159) 2017-07-10 16:04:10 +02:00
Lonami Exo
1f7ac71187 Debug level should always be used for logging since it's a library 2017-07-10 15:21:20 +02:00
Lonami Exo
0119a00658 Rename no_webpage to link_preview for clarity 2017-07-07 10:37:19 +02:00
Lonami Exo
95a989be2c Automatically cast Channel to InputChannel (similar to InputPeer) 2017-07-07 09:48:06 +02:00
Lonami Exo
f88efa7f49 Let PeerChat be casted to InputPeerChat automatically 2017-07-04 21:18:35 +02:00
Lonami Exo
8fd0d7eadd Add a new .stringify() function to visualize TLObjects more easily 2017-07-04 21:15:47 +02:00
Lonami Exo
632fcb7c00 Ensure device model is non-empty (closes #154) 2017-07-04 19:47:55 +02:00
Lonami Exo
9bb6353fa3 Fix send_message using the incorrect type to return the msg_id (#156) 2017-07-04 16:53:07 +02:00
Lonami Exo
127e5f70d8 Update to v0.11.2 2017-07-04 10:39:57 +02:00
Lonami Exo
1f3aec589b Let TelegramBareClient handle FileMigrateErrors instead (closes #148) 2017-07-04 10:21:15 +02:00
Lonami Exo
15673d9f77 Let __call__ = invoke, and encourage this new way to invoke requests 2017-07-02 11:56:40 +02:00
Lonami Exo
23e2802215 Update to layer 68 2017-06-30 11:48:45 +02:00
Lonami Exo
83c8e98448 Ensure that message ids are signed once again 2017-06-27 18:45:52 +02:00
Lonami Exo
0cfbf63eaf Fix ConnectionResetError not flagging the socket as disconnected 2017-06-27 10:18:35 +02:00
Lonami Exo
b0173c3ec2 Use more accurate values for msg_ids 2017-06-26 11:01:20 +02:00
Lonami Exo
a5ce375358 Update to v0.11.1 and fix setup.py 2017-06-24 18:16:10 +02:00
Lonami Exo
459e988ff5 Rename rpc_n_errors dictionary to rpc_errors_n_all 2017-06-24 18:10:05 +02:00
Lonami Exo
20956b23d1 Replace super calls with simply super() 2017-06-23 10:15:11 +02:00
Lonami Exo
843c16215c Add timeout parameter on TcpClient.connect() too 2017-06-22 19:21:33 +02:00
Lonami Exo
e4fbd87c75 Turn timeout into a property instead leaving it as a parameter 2017-06-22 11:43:42 +02:00
Lonami Exo
52a42661ee Add timeout to connect() 2017-06-22 10:39:00 +02:00
Lonami Exo
a9a5c7e254 Use signed longs for every request_id (#138 follow-up) 2017-06-21 10:21:09 +02:00
Lonami Exo
d58222d007 Use crc32 from zlib instead from binascii
It seems to be a bit faster stackoverflow.com/q/44502855
2017-06-20 11:03:46 +02:00
Lonami Exo
86358d7805 Add periodic pings if an updates thread was started (closes #138) 2017-06-20 09:46:37 +02:00
Lonami Exo
697434be37 Don't do anything on .connect() if it's already connected 2017-06-20 09:46:37 +02:00
Lonami
daa626aa04 Merge pull request #136 from cher-nov/pr20170619_session
Fix bugs related to temporary sessions
2017-06-18 23:49:36 +02:00
Dmitry D. Chernov
8d9e50989b Fix temporary Session fields not being defined 2017-06-19 07:41:47 +10:00
Dmitry D. Chernov
2af962230f Fix error 400:CONNECTION_APP_VERSION_EMPTY when using temporary sessions 2017-06-19 07:40:35 +10:00
Hasan
c13164f5cf Use the correct amount of random bytes in DH request
The official documentation says a 2048 *bit* number.
`os.urandom` takes an argument that represents the number of *bytes*.
2048 bits is 256 bytes
2017-06-18 23:38:14 +02:00
Lonami Exo
8afb0a3f6b Rename Request.msg_id to request_msg_id to avoid name clash (fix #122) 2017-06-18 10:01:59 +02:00
Lonami Exo
765ae870cf Fix connection parameters not being copied on reconnection (#129) 2017-06-17 22:05:34 +02:00
Lonami
be33ae4e80 Fix rpc_message_to_error failing to construct them 2017-06-17 08:25:48 +02:00
Lonami Exo
2b85463ce6 Don't ignore more possible updates on .receive_updates() (closes #117) 2017-06-16 15:36:47 +02:00
Goblenus
c304ee903f Trigger reconnection on BrokenPipeError and InvalidChecksumError 2017-06-16 14:59:10 +02:00
Lonami Exo
92b4125b2b Update to v0.11 2017-06-16 10:11:03 +02:00
Lonami Exo
e7b0c06ca5 Make .get_input_user faster when the right type is given 2017-06-16 10:01:05 +02:00
feodoran
13199f737e Handle more cases on .get_display_name 2017-06-16 09:11:49 +02:00
Lonami Exo
86d45cc276 Improve .get_input_peer and use it only when creating requests*
This avoids cyclic dependencies, so types requiring an InputPeer
as a parameter will NOT convert faulty types to the right ones.
2017-06-15 17:03:59 +02:00
Lonami Exo
c02fbae5aa Allow creating a new parallel connection (closes #102) 2017-06-15 15:50:44 +02:00
Lonami Exo
3fccfd40e6 Show error messages on non-specialized error classes (closes #113) 2017-06-15 15:25:05 +02:00
Lonami Exo
92088383f7 Fix get_message_history not returning sender on channels (closes #110) 2017-06-15 09:41:39 +02:00
Lonami Exo
fc915b2284 Fix get_message_history ignoring chats and enhance find_user_or_chat 2017-06-14 14:06:35 +02:00
Lonami Exo
96d8ca94cf Move TelegramClient.list_sessions to *Session.list_session 2017-06-14 13:57:30 +02:00
Lonami Exo
d8afb7e548 Also except BlockingIOError on TcpClient.send() 2017-06-12 10:44:04 +02:00
Goblenus
f083b88f59 (Fix) Fix api_id type mismatch 2017-06-12 09:34:53 +02:00
Lonami Exo
1ca41b5854 Automatically infer the value for 'random_id' parameters 2017-06-11 19:16:59 +02:00
Lonami Exo
3ed59d08e5 Fix commit 65912f9 by properly skipping lost messages 2017-06-11 17:53:53 +02:00
Lonami Exo
65912f926b Allow to send more than one request before receiving them (#105) 2017-06-11 14:58:16 +02:00
Lonami Exo
c6acd6adc5 Use only ASCII characters on the code (closes #104) 2017-06-10 13:39:37 +02:00
Lonami Exo
5c138977c3 Do not cancel UpdatesThread .receive() on reconnection 2017-06-10 13:16:37 +02:00
Lonami Exo
a73be04da7 Move connection parameters to the session 2017-06-10 13:15:04 +02:00
Lonami Exo
1119a2737a Remove markdown "parser" since that's not Telethon-specific 2017-06-10 13:00:39 +02:00
Lonami Exo
44ab85962b Completely change errors (make one class for each) 2017-06-10 11:47:51 +02:00
Lonami Exo
5df4716164 Add errors related to #103 2017-06-10 10:08:08 +02:00
Lonami Exo
7adb4f09d6 Slightly reorganise the project structure 2017-06-09 16:13:39 +02:00
Lonami Exo
ba5bfa105f Use memoryview() on TcpClient.write() instead slicing the data 2017-06-09 11:50:30 +02:00
Lonami Exo
c6645a555d Prefer BufferedWriter over BinaryWriter for socket operations 2017-06-09 11:42:39 +02:00
Lonami Exo
5494cb15eb "Don't go nuts switching back and forth between (non-)blocking"
And other improvements (shutting down the socket, proper naming).
https://docs.python.org/3/howto/sockets.html#non-blocking-sockets
2017-06-09 11:27:52 +02:00
Lonami Exo
40616ba704 Support arbitrary file objects for .download_file() and update README 2017-06-09 11:12:56 +02:00
Lonami Exo
40f4c2533a Incredibly improve downloading media on different DCs*
* This involves raising the InvalidDCError on .invoke()
when the message is FILE_MIGRATE_X, but users can always
catch this error and use the .invoke_on_dc() function
2017-06-09 10:50:40 +02:00
Lonami Exo
efd1c1ba64 Always acknowledge received errors for server not to resend them 2017-06-09 10:46:39 +02:00
Lonami Exo
639a17aa5a Cache exported TelegramBareClients instead MtProtoSenders 2017-06-09 10:35:19 +02:00
Lonami Exo
cf65e5b1cf Get rid of signature warnings and use nicer *args instead 2017-06-08 19:03:15 +02:00
Lonami Exo
b760f0de50 Fix reconnection (InvalidDC did not occur on .connect())*
* Also, use the parameters given for the initial connection
instead ignoring them.
2017-06-08 16:51:20 +02:00
Lonami Exo
6a043b7371 Fix Session not being able to save auth_key=None 2017-06-08 16:45:09 +02:00
Lonami Exo
d788d30de2 Move connect() parameters to init and ignore signature warnings 2017-06-08 16:41:20 +02:00
Lonami Exo
a07c7bd0d0 Move InteractiveClient to examples/ (and stop shipping it to pip) 2017-06-08 14:06:32 +02:00
Lonami Exo
88f87f6de2 Major TelegramClient rewrite, split it into TelegramBareClient*
Making a distinction between a bare client and a full-featured
client will make it easier to create instances of the bare
client itself that can be simultaneously and hence have two
separate connections which do not interfer with eachother.

While writing the bare client, full reconnection to a
different data center is once again done only on .connect().
2017-06-08 13:12:57 +02:00
Lonami Exo
6922eb3d39 Update to v0.10.1 2017-06-07 20:15:27 +02:00