muby 0.7.5 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,7 +4,7 @@ require 'ncurses'
4
4
  module Muby
5
5
 
6
6
 
7
- VERSION = "0.7.5" unless defined?(Muby::VERSION)
7
+ VERSION = "0.7.6" unless defined?(Muby::VERSION)
8
8
 
9
9
  #
10
10
  # The class that encapsulates all configuration.
@@ -150,15 +150,68 @@ class Muby::Connection
150
150
  c
151
151
  end
152
152
 
153
+ TELNET_COMMANDS = {
154
+ 240 => :end_of_sub_negotiation,
155
+ 241 => :noop,
156
+ 242 => :data_mark,
157
+ 243 => :break,
158
+ 249 => :go_ahead,
159
+ 250 => :sub_negotiation,
160
+ 251 => :will,
161
+ 252 => :wont,
162
+ 253 => :do,
163
+ 254 => :dont,
164
+ 255 => :iac
165
+ }
166
+
167
+ #
168
+ # This is not telnet command OR ansi, lets treat it as nice MUD text!
169
+ #
170
+ # Debug about it, add it to match buffer, add it to show buffer and show if we want to show.
171
+ # Then check it for triggers.
172
+ #
173
+ def handle_regular_character(c)
174
+ @matchBuffer = @matchBuffer + c.chr
175
+ append_show_buffer(c.chr)
176
+ manage_buffers(c)
177
+ end
178
+
153
179
  def handle(c)
154
180
  #
155
181
  # The telnet support (just so we dont explode or something)
156
182
  #
157
- # We are just plain ignoring it atm.
183
+ # We are just plain ignoring most of it atm.
158
184
  #
159
- if c == 255 # telnet interpret as command (IAC)
160
- c = getc # get the request (DO|DONT)
161
- c = getc # get the latest part whatever that is
185
+ if TELNET_COMMANDS[c] == :iac # this is an "interpret as command"
186
+ c = getc
187
+ if (next_command = TELNET_COMMANDS[c]) == :iac # if the next one as well is an iac, we actually want to display a 255
188
+ handle_regular_character(c)
189
+ else
190
+ case next_command
191
+ when :do # ignore the option negotiation
192
+ c = getc
193
+ when :dont # ignore the option negotiation
194
+ c = getc
195
+ when :will # ignore the option negotiation
196
+ c = getc
197
+ when :wont # ignore the option negotiation
198
+ c = getc
199
+ when :noop # waf?
200
+ # do nothing
201
+ when :data_mark
202
+ warn("Got a data_mark (TELNET protocol) which I don't know how to handle. Expect strange behaviour...")
203
+ when :break
204
+ warn("Got a break (TELNET protocol) which I don't know how to handle. Expect strange behaviour...")
205
+ when :go_ahead
206
+ display_buffer # on a go ahead the server obviously wants us to display the @displayBuffer regardless of our conf.flush setting
207
+ when :sub_negotiation # we just skip ahead to the end of the sub negotiation
208
+ while TELNET_COMMANDS[c] != :end_of_sub_negotiation
209
+ c = getc
210
+ end
211
+ else
212
+ warn("Got an unknown TELNET command (#{c.chr}) which I don't know how to handle. Expect strange behaviour...")
213
+ end
214
+ end
162
215
  elsif c == 27 # escape char! this is probably some ANSI color or shite
163
216
  c = getc
164
217
  if c.chr == "[" # this is an ansi-something that is more than one char long
@@ -233,15 +286,7 @@ class Muby::Connection
233
286
  end
234
287
  end
235
288
  elsif !conf.broken_keycodes.include?(c)
236
- #
237
- # This is not telnet command OR ansi, lets treat it as nice MUD text!
238
- #
239
- # Debug about it, add it to match buffer, add it to show buffer and show if we want to show.
240
- # Then check it for triggers.
241
- #
242
- @matchBuffer = @matchBuffer + c.chr
243
- append_show_buffer(c.chr)
244
- manage_buffers(c)
289
+ handle_regular_character(c)
245
290
  end
246
291
  end
247
292
 
@@ -283,7 +328,6 @@ class Muby::Connection
283
328
  trigger(@matchBuffer, conf.remote_character_triggers, true)
284
329
  if c == 10 || conf.flush
285
330
  display_buffer
286
- @showBuffer = []
287
331
  if c == 10
288
332
  trigger(@matchBuffer, conf.remote_triggers, false)
289
333
  @matchBuffer = ""
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.7.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Kihlgren, Sy Ali
@@ -9,7 +9,7 @@ autorequire: muby
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-02-26 00:00:00 +01:00
12
+ date: 2008-02-27 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency