mtproto 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mtproto/auth_key_generator.rb +16 -6
  3. data/lib/mtproto/client/rpc.rb +141 -0
  4. data/lib/mtproto/client.rb +36 -181
  5. data/lib/mtproto/crypto/aes_ige.rb +1 -1
  6. data/lib/mtproto/crypto/factorization.rb +1 -1
  7. data/lib/mtproto/message_id.rb +13 -0
  8. data/lib/mtproto/rpc/get_config.rb +37 -0
  9. data/lib/mtproto/rpc/get_contacts.rb +22 -0
  10. data/lib/mtproto/rpc/get_updates_difference.rb +33 -0
  11. data/lib/mtproto/rpc/get_updates_state.rb +22 -0
  12. data/lib/mtproto/rpc/get_users.rb +22 -0
  13. data/lib/mtproto/rpc/ping.rb +26 -0
  14. data/lib/mtproto/rpc/send_code.rb +44 -0
  15. data/lib/mtproto/rpc/send_message.rb +31 -0
  16. data/lib/mtproto/rpc/sign_in.rb +52 -0
  17. data/lib/mtproto/tl/auth_key/dh_gen_response.rb +37 -0
  18. data/lib/mtproto/tl/auth_key/req_dh_params.rb +31 -0
  19. data/lib/mtproto/tl/auth_key/req_pq_multi.rb +18 -0
  20. data/lib/mtproto/tl/auth_key/res_pq.rb +62 -0
  21. data/lib/mtproto/tl/auth_key/server_dh_params.rb +43 -0
  22. data/lib/mtproto/tl/auth_key/set_client_dh_params.rb +25 -0
  23. data/lib/mtproto/tl/message.rb +2 -216
  24. data/lib/mtproto/tl/method_builder.rb +29 -0
  25. data/lib/mtproto/tl/rpc/auth/authorization.rb +107 -0
  26. data/lib/mtproto/tl/rpc/auth/send_code.rb +28 -0
  27. data/lib/mtproto/tl/rpc/auth/sent_code.rb +36 -0
  28. data/lib/mtproto/tl/rpc/auth/sign_in.rb +32 -0
  29. data/lib/mtproto/tl/rpc/contacts/contacts.rb +155 -0
  30. data/lib/mtproto/tl/rpc/contacts/get_contacts.rb +18 -0
  31. data/lib/mtproto/tl/rpc/help/config.rb +35 -0
  32. data/lib/mtproto/tl/rpc/help/get_config.rb +17 -0
  33. data/lib/mtproto/tl/rpc/messages/send_message.rb +43 -0
  34. data/lib/mtproto/tl/rpc/messages/updates.rb +87 -0
  35. data/lib/mtproto/tl/rpc/ping.rb +18 -0
  36. data/lib/mtproto/tl/rpc/pong.rb +46 -0
  37. data/lib/mtproto/tl/rpc/updates/difference.rb +332 -0
  38. data/lib/mtproto/tl/rpc/updates/get_difference.rb +42 -0
  39. data/lib/mtproto/tl/rpc/updates/get_state.rb +17 -0
  40. data/lib/mtproto/tl/rpc/updates/state.rb +59 -0
  41. data/lib/mtproto/tl/rpc/users/get_users.rb +25 -0
  42. data/lib/mtproto/tl/rpc/users/users.rb +99 -0
  43. data/lib/mtproto/updates_poller.rb +111 -0
  44. data/lib/mtproto/version.rb +1 -1
  45. data/lib/mtproto.rb +10 -1
  46. metadata +53 -5
  47. data/ext/aes_ige/Makefile +0 -273
  48. data/ext/factorization/Makefile +0 -273
  49. data/lib/mtproto/connection.rb +0 -103
@@ -1,103 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module MTProto
4
- class Connection
5
- attr_reader :client
6
-
7
- def initialize(api_id: nil, api_hash: nil, host:, port: 443, public_key:, dc_number:, test_mode: false, timeout: 10)
8
- @client = Client.new(
9
- api_id: api_id,
10
- api_hash: api_hash,
11
- host: host,
12
- port: port,
13
- public_key: public_key,
14
- dc_number: dc_number,
15
- test_mode: test_mode,
16
- timeout: timeout
17
- )
18
- @connected = false
19
- end
20
-
21
- def connect!
22
- return if @connected
23
-
24
- @client.connect!
25
- @client.make_auth_key
26
- @connected = true
27
- end
28
-
29
- def disconnect!
30
- @client.disconnect! if @connected
31
- @connected = false
32
- end
33
-
34
- def ping(ping_id = nil)
35
- raise NotConnectedError unless @connected
36
-
37
- ping_id ||= rand(2**63)
38
- body = TL::Message.ping(ping_id)
39
-
40
- response_body = @client.rpc_call(body)
41
- message = TL::Message.new(body: response_body)
42
- pong = message.parse_pong
43
-
44
- raise PingMismatchError unless pong[:ping_id] == ping_id
45
-
46
- true
47
- end
48
-
49
- def get_config
50
- raise NotConnectedError unless @connected
51
-
52
- response = @client.help_get_config
53
-
54
- # Handle gzip compression
55
- constructor = response[0, 4].unpack1('L<')
56
- if constructor == TL::GzipPacked::CONSTRUCTOR
57
- response = TL::GzipPacked.unpack(response)
58
- constructor = response[0, 4].unpack1('L<')
59
- end
60
-
61
- # Handle RPC errors
62
- if constructor == TL::RpcError::CONSTRUCTOR
63
- error = TL::RpcError.deserialize(response)
64
- raise MTProto::RpcError.new(error.error_code, error.error_message)
65
- end
66
-
67
- # Parse and return config
68
- if constructor == TL::Config::CONSTRUCTOR || constructor == TL::Config::CONSTRUCTOR_ALT
69
- TL::Config.deserialize(response)
70
- else
71
- raise UnexpectedConstructorError.new(constructor)
72
- end
73
- end
74
-
75
- def send_code(phone_number, code_settings: {})
76
- raise NotConnectedError unless @connected
77
- raise ArgumentError, 'phone_number is required' if phone_number.nil? || phone_number.empty?
78
-
79
- response = @client.auth_send_code(phone_number, code_settings: code_settings)
80
-
81
- # Handle gzip compression
82
- constructor = response[0, 4].unpack1('L<')
83
- if constructor == TL::GzipPacked::CONSTRUCTOR
84
- response = TL::GzipPacked.unpack(response)
85
- constructor = response[0, 4].unpack1('L<')
86
- end
87
-
88
- # Handle RPC errors
89
- if constructor == TL::RpcError::CONSTRUCTOR
90
- error = TL::RpcError.deserialize(response)
91
- raise MTProto::RpcError.new(error.error_code, error.error_message)
92
- end
93
-
94
- # Parse and return sent code
95
- if constructor == TL::SentCode::CONSTRUCTOR
96
- sent_code = TL::SentCode.deserialize(response)
97
- sent_code.to_h
98
- else
99
- raise UnexpectedConstructorError.new(constructor)
100
- end
101
- end
102
- end
103
- end