net-telnet-rfc2217 0.0.5 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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