net-telnet-rfc2217 0.0.5 → 1.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2fbbd2adbafc939b4e958060e6e04962ebc1d5e50b7397ba540a390e4747dc62
4
- data.tar.gz: d02a391095425a5c01554134f938824e1a6e1424395e02ec094732f37ae9406d
3
+ metadata.gz: '008992d829099c5c5a8160c3c27e98f735ce4958e725df2201f5f3f3149c3fd9'
4
+ data.tar.gz: eb5c2f9b705d7b93528d2b9e17cf1a601169fd589482d6f982bd6b3b7873bea2
5
5
  SHA512:
6
- metadata.gz: 7c369abec55f93a3ffa2a925107dc4936cc6c8c8bb4af0e9c0c445a014703ea61af662c9b19ee7fcd2b617126b9c2ccbde9bbbd526cb35ad69ad813623ba5b06
7
- data.tar.gz: 8886939d76f493ce2091073969fac2f6bac3b6487c5250a7f425a61e227627817aaae858ddaeb8fc04ea1eb03eb82cadad926f7919e848710208f0398cfb850d
6
+ metadata.gz: e1411e655cb32823feacf903948b54d1f86d12249a8b7b0f8cc45f5ce957f0a82a552b8f2b3260b9c99e9117c9693f27414aceaa1d3ede6864f525b51f7e8264
7
+ data.tar.gz: a0625e0a693cc7cbccade9a86b60410a9f1cce72d14c6a186ccf32cda9c8fde802c993c01cd9992df67a88c8de0850df7ce0dadaa0df6174df94328abb77ea19
@@ -1,7 +1,7 @@
1
1
  module Net
2
2
  class Telnet
3
3
  class RFC2217
4
- VERSION = '0.0.5'
4
+ VERSION = '1.0.2'
5
5
  end
6
6
  end
7
7
  end
@@ -1,5 +1,4 @@
1
1
  require 'net/telnet'
2
- require 'byebug'
3
2
 
4
3
  # have to patch Telnet to allow us to read control sequences
5
4
  require 'net/telnet/rfc2217/telnet'
@@ -14,43 +13,9 @@ module Net
14
13
 
15
14
  attr_reader :telnet
16
15
 
17
- COM_PORT_OPTION = 44.chr
18
-
19
- SET_BAUDRATE = 1.chr
20
- SET_DATASIZE = 2.chr
21
- SET_PARITY = 3.chr
22
- SET_STOPSIZE = 4.chr
23
- SET_CONTROL = 5.chr
24
- NOTIFY_LINESTATE = 6.chr
25
- NOTIFY_MODEMSTATE = 7.chr
26
- FLOWCONTROL_SUSPEND = 8.chr
27
- SET_LINESTATE_MASK = 10.chr
28
- SET_MODEMSTATE_MASK = 11.chr
29
- PURGE_DATA = 12.chr
30
-
31
- SET_BAUDRATE_RESPONSE = 101.chr
32
- SET_DATASIZE_RESPONSE = 102.chr
33
- SET_PARITY_RESPONSE = 103.chr
34
- SET_STOPSIZE_RESPONSE = 104.chr
35
- SET_CONTROL_RESPONSE = 105.chr
36
- NOTIFY_LINESTATE_RESPONSE = 106.chr
37
- NOTIFY_MODEMSTATE_RESPONSE = 107.chr
38
- FLOWCONTROL_SUSPEND_RESPONSE = 108.chr
39
- SET_LINESTATE_MASK_RESPONSE = 110.chr
40
- SET_MODEMSTATE_MASK_RESPONSE = 111.chr
41
- PURGE_DATA_RESPONSE = 112.chr
42
-
43
- NONE = 1
44
- ODD = 2
45
- EVEN = 3
46
- MARK = 4
47
- SPACE = 5
48
-
49
- SERIAL_PORT_PARAMS = %w{baud data_bits stop_bits parity}.freeze
50
-
51
16
  class << self
52
- def open(options)
53
- sp = new(options)
17
+ def open(**kwargs)
18
+ sp = new(opt**kwargs)
54
19
  if block_given?
55
20
  begin
56
21
  yield sp
@@ -64,9 +29,15 @@ module Net
64
29
  end
65
30
  end
66
31
 
67
- def initialize(options = {}, &block)
68
- set_modem_params(options.slice(*SERIAL_PORT_PARAMS))
32
+ attr_reader :baud, :data_bits, :parity, :stop_bits
33
+
34
+ def initialize(host, port: 23, baud: 115200, data_bits: 8, parity: :none, stop_bits: 1, &block)
35
+ set_modem_params(baud: baud, data_bits: data_bits, parity: parity, stop_bits: stop_bits)
69
36
 
37
+ options = {
38
+ 'Host' => host,
39
+ 'Port' => port,
40
+ }
70
41
  options['Binmode'] = true
71
42
  options['Telnetmode'] = false
72
43
  @telnet = Telnet.new(options, &block)
@@ -81,35 +52,15 @@ module Net
81
52
  end
82
53
  end
83
54
 
