net-telnet-rfc2217 0.0.5 → 1.0.0

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: 36e3c4930e4d87bbc6842436f284be89af5ca93d79d772a042cae3548900b72b
4
+ data.tar.gz: 9660b8ec96df884b3a063a0f38e9772fc650a2477497ba35fdb4fe23d6cf5d3b
5
5
  SHA512:
6
- metadata.gz: 7c369abec55f93a3ffa2a925107dc4936cc6c8c8bb4af0e9c0c445a014703ea61af662c9b19ee7fcd2b617126b9c2ccbde9bbbd526cb35ad69ad813623ba5b06
7
- data.tar.gz: 8886939d76f493ce2091073969fac2f6bac3b6487c5250a7f425a61e227627817aaae858ddaeb8fc04ea1eb03eb82cadad926f7919e848710208f0398cfb850d
6
+ metadata.gz: bf4cc72ab62ff398f01511228d27a2813d89f0b7104b34a0820afbf65eb806490a43cbf51eb63b94cf1f6eb2798ca23edfdab9b1fcda03c6dea58eb84d69105b
7
+ data.tar.gz: c7af80ae0c10b2796ccccc7126137cc23437fc6ecd25d487cf7b758b4e16a0884fcf82c3569cab77edb204caf66c4818a7e83f38491b7e7bf76537b690e509ea
@@ -14,43 +14,9 @@ module Net
14
14
 
15
15
  attr_reader :telnet
16
16
 
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
17
  class << self
52
- def open(options)
53
- sp = new(options)
18
+ def open(**kwargs)
19
+ sp = new(opt**kwargs)
54
20
  if block_given?
55
21
  begin
56
22
  yield sp
@@ -64,9 +30,15 @@ module Net
64
30
  end
65
31
  end
66
32
 
67
- def initialize(options = {}, &block)
68
- set_modem_params(options.slice(*SERIAL_PORT_PARAMS))
33
+ attr_reader :baud, :data_bits, :parity, :stop_bits
34
+
35
+ def initialize(host, port: 23, baud: 115200, data_bits: 8, parity: :none, stop_bits: 1, &block)
36
+ set_modem_params(baud: baud, data_bits: data_bits, parity: parity, stop_bits: stop_bits)
69
37
 
38
+ options = {
39
+ 'Host' => host,
40
+ 'Port' => port,
41
+ }
70
42
  options['Binmode'] = true
71
43
  options['Telnetmode'] = false
72
44
  @telnet = Telnet.new(options, &block)
@@ -81,35 +53,15 @@ module Net
81
53
  end
82
54
  end
83
55
 
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
56
+ def set_modem_params(baud: nil, data_bits: nil, parity: nil, stop_bits: nil)
57
+ raise ArgumentError, "Parity must be :none, :even, :odd, :mark, or :space" unless parity.nil? || %i{none even odd mark space}.include?(parity)
102
58
 
103
- def data_bits
104
- get_modem_params['data_bits']
105
- end
59
+ @baud ||= baud || 115200
60
+ @data_bits ||= data_bits || 8
61
+ @parity ||= parity || :none
62
+ @stop_bits ||= stop_bits || 1
106
63
 
107
- def stop_bits
108
- get_modem_params['stop_bits']
109
- end
110
-
111
- def parity
112
- get_modem_params['parity']
64
+ write_modem_params if telnet
113
65
  end
114
66
 
115
67
  def sock
@@ -127,6 +79,7 @@ module Net
127
79
  def readbyte
128
80
  read(1)&.[](0)
129
81
  end
82
+ alias getbyte readbyte
130
83
 
131
84
  def readpartial(length, outbuf = '')
132
85
  loop do
@@ -193,6 +146,15 @@ module Net
193
146
  result
194
147
  end
195
148
 
149
+ def ready?
150
+ loop do
151
+ return true unless @buffer.empty?
152
+ return false if sock.wait_readable(0).nil?
153
+ # consume control characters first
154
+ readpartial(0)
155
+ end
156
+ end
157
+
196
158
  def ungetbyte(b)
197
159
  @buffer.insert(0, b.chr)
198
160
  end
@@ -216,12 +178,46 @@ module Net
216
178
 
217
179
  private
218
180
 
181
+ COM_PORT_OPTION = 44.chr
182
+
183
+ SET_BAUDRATE = 1.chr
184
+ SET_DATASIZE = 2.chr
185
+ SET_PARITY = 3.chr
186
+ SET_STOPSIZE = 4.chr
187
+ SET_CONTROL = 5.chr
188
+ NOTIFY_LINESTATE = 6.chr
189
+ NOTIFY_MODEMSTATE = 7.chr
190
+ FLOWCONTROL_SUSPEND = 8.chr
191
+ SET_LINESTATE_MASK = 10.chr
192
+ SET_MODEMSTATE_MASK = 11.chr
193
+ PURGE_DATA = 12.chr
194
+
195
+ SET_BAUDRATE_RESPONSE = 101.chr
196
+ SET_DATASIZE_RESPONSE = 102.chr
197
+ SET_PARITY_RESPONSE = 103.chr
198
+ SET_STOPSIZE_RESPONSE = 104.chr
199
+ SET_CONTROL_RESPONSE = 105.chr
200
+ NOTIFY_LINESTATE_RESPONSE = 106.chr
201
+ NOTIFY_MODEMSTATE_RESPONSE = 107.chr
202
+ FLOWCONTROL_SUSPEND_RESPONSE = 108.chr
203
+ SET_LINESTATE_MASK_RESPONSE = 110.chr
204
+ SET_MODEMSTATE_MASK_RESPONSE = 111.chr
205
+ PURGE_DATA_RESPONSE = 112.chr
206
+
207
+ NONE = 1
208
+ ODD = 2
209
+ EVEN = 3
210
+ MARK = 4
211
+ SPACE = 5
212
+
213
+ private_constant *(constants - [:WaitReadable])
214
+
219
215
  def write_modem_params
220
216
  telnet.write(
221
217
  IAC + SB + COM_PORT_OPTION + SET_BAUDRATE + [baud].pack("N") + IAC + SE +
222
218
  IAC + SB + COM_PORT_OPTION + SET_DATASIZE + data_bits.chr + IAC + SE +
223
219
  IAC + SB + COM_PORT_OPTION + SET_STOPSIZE + stop_bits.chr + IAC + SE +
224
- IAC + SB + COM_PORT_OPTION + SET_PARITY + parity.chr + IAC + SE)
220
+ IAC + SB + COM_PORT_OPTION + SET_PARITY + const_get(parity.upcase, false).chr + IAC + SE)
225
221
  sock.flush
226
222
  end
227
223
  end
@@ -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.0'
5
5
  end
6
6
  end
7
7
  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.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-13 00:00:00.000000000 Z
11
+ date: 2021-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-telnet
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '13.0'
55
- description:
55
+ description:
56
56
  email: cody@cutrer.com'
57
57
  executables: []
58
58
  extensions: []
@@ -66,7 +66,7 @@ homepage: https://github.com/ccutrer/net-telnet-2217
66
66
  licenses:
67
67
  - MIT
68
68
  metadata: {}
69
- post_install_message:
69
+ post_install_message:
70
70
  rdoc_options: []
71
71
  require_paths:
72
72
  - lib
@@ -81,8 +81,8 @@ 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
85
- signing_key:
84
+ rubygems_version: 3.1.4
85
+ signing_key:
86
86
  specification_version: 4
87
87
  summary: Library for getting an IO-like object for a remote serial port
88
88
  test_files: []