tox 0.0.2 → 0.0.3

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.
@@ -1,21 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # tox.rb - Ruby interface for libtoxcore
4
- # Copyright (C) 2015-2017 Braiden Vasco
5
- #
6
- # This program is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
3
  module Tox
20
4
  ##
21
5
  # Address primitive.
@@ -24,5 +8,17 @@ module Tox
24
8
  def self.bytesize
25
9
  38
26
10
  end
11
+
12
+ def public_key
13
+ @public_key ||= PublicKey.new value[0...32]
14
+ end
15
+
16
+ def nospam
17
+ @nospam ||= Nospam.new value[32...36]
18
+ end
19
+
20
+ def checksum
21
+ @checksum ||= AddressChecksum.new value[36...38]
22
+ end
27
23
  end
28
24
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tox
4
+ ##
5
+ # Address checksum primitive.
6
+ #
7
+ class AddressChecksum < Binary
8
+ def self.bytesize
9
+ 2
10
+ end
11
+ end
12
+ end
@@ -1,26 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # tox.rb - Ruby interface for libtoxcore
4
- # Copyright (C) 2015-2017 Braiden Vasco
5
- #
6
- # This program is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
3
  module Tox
20
4
  ##
21
5
  # Binary primitive representation.
22
6
  #
23
- class Binary < String
7
+ class Binary
24
8
  def self.bytesize
25
9
  raise NotImplementedError, "#{self}.bytesize"
26
10
  end