84
- def get_modem_params
85
- @modem_params
86
- end
87
-
88
- def set_modem_params(modem_params)
89
- @modem_params = modem_params.dup
90
- @modem_params['baud'] = 115200 unless @modem_params.key?('baud')
91
- @modem_params['data_bits'] = 8 unless @modem_params.key?('data_bits')
92
- @modem_params['stop_bits'] = 1 unless @modem_params.key?('stop_bits')
93
- unless @modem_params.key?('parity')
94
- @modem_params['parity'] = (data_bits == 8 ? NONE : EVEN)
95
- end
96
- write_modem_params if telnet
97
- end
98
-
99
- def baud
100
- get_modem_params['baud']
101
- end
55
+ def set_modem_params(baud: nil, data_bits: nil, parity: nil, stop_bits: nil)
56
+ raise ArgumentError, "Parity must be :none, :even, :odd, :mark, or :space" unless parity.nil? || %i{none even odd mark space}.include?(parity)
102
57
 
103
- def data_bits
104
- get_modem_params['data_bits']
105
- end
58
+ @baud ||= baud || 115200
59
+ @data_bits ||= data_bits || 8
60
+ @parity ||= parity || :none
61
+ @stop_bits ||= stop_bits || 1
106
62
 
107
- def stop_bits
108
- get_modem_params['stop_bits']
109
- end
110
-
111
- def parity
112
- get_modem_params['parity']
63
+ write_modem_params if telnet
113
64
  end
114
65
 
115
66
  def sock
@@ -127,6 +78,7 @@ module Net
127
78
  def readbyte
128
79
  read(1)&.[](0)
129
80
  end
81
+ alias getbyte readbyte
130
82
 
131
83
  def readpartial(length, outbuf = '')
132
84
  loop do
@@ -193,6 +145,15 @@ module Net
193
145
  result
194
146
  end
195
147
 
148
+ def ready?
149
+ loop do
150
+ return true unless @buffer.empty?
151
+ return false if sock.wait_readable(0).nil?
152
+ # consume control characters first
153
+ readpartial(0)
154
+ end
155
+ end
156
+
196
157
  def ungetbyte(b)
197
158
  @buffer.insert(0, b.chr)
198
159
  end
@@ -216,12 +177,46 @@ module Net
216
177
 
217
178
  private
218
179
 
180
+ COM_PORT_OPTION = 44.chr
181
+
182
+ SET_BAUDRATE = 1.chr
183
+ SET_DATASIZE = 2.chr
184
+ SET_PARITY = 3.chr
185
+ SET_STOPSIZE = 4.chr
186
+ SET_CONTROL = 5.chr
187
+ NOTIFY_LINESTATE = 6.chr
188
+ NOTIFY_MODEMSTATE = 7.chr
189
+ FLOWCONTROL_SUSPEND = 8.chr
190
+ SET_LINESTATE_MASK = 10.chr
191
+ SET_MODEMSTATE_MASK = 11.chr
192
+ PURGE_DATA = 12.chr
193
+
194
+ SET_BAUDRATE_RESPONSE = 101.chr
195
+ SET_DATASIZE_RESPONSE = 102.chr
196
+ SET_PARITY_RESPONSE = 103.chr
197
+ SET_STOPSIZE_RESPONSE = 104.chr
198
+ SET_CONTROL_RESPONSE = 105.chr
199
+ NOTIFY_LINESTATE_RESPONSE = 106.chr
200
+ NOTIFY_MODEMSTATE_RESPONSE = 107.chr
201
+ FLOWCONTROL_SUSPEND_RESPONSE = 108.chr
202
+ SET_LINESTATE_MASK_RESPONSE = 110.chr
203
+ SET_MODEMSTATE_MASK_RESPONSE = 111.chr
204
+ PURGE_DATA_RESPONSE = 112.chr
205
+
206
+ NONE = 1
207
+ ODD = 2
208
+ EVEN = 3
209
+ MARK = 4
210
+ SPACE = 5
211
+
212
+ private_constant *(constants - [:WaitReadable])
213
+
219
214
  def write_modem_params
220
215
  telnet.write(
221
216
  IAC + SB + COM_PORT_OPTION + SET_BAUDRATE + [baud].pack("N") + IAC + SE +
222
217
  IAC + SB + COM_PORT_OPTION + SET_DATASIZE + data_bits.chr + IAC + SE +
223
218
  IAC + SB + COM_PORT_OPTION + SET_STOPSIZE + stop_bits.chr + IAC + SE +
224
- IAC + SB + COM_PORT_OPTION + SET_PARITY + parity.chr + IAC + SE)
219
+ IAC + SB + COM_PORT_OPTION + SET_PARITY + self.class.const_get(parity.upcase, false).chr + IAC + SE)
225
220
  sock.flush
226
221
  end
227
222
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-telnet-rfc2217
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-13 00:00:00.000000000 Z
11
+ date: 2022-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-telnet
@@ -81,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  requirements: []
84
- rubygems_version: 3.0.3
84
+ rubygems_version: 3.1.2
85
85
  signing_key:
86
86
  specification_version: 4
87
87
  summary: Library for getting an IO-like object for a remote serial port