@@ -29,30 +13,43 @@ module Tox
29
13
  /\A[\da-fA-F]{#{2 * bytesize}}\z/
30
14
  end
31
15
 
32
- def initialize(value) # rubocop:disable Metrics/MethodLength
16
+ attr_reader :value
17
+
18
+ def initialize(value)
33
19
  unless value.is_a? String
34
20
  raise TypeError, "expected value to be a #{String}"
35
21
  end
36
22
 
37
23
  if value.bytesize == self.class.bytesize
38
- super value
24
+ self.value = value
25
+ elsif value =~ self.class.hex_re
26
+ self.hex_value = value
39
27
  else
40
- unless value =~ self.class.hex_re
41
- raise ArgumentError, 'expected value to be a hex string'
42
- end
43
- super [value].pack('H*')
28
+ raise ArgumentError, 'expected value to be a hex or binary string'
44
29
  end
45
-
46
- to_hex
47
- freeze
48
30
  end
49
31
 
50
- def to_hex
51
- @to_hex ||= unpack('H*').first.upcase.freeze
32
+ def to_s
33
+ @to_s ||= value.unpack('H*').first.upcase.freeze
52
34
  end
53
35
 
54
36
  def inspect
55
- "#<#{self.class}: \"#{to_hex}\">"
37
+ "#<#{self.class}: \"#{self}\">"
38
+ end
39
+
40
+ def ==(other)
41
+ return false unless self.class == other.class
42
+ value == other.value
43
+ end
44
+
45
+ private
46
+
47
+ def value=(value)
48
+ @value = value.frozen? ? value : value.dup.freeze
49
+ end
50
+
51
+ def hex_value=(value)
52
+ @value = [value].pack('H*').freeze
56
53
  end
57
54
  end
58
55
  end
@@ -1,57 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # tox.rb - Ruby interface for libtoxcore
4
- # Copyright (C) 2015-2017 Braiden Vasco
5
- #
6
- # This program is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
3
  module Tox
20
4
  ##
21
5
  # Tox client.
22
6
  #
23
7
  class Client
24
8
  def initialize(options = Tox::Options.new)
9
+ @on_friend_request = nil
10
+ @on_friend_message = nil
11
+ @on_friend_name_change = nil
12
+ @on_friend_status_message_change = nil
13
+ @on_friend_status_change = nil
14
+
25
15
  initialize_with options
26
- self.running = false
27
16
  end
28
17
 
29
18
  def bootstrap_official
30
19
  Status.new.udp_nodes.each do |node|
31
- bootstrap node
20
+ bootstrap node.resolv_ipv4, node.port, node.public_key
32
21
  end
33
22
  end
34
23
 
35
- def running?
36
- @running
37
- end
38
-
39
- def stop
40
- return false unless running?
41
- self.running = false
42
- true
43
- end
44
-
45
- def run
46
- unless mutex.try_lock
47
- raise AlreadyRunningError, "already running in #{thread}"
48
- end
49
-
50
- run_internal
51
-
52
- mutex.unlock
53
- end
54
-
55
24
  def friends
56
25
  friend_numbers.map do |friend_number|
57
26
  friend friend_number
@@ -66,10 +35,6 @@ module Tox
66
35
  Friend.new(self, number).exist!
67
36
  end
68
37
 
69
- def on_iteration(&block)
70
- @on_iteration = block
71
- end
72
-
73
38
  def on_friend_request(&block)
74
39
  @on_friend_request = block
75
40
  end
@@ -90,29 +55,7 @@ module Tox
90
55
  @on_friend_status_change = block
91
56
  end
92
57
 
93
- private
94
-
95
- attr_accessor :thread
96
-
97
- def mutex
98
- @mutex ||= Mutex.new
99
- end
100
-
101
- def running=(value)
102
- @running = !!value
103
- end
104
-
105
- def run_internal
106
- self.running = true
107
- self.thread = Thread.current
108
- run_loop
109
- ensure
110
- self.running = false
111
- self.thread = nil
112
- end
113
-
114
58
  class Error < RuntimeError; end
115
59
  class BadSavedataError < Error; end
116
- class AlreadyRunningError < Error; end
117
60
  end
118
61
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tox
4
+ ##
5
+ # Protocols that can be used to connect to the network or friends.
6
+ #
7
+ module ConnectionStatus
8
+ # There is no connection. This instance, or the friend the state change
9
+ # is about, is now offline.
10
+ NONE = :none
11
+
12
+ # A TCP connection has been established. For the own instance, this means
13
+ # it is connected through a TCP relay, only. For a friend, this means that
14
+ # the connection to that particular friend goes through a TCP relay.
15
+ TCP = :tcp
16
+
17
+ # A UDP connection has been established. For the own instance, this means
18
+ # it is able to send UDP packets to DHT nodes, but may still be connected
19
+ # to a TCP relay. For a friend, this means that the connection
20
+ # to that particular friend was built using direct UDP packets.
21
+ UDP = :udp
22
+ end
23
+ end
@@ -1,21 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # tox.rb - Ruby interface for libtoxcore
4
- # Copyright (C) 2015-2017 Braiden Vasco
5
- #
6
- # This program is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
3
  module Tox
20
4
  ##
21
5
  # Friend representation in Tox client.
@@ -35,22 +19,27 @@ module Tox
35
19
 
36
20
  alias exists! exist!
37
21
 
22
+ def ==(other)
23
+ return false unless self.class == other.class
24
+ client == other.client &&
25
+ number == other.number
26
+ end
27
+
38
28
  private
39
29
 
40
30
  def client=(value)
41
31
  unless value.is_a? Client
42
- raise TypeError, "expected client to be a #{Client}"
32
+ raise TypeError, "Expected #{Client}, got #{value.class}"
43
33
  end
44
34
  @client = value
45
35
  end
46
36
 
47
37
  def number=(value)
48
38
  unless value.is_a? Integer
49
- raise TypeError, "expected number to be a #{Integer}"
39
+ raise TypeError, "Expected #{Integer}, got #{value.class}"
50
40
  end
51
41
  unless value >= 0
52
- raise ArgumentError,
53
- 'expected number to be greater than or equal to zero'
42
+ raise 'Expected friend number to be greater than or equal to zero'
54
43
  end
55
44
  @number = value
56
45
  end
@@ -1,28 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # tox.rb - Ruby interface for libtoxcore
4
- # Copyright (C) 2015-2017 Braiden Vasco
5
- #
6
- # This program is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
3
  module Tox
20
4
  ##
21
5
  # Tox node credentials.
22
6
  #
23
7
  class Node
24
8
  # Range of valid port numbers.
25
- PORT_RANGE = 0..65_535
9
+ PORT_RANGE = 1..65_535
26
10
 
27
11
  def initialize(data)
28
12
  @data = data.map { |k, v| [k.to_sym, v] }.to_h.freeze
@@ -1,21 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # tox.rb - Ruby interface for libtoxcore
4
- # Copyright (C) 2015-2017 Braiden Vasco
5
- #
6
- # This program is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
3
  module Tox
20
4
  ##
21
5
  # Nospam primitive.
@@ -24,5 +8,14 @@ module Tox
24
8
  def self.bytesize
25
9
  4
26
10
  end
11
+
12
+ def initialize(value)
13
+ return @value = [value].pack('L').reverse.freeze if value.is_a? Integer
14
+ super
15
+ end
16
+
17
+ def to_i
18
+ @to_i ||= value.reverse.unpack('L').first
19
+ end
27
20
  end
28
21
  end
@@ -1,25 +1,63 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # tox.rb - Ruby interface for libtoxcore
4
- # Copyright (C) 2015-2017 Braiden Vasco
5
- #
6
- # This program is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
-
19
3
  module Tox
20
4
  ##
21
5
  # Startup options for Tox client.
22
6
  #
23
7
  class Options
8
+ BIND_PORT_RANGE = 0..65_535
9
+
10
+ attr_reader :proxy
11
+
12
+ def proxy=(value)
13
+ if value.nil?
14
+ @proxy = nil
15
+ set_proxy_params ProxyType::NONE, nil, 0
16
+ return
17
+ end
18
+ unless value.is_a? Proxies::Base
19
+ raise TypeError, "Expected #{Proxies::Base}, got #{value.class}"
20
+ end
21
+ @proxy = value
22
+ set_proxy_params value.type, value.host, value.port
23
+ end
24
+
25
+ def start_port=(value)
26
+ unless value.is_a? Integer
27
+ raise TypeError, "Expected #{Integer}, got #{value.class}"
28
+ end
29
+ unless BIND_PORT_RANGE.include? value
30
+ raise "Expected value to be from range #{BIND_PORT_RANGE}"
31
+ end
32
+ self.start_port_internal = value
33
+ end
34
+
35
+ def end_port=(value)
36
+ unless value.is_a? Integer
37
+ raise TypeError, "Expected #{Integer}, got #{value.class}"
38
+ end
39
+ unless BIND_PORT_RANGE.include? value
40
+ raise "Expected value to be from range #{BIND_PORT_RANGE}"
41
+ end
42
+ self.end_port_internal = value
43
+ end
44
+
45
+ def tcp_port=(value)
46
+ unless value.is_a? Integer
47
+ raise TypeError, "Expected #{Integer}, got #{value.class}"
48
+ end
49
+ unless BIND_PORT_RANGE.include? value
50
+ raise "Expected value to be from range #{BIND_PORT_RANGE}"
51
+ end
52
+ self.tcp_port_internal = value
53
+ end
54
+
55
+ private
56
+
57
+ def set_proxy_params(type, host, port)
58
+ self.proxy_type = type
59
+ self.proxy_host = host
60
+ self.proxy_port = port
61
+ end
24
62
  end
25
63
  